Pārlūkot izejas kodu

HUE-8408 [report] Minimal capability for report query

jdesjean 7 gadi atpakaļ
vecāks
revīzija
6993508b4e

+ 3 - 3
desktop/core/src/desktop/api2.py

@@ -83,7 +83,7 @@ def get_context_namespaces(request, interface):
 
   clusters = get_clusters(request.user).values()
 
-  if interface == 'hive' or interface == 'impala':
+  if interface == 'hive' or interface == 'impala' or interface == 'report':
     namespaces.extend([{
         'id': cluster['id'],
         'name': cluster['name'],
@@ -131,7 +131,7 @@ def get_context_computes(request, interface):
 
   clusters = get_clusters(request.user).values()
 
-  if interface == 'hive' or interface == 'impala' or interface == 'oozie' or interface == 'jobs':
+  if interface == 'hive' or interface == 'impala' or interface == 'oozie' or interface == 'jobs' or interface == 'report':
     computes.extend([{
         'id': cluster['id'],
         'name': cluster['name'],
@@ -141,7 +141,7 @@ def get_context_computes(request, interface):
       } for cluster in clusters if cluster.get('type') == 'direct'
     ])
 
-  if interface == 'impala' or interface == 'jobs':
+  if interface == 'impala' or interface == 'jobs' or interface == 'report':
     if [cluster for cluster in clusters if cluster['type'] == 'altus']:
       computes.extend([{
           'id': cluster.get('crn'),

+ 17 - 1
desktop/libs/dashboard/src/dashboard/api.py

@@ -15,8 +15,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import hashlib
 import json
 import logging
+import uuid
 
 from django.utils.encoding import force_unicode
 from django.utils.translation import ugettext as _
@@ -24,6 +26,7 @@ from django.utils.translation import ugettext as _
 from desktop.lib.django_util import JsonResponse
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.rest.http_client import RestException
+from desktop.models import Document2
 
 from libsolr.api import SolrApi
 
@@ -392,9 +395,22 @@ def _create_facet(collection, user, facet_id, facet_label, facet_field, widget_t
     facet_type = 'pivot'
   elif widget_type == 'document-widget':
     # SQL query, 1 solr widget
+    doc = Document2.objects.get_by_uuid(user=user, uuid=collection['selectedDocument']['uuid'], perm_type='read')
+    snippets = doc.data_dict.get('snippets', [])
+    snippets = [snippet for snippet in snippets if snippet['type'] in ('hive', 'impala')]
+    snippets[0]['statement_raw']
     properties['uuid'] = facet_field
     properties['engine'] = 'impala'
-    properties['statement'] = 'select * from web_logs limit 50'
+
+    properties['result'] = snippets[0]['result'] if snippets else {'handle': {}}
+    if snippets:
+      handle = snippets[0]['result']['handle']
+      # Replace previous_statement_hash so that we rerun current statement
+      properties['result'] = {'handle': {'statement_id': handle['statement_id'], 'statements_count': handle['statements_count'], 'previous_statement_hash': hashlib.sha224(str(uuid.uuid4())).hexdigest()}}
+      properties['statement'] = snippets[0]['statement_raw']
+    else:
+      properties['result'] = {'handle': {}}
+      properties['statement'] = ''
     properties['facets'] = [{'canRange': False, 'field': 'blank', 'limit': 10, 'mincount': 0, 'sort': 'desc', 'aggregate': {'function': 'count'}, 'isDate': False}]
     facet_type = 'statement'
   else:

+ 4 - 1
desktop/libs/notebook/src/notebook/dashboard_api.py

@@ -59,6 +59,7 @@ class SQLDashboardApi(DashboardApi):
 
     filters = [q['q'] for q in query['qs'] if q['q']]
     filters.extend(self._get_fq(dashboard, query, facet))
+    result_properties = {}
 
     timeFilter = self._get_time_filter_query(dashboard, query)
     if timeFilter:
@@ -152,6 +153,7 @@ class SQLDashboardApi(DashboardApi):
         }
       elif facet['type'] == 'statement':
         sql = facet['properties']['statement']
+        result_properties = facet['properties']['result']
     else:
       fields = Collection2.get_field_list(dashboard)
       order_by = ', '.join(['`%s` %s' % (f['name'], f['sort']['direction']) for f in dashboard['template']['fieldsAttributes'] if f['sort']['direction'] and f['name'] in fields])
@@ -174,7 +176,8 @@ class SQLDashboardApi(DashboardApi):
         statement=sql,
         database=database,
         status='ready-execute',
-        skip_historify=True
+        skip_historify=True,
+        result_properties=result_properties
     )
 
     response = editor.execute(MockRequest(self.user, self.cluster))

+ 3 - 1
desktop/libs/notebook/src/notebook/models.py

@@ -58,7 +58,7 @@ def escape_rows(rows, nulls_only=False, encoding=None):
 
 def make_notebook(name='Browse', description='', editor_type='hive', statement='', status='ready',
                   files=None, functions=None, settings=None, is_saved=False, database='default', snippet_properties=None, batch_submit=False,
-                  on_success_url=None, skip_historify=False, is_task=False, last_executed=-1, is_notebook=False, pub_sub_url=None):
+                  on_success_url=None, skip_historify=False, is_task=False, last_executed=-1, is_notebook=False, pub_sub_url=None, result_properties={}):
   '''
   skip_historify: do not add the task to the query history. e.g. SQL Dashboard
   isManaged: true when being a managed by Hue operation (include_managed=True in document), e.g. exporting query result, dropping some tables
@@ -131,6 +131,8 @@ def make_notebook(name='Browse', description='', editor_type='hive', statement='
 
   if snippet_properties:
     data['snippets'][0]['properties'].update(snippet_properties)
+  if result_properties:
+    data['snippets'][0]['result'].update(result_properties)
 
   editor.data = json.dumps(data)