Jelajahi Sumber

[impala] Impala header columns are wrong

Use the names and not the types of the columns (previous bug with Beeswax interface)
Refine new app with Beeswax
Cloudera Impala as name
List tables/DDL still switches to Beeswaxd
Fix some HTML escaping
Romain Rigaux 13 tahun lalu
induk
melakukan
ec560e6

+ 9 - 3
apps/beeswax/src/beeswax/server/beeswax_lib.py

@@ -110,7 +110,10 @@ class BeeswaxClient:
 
   def make_query(self, hql_query):
     # HUE-535 without having to modify Beeswaxd, add 'use database' as first option
-    configuration = ['use ' + hql_query.query.get('database', 'default')]
+    if self.query_server['server_name'] == 'impala':
+      configuration = []
+    else:
+      configuration = ['use ' + hql_query.query.get('database', 'default')]
     configuration.extend(hql_query.get_configuration())
 
     thrift_query = BeeswaxService.Query(query=hql_query.query['query'], configuration=configuration)
@@ -141,10 +144,13 @@ class BeeswaxClient:
     if rows is None:
       rows = -1
 
-    handle = handle.get_rpc_handle()
-    results = self.db_client.fetch(handle, start_over, rows)
+    rpc_handle = handle.get_rpc_handle()
+    results = self.db_client.fetch(rpc_handle, start_over, rows)
 
     if results.ready:
+      # Impala does not return the name of the columns, need to fetch separately
+      if self.query_server['server_name'] == 'impala':
+        results.columns = [column.name for column in self.get_results_metadata(handle).schema.fieldSchemas]
       return BeeswaxDataTable(results)
 
 

+ 11 - 3
apps/beeswax/src/beeswax/templates/execute.mako

@@ -37,7 +37,7 @@
 
     <div id="validationResults">
     % if len(form.query["query"].errors):
-        ${ unicode(form.query["query"].errors) }
+        ${ unicode(form.query["query"].errors) | n,unicode }
      % endif
     </div>
 
@@ -64,8 +64,16 @@ ${layout.menubar(section='query')}
             <div class="well sidebar-nav">
                 <form id="advancedSettingsForm" action="${action}" method="POST" class="form form-horizontal noPadding">
                     <ul class="nav nav-list">
-                        <li class="nav-header">${_('database')}</li>
-                        <li>
+                        <li class="nav-header
+                        % if app_name == 'impala':
+                            hide
+                        % endif
+                        ">${_('database')}</li>
+                        <li
+                        % if app_name == 'impala':
+                            class="hide"
+                        % endif
+                        >
                           ${ form.query['database'] | n,unicode }
                         </li>
                         <li class="nav-header">${_('settings')}</li>

+ 0 - 2
apps/beeswax/src/beeswax/views.py

@@ -647,8 +647,6 @@ def view_results(request, id, first_row=0):
   }
 
   if not error:
-    #data = list(results.rows()) # Materialize results
-
     download_urls = {}
     if downloadable:
       for format in common.DL_FORMATS:

+ 1 - 1
apps/impala/src/impala/settings.py

@@ -15,7 +15,7 @@
 # limitations under the License.
 
 DJANGO_APPS = ['impala']
-NICE_NAME = 'Impala'
+NICE_NAME = 'Cloudera Impala (TM) Query UI'
 MENU_INDEX = 11
 ICON = '/impala/static/art/icon_impala_24.png'
 

+ 2 - 2
apps/oozie/src/oozie/templates/editor/create_coordinator.mako

@@ -76,10 +76,10 @@ ${ layout.menubar(section='coordinators') }
               ${ utils.render_field_no_popover(coordinator_form['name'], extra_attrs = {'validate':'true'}) }
               ${ utils.render_field_no_popover(coordinator_form['description']) }
               ${ utils.render_field_no_popover(coordinator_form['workflow'], extra_attrs = {'validate':'true'}) }
