|
|
@@ -91,19 +91,20 @@ def error_handler(view_fn):
|
|
|
|
|
|
@error_handler
|
|
|
def autocomplete(request, database=None, table=None, column=None, nested=None):
|
|
|
+ cluster = request.POST.get('cluster')
|
|
|
app_name = None if FORCE_HS2_METADATA.get() else get_app_name(request)
|
|
|
|
|
|
do_as = request.user
|
|
|
if (is_admin(request.user) or request.user.has_hue_permission(action="impersonate", app="security")) and 'doas' in request.GET:
|
|
|
do_as = User.objects.get(username=request.GET.get('doas'))
|
|
|
|
|
|
- db = _get_db(user=do_as, source_type=app_name)
|
|
|
+ db = _get_db(user=do_as, source_type=app_name, cluster=cluster)
|
|
|
|
|
|
- response = _autocomplete(db, database, table, column, nested)
|
|
|
+ response = _autocomplete(db, database, table, column, nested, cluster=cluster)
|
|
|
return JsonResponse(response)
|
|
|
|
|
|
|
|
|
-def _autocomplete(db, database=None, table=None, column=None, nested=None, query=None):
|
|
|
+def _autocomplete(db, database=None, table=None, column=None, nested=None, query=None, cluster=None):
|
|
|
response = {}
|
|
|
|
|
|
try:
|
|
|
@@ -122,12 +123,10 @@ def _autocomplete(db, database=None, table=None, column=None, nested=None, query
|
|
|
|
|
|
cols_extended = massage_columns_for_json(table.cols)
|
|
|
|
|
|
- if 'org.apache.kudu.mapreduce.KuduTableOutputFormat' in str(table.properties): # When queries from Impala directly
|
|
|
- table.is_impala_only = True
|
|
|
-
|
|
|
- if table.is_impala_only: # Expand Kudu columns information
|
|
|
- query_server = get_query_server_config('impala')
|
|
|
- db = dbms.get(db.client.user, query_server, cluster=db.cluster)
|
|
|
+ if table.is_impala_only:
|
|
|
+ if db.client.query_server['server_name'] != 'impala': # Expand Kudu columns information
|
|
|
+ query_server = get_query_server_config('impala', cluster=cluster)
|
|
|
+ db = dbms.get(db.client.user, query_server, cluster=cluster)
|
|
|
|
|
|
col_options = db.get_table_describe(database, table.name)
|
|
|
extra_col_options = dict([(col[0], dict(zip(col_options.cols(), col))) for col in col_options.rows()])
|
|
|
@@ -657,11 +656,11 @@ def get_sample_data(request, database, table, column=None):
|
|
|
return JsonResponse(response)
|
|
|
|
|
|
|
|
|
-def _get_sample_data(db, database, table, column, async=False):
|
|
|
+def _get_sample_data(db, database, table, column, async=False, cluster=None):
|
|
|
table_obj = db.get_table(database, table)
|
|
|
if table_obj.is_impala_only and db.client.query_server['server_name'] != 'impala':
|
|
|
- query_server = get_query_server_config('impala')
|
|
|
- db = dbms.get(db.client.user, query_server)
|
|
|
+ query_server = get_query_server_config('impala', cluster=cluster)
|
|
|
+ db = dbms.get(db.client.user, query_server, cluster=cluster)
|
|
|
|
|
|
sample_data = db.get_sample(database, table_obj, column, generate_sql_only=async)
|
|
|
response = {'status': -1}
|
|
|
@@ -678,6 +677,8 @@ def _get_sample_data(db, database, table, column, async=False):
|
|
|
is_task=False
|
|
|
)
|
|
|
response['result'] = notebook.execute(request=MockedDjangoRequest(user=db.client.user), batch=False)
|
|
|
+ if table_obj.is_impala_only:
|
|
|
+ response['result']['type'] = 'impala'
|
|
|
else:
|
|
|
sample = escape_rows(sample_data.rows(), nulls_only=True)
|
|
|
if column:
|