-              ${ coordinator_form['parameters'] }
+              ${ coordinator_form['parameters'] | n,unicode }
               <div class="hide">
                 ${ utils.render_field(coordinator_form['timeout']) }
-                ${ coordinator_form['schema_version'] }
+                ${ coordinator_form['schema_version'] | n,unicode }
               </div>
             </div>
           </div>

+ 3 - 3
apps/oozie/src/oozie/templates/editor/create_coordinator_data.mako

@@ -66,9 +66,9 @@ from django.utils.safestring import mark_safe
 
   <script type="text/javascript">
     $(document).ready(function(){
-      var initial = ${ [{'name': str(form['name']), 'dataset': str(form['dataset']), 'error_message': str(form.errors) } for form in formset.forms] };
-      var nameHTML = '${ str(formset.empty_form["name"]).replace("\r", "").replace("\n", "").replace("\s", "") }';
-      var datasetHTML = '${ str(formset.empty_form["dataset"]).replace("\r", "").replace("\n", "").replace("\s", "") }';
+      var initial = ${ [{'name': str(form['name']), 'dataset': str(form['dataset']), 'error_message': str(form.errors) } for form in formset.forms]  | n,unicode };
+      var nameHTML = '${ str(formset.empty_form["name"]).replace("\r", "").replace("\n", "").replace("\s", "") | n,unicode }';
+      var datasetHTML = '${ str(formset.empty_form["dataset"]).replace("\r", "").replace("\n", "").replace("\s", "") | n,unicode }';
       var count = initial.length;
       var root = $('#${element}');
       var table = root.find('table');

+ 8 - 7
apps/oozie/src/oozie/templates/editor/edit_coordinator.mako

@@ -86,12 +86,13 @@ ${ layout.menubar(section='coordinators') }
           <li><a href="#step4" class="step">${ _('Step 4: Outputs') }</a></li>
           <li><a href="#step5" class="step">${ _('Step 5: Advanced settings') }</a></li>
         </ul>
+
         ${ dataset_formset.management_form | n,unicode }
         ${ data_input_formset.management_form | n,unicode }
         ${ data_output_formset.management_form | n,unicode }
         ${ properties.init_viewmodel(coordinator) }
-        <div class="steps">
 
+        <div class="steps">
           <div id="step1" class="stepDetails">
             <div class="alert alert-info"><h3>${ _('Coordinator data') }</h3></div>
             <div class="fieldWrapper">
@@ -156,9 +157,9 @@ ${ layout.menubar(section='coordinators') }
                 <tbody>
                 % for form in data_input_formset.forms:
                 <tr>
-                  ${ form['id'] }
-                  <td>${ form['name'] }</td>
-                  <td>${ form['dataset'] }</td>
+                  ${ form['id'] | n,unicode }
+                  <td>${ form['name'] | n,unicode }</td>
+                  <td>${ form['dataset'] | n,unicode }</td>
                   <td>${ form['dataset'].form.instance.dataset.uri }</td>
                 % if coordinator.is_editable(user):
                   <td><a class="btn btn-small delete-row" href="javascript:void(0);">${ _('Delete') }${ form['DELETE'] | n,unicode }</a></td>
@@ -209,9 +210,9 @@ ${ layout.menubar(section='coordinators') }
               <tbody>
                 % for form in data_output_formset.forms:
                   <tr>
-                    ${ form['id'] }
-                    <td>${ form['name'] }</td>
-                    <td>${ form['dataset'] }</td>
+                    ${ form['id'] | n,unicode }
+                    <td>${ form['name'] | n,unicode }</td>
+                    <td>${ form['dataset'] | n,unicode }</td>
                     <td>${ form['dataset'].form.instance.dataset.uri }</td>
                     % if coordinator.is_editable(user):
                       <td><a class="btn btn-small delete-row" href="javascript:void(0);">${ _('Delete') }${ form['DELETE'] | n,unicode }</a></td>