Prechádzať zdrojové kódy

HUE-6850 [metastore] Rely on default SQL editor type for DDL operations

Romain Rigaux 8 rokov pred
rodič
commit
f97e6c1113

+ 4 - 0
apps/metastore/src/metastore/templates/metastore.mako

@@ -366,6 +366,7 @@ ${ components.menubar(is_embeddable) }
         <form action="/metastore/databases/drop" data-bind="submit: dropAndWatch" method="POST">
         <form action="/metastore/databases/drop" data-bind="submit: dropAndWatch" method="POST">
           <input type="hidden" name="is_embeddable" value="true"/>
           <input type="hidden" name="is_embeddable" value="true"/>
           <input type="hidden" name="start_time" value=""/>
           <input type="hidden" name="start_time" value=""/>
+          <input type="hidden" name="source_type" data-bind="value: $root.sourceType"/>
       % else:
       % else:
         <form id="dropDatabaseForm" action="/metastore/databases/drop" method="POST">
         <form id="dropDatabaseForm" action="/metastore/databases/drop" method="POST">
       % endif
       % endif
@@ -550,6 +551,7 @@ ${ components.menubar(is_embeddable) }
         <form data-bind="attr: { 'action': '/metastore/tables/drop/' + name }, submit: dropAndWatch" method="POST">
         <form data-bind="attr: { 'action': '/metastore/tables/drop/' + name }, submit: dropAndWatch" method="POST">
           <input type="hidden" name="is_embeddable" value="true"/>
           <input type="hidden" name="is_embeddable" value="true"/>
           <input type="hidden" name="start_time" value=""/>
           <input type="hidden" name="start_time" value=""/>
+          <input type="hidden" name="source_type" data-bind="value: $root.sourceType"/>
       % else:
       % else:
         <form data-bind="attr: { 'action': '/metastore/tables/drop/' + name }" method="POST">
         <form data-bind="attr: { 'action': '/metastore/tables/drop/' + name }" method="POST">
       % endif
       % endif
@@ -778,6 +780,7 @@ ${ components.menubar(is_embeddable) }
         <input type="hidden" name="is_embeddable" value="true"/>
         <input type="hidden" name="is_embeddable" value="true"/>
         <input type="hidden" name="format" value="json"/>
         <input type="hidden" name="format" value="json"/>
         <input type="hidden" name="start_time" value=""/>
         <input type="hidden" name="start_time" value=""/>
+        <input type="hidden" name="source_type" data-bind="value: $root.sourceType"/>
     % else:
     % else:
       <form data-bind="attr: { 'action': '/metastore/table/' + $parent.database.name + '/' + $parent.name + '/partitions/drop' }" method="POST">
       <form data-bind="attr: { 'action': '/metastore/table/' + $parent.database.name + '/' + $parent.name + '/partitions/drop' }" method="POST">
     % endif
     % endif
@@ -1195,6 +1198,7 @@ ${ components.menubar(is_embeddable) }
     <form data-bind="submit: dropAndWatch" method="POST">
     <form data-bind="submit: dropAndWatch" method="POST">
       <input type="hidden" name="is_embeddable" value="true"/>
       <input type="hidden" name="is_embeddable" value="true"/>
       <input type="hidden" name="start_time" value=""/>
       <input type="hidden" name="start_time" value=""/>
+      <input type="hidden" name="source_type" data-bind="value: $root.sourceType"/>
     % else:
     % else:
     <form method="POST">
     <form method="POST">
     % endif
     % endif

+ 42 - 19
apps/metastore/src/metastore/views.py

@@ -92,20 +92,20 @@ def databases(request):
 
 
 @check_has_write_access_permission
 @check_has_write_access_permission
 def drop_database(request):
 def drop_database(request):
-  db = dbms.get(request.user)
+  source_type = request.POST.get('source_type', 'hive')
+  db = _get_db(user=request.user, source_type=source_type)
 
 
   if request.method == 'POST':
   if request.method == 'POST':
     databases = request.POST.getlist('database_selection')
     databases = request.POST.getlist('database_selection')
 
 
     try:
     try:
-      design = SavedQuery.create_empty(app_name='beeswax', owner=request.user, data=hql_query('').dumps())
-
       if request.POST.get('is_embeddable'):
       if request.POST.get('is_embeddable'):
+        design = SavedQuery.create_empty(app_name=source_type if source_type != 'hive' else 'beeswax', owner=request.user, data=hql_query('').dumps())
         last_executed = json.loads(request.POST.get('start_time'), '-1')
         last_executed = json.loads(request.POST.get('start_time'), '-1')
         sql = db.drop_databases(databases, design, generate_ddl_only=True)
         sql = db.drop_databases(databases, design, generate_ddl_only=True)
         job = make_notebook(
         job = make_notebook(
             name=_('Drop database %s') % ', '.join(databases)[:100],
             name=_('Drop database %s') % ', '.join(databases)[:100],
-            editor_type='hive',
+            editor_type=source_type,
             statement=sql.strip(),
             statement=sql.strip(),
             status='ready',
             status='ready',
             database=None,
             database=None,
@@ -115,6 +115,7 @@ def drop_database(request):
         )
         )
         return JsonResponse(job.execute(request))
         return JsonResponse(job.execute(request))
       else:
       else:
+        design = SavedQuery.create_empty(app_name='beeswax', owner=request.user, data=hql_query('').dumps())
         query_history = db.drop_databases(databases, design)
         query_history = db.drop_databases(databases, design)
         url = reverse('beeswax:watch_query_history', kwargs={'query_history_id': query_history.id}) + '?on_success_url=' + reverse('metastore:databases')
         url = reverse('beeswax:watch_query_history', kwargs={'query_history_id': query_history.id}) + '?on_success_url=' + reverse('metastore:databases')
         return redirect(url)
         return redirect(url)
@@ -130,8 +131,11 @@ def drop_database(request):
 @check_has_write_access_permission
 @check_has_write_access_permission
 @require_http_methods(["POST"])
 @require_http_methods(["POST"])
 def alter_database(request, database):
 def alter_database(request, database):
-  db = dbms.get(request.user)
   response = {'status': -1, 'data': ''}
   response = {'status': -1, 'data': ''}
+
+  source_type = request.POST.get('source_type', 'hive')
+  db = _get_db(user=request.user, source_type=source_type)
+
   try:
   try:
     properties = request.POST.get('properties')
     properties = request.POST.get('properties')
 
 
@@ -153,8 +157,10 @@ def alter_database(request, database):
 
 
 
 
 def get_database_metadata(request, database):
 def get_database_metadata(request, database):
-  db = _get_db(user=request.user)
   response = {'status': -1, 'data': ''}
   response = {'status': -1, 'data': ''}
+  source_type = request.POST.get('source_type', 'hive')
+  db = _get_db(user=request.user, source_type=source_type)
+
   try:
   try:
     db_metadata = db.get_database(database)
     db_metadata = db.get_database(database)
     response['status'] = 0
     response['status'] = 0
@@ -316,8 +322,11 @@ def describe_table(request, database, table):
 @check_has_write_access_permission
 @check_has_write_access_permission
 @require_http_methods(["POST"])
 @require_http_methods(["POST"])
 def alter_table(request, database, table):
 def alter_table(request, database, table):
-  db = dbms.get(request.user)
   response = {'status': -1, 'data': ''}
   response = {'status': -1, 'data': ''}
+
+  source_type = request.POST.get('source_type', 'hive')
+  db = _get_db(user=request.user, source_type=source_type)
+
   try:
   try:
     new_table_name = request.POST.get('new_table_name', None)
     new_table_name = request.POST.get('new_table_name', None)
     comment = request.POST.get('comment', None)
     comment = request.POST.get('comment', None)
@@ -346,8 +355,11 @@ def alter_table(request, database, table):
 @check_has_write_access_permission
 @check_has_write_access_permission
 @require_http_methods(["POST"])
 @require_http_methods(["POST"])
 def alter_column(request, database, table):
 def alter_column(request, database, table):
-  db = dbms.get(request.user)
   response = {'status': -1, 'message': ''}
   response = {'status': -1, 'message': ''}
+
+  source_type = request.POST.get('source_type', 'hive')
+  db = _get_db(user=request.user, source_type=source_type)
+
   try:
   try:
     column = request.POST.get('column', None)
     column = request.POST.get('column', None)
 
 
@@ -380,7 +392,8 @@ def alter_column(request, database, table):
 
 
 @check_has_write_access_permission
 @check_has_write_access_permission
 def drop_table(request, database):
 def drop_table(request, database):
-  db = dbms.get(request.user)
+  source_type = request.POST.get('source_type', 'hive')
+  db = _get_db(user=request.user, source_type=source_type)
 
 
   if request.method == 'POST':
   if request.method == 'POST':
     try:
     try:
@@ -393,7 +406,7 @@ def drop_table(request, database):
         sql = db.drop_tables(database, tables_objects, design=None, skip_trash=skip_trash, generate_ddl_only=True)
         sql = db.drop_tables(database, tables_objects, design=None, skip_trash=skip_trash, generate_ddl_only=True)
         job = make_notebook(
         job = make_notebook(
             name=_('Drop table %s') % ', '.join([table.name for table in tables_objects])[:100],
             name=_('Drop table %s') % ', '.join([table.name for table in tables_objects])[:100],
-            editor_type=_get_servername(db),
+            editor_type=source_type,
             statement=sql.strip(),
             statement=sql.strip(),
             status='ready',
             status='ready',
             database=database,
             database=database,
@@ -417,6 +430,7 @@ def drop_table(request, database):
     return render('confirm.mako', request, {'url': request.path, 'title': title})
     return render('confirm.mako', request, {'url': request.path, 'title': title})
 
 
 
 
+# Deprecated
 def read_table(request, database, table):
 def read_table(request, database, table):
   db = dbms.get(request.user)
   db = dbms.get(request.user)
 
 
@@ -432,10 +446,13 @@ def read_table(request, database, table):
 
 
 @check_has_write_access_permission
 @check_has_write_access_permission
 def load_table(request, database, table):
 def load_table(request, database, table):
-  db = dbms.get(request.user)
-  table = db.get_table(database, table)
   response = {'status': -1, 'data': 'None'}
   response = {'status': -1, 'data': 'None'}
 
 
+  source_type = request.POST.get('source_type', 'hive')
+  db = _get_db(user=request.user, source_type=source_type)
+
+  table = db.get_table(database, table)
+
   if request.method == "POST":
   if request.method == "POST":
     load_form = LoadDataForm(table, request.POST)
     load_form = LoadDataForm(table, request.POST)
 
 
@@ -443,7 +460,7 @@ def load_table(request, database, table):
       on_success_url = reverse('metastore:describe_table', kwargs={'database': database, 'table': table.name})
       on_success_url = reverse('metastore:describe_table', kwargs={'database': database, 'table': table.name})
       generate_ddl_only = request.POST.get('is_embeddable', 'false') == 'true'
       generate_ddl_only = request.POST.get('is_embeddable', 'false') == 'true'
       try:
       try:
-        design = SavedQuery.create_empty(app_name='beeswax', owner=request.user, data=hql_query('').dumps())
+        design = SavedQuery.create_empty(app_name=source_type if source_type != 'hive' else 'beeswax', owner=request.user, data=hql_query('').dumps())
         form_data = {
         form_data = {
           'path': load_form.cleaned_data['path'],
           'path': load_form.cleaned_data['path'],
           'overwrite': load_form.cleaned_data['overwrite'],
           'overwrite': load_form.cleaned_data['overwrite'],
@@ -454,7 +471,7 @@ def load_table(request, database, table):
           last_executed = json.loads(request.POST.get('start_time'), '-1')
           last_executed = json.loads(request.POST.get('start_time'), '-1')
           job = make_notebook(
           job = make_notebook(
             name=_('Load data in %s.%s') % (database, table.name),
             name=_('Load data in %s.%s') % (database, table.name),
-            editor_type=_get_servername(db),
+            editor_type=source_type,
             statement=query_history.strip(),
             statement=query_history.strip(),
             status='ready',
             status='ready',
             database=database,
             database=database,
@@ -585,6 +602,7 @@ def browse_partition(request, database, table, partition_spec):
     raise PopupException(_('Cannot browse partition'), detail=e.message)
     raise PopupException(_('Cannot browse partition'), detail=e.message)
 
 
 
 
+# Deprecated
 def read_partition(request, database, table, partition_spec):
 def read_partition(request, database, table, partition_spec):
   db = dbms.get(request.user)
   db = dbms.get(request.user)
   try:
   try:
@@ -599,7 +617,8 @@ def read_partition(request, database, table, partition_spec):
 @require_http_methods(["GET", "POST"])
 @require_http_methods(["GET", "POST"])
 @check_has_write_access_permission
 @check_has_write_access_permission
 def drop_partition(request, database, table):
 def drop_partition(request, database, table):
-  db = dbms.get(request.user)
+  source_type = request.POST.get('source_type', 'hive')
+  db = _get_db(user=request.user, source_type=source_type)
 
 
   if request.method == 'POST':
   if request.method == 'POST':
     partition_specs = request.POST.getlist('partition_selection')
     partition_specs = request.POST.getlist('partition_selection')
@@ -610,7 +629,7 @@ def drop_partition(request, database, table):
         sql = db.drop_partitions(database, table, partition_specs, design=None, generate_ddl_only=True)
         sql = db.drop_partitions(database, table, partition_specs, design=None, generate_ddl_only=True)
         job = make_notebook(
         job = make_notebook(
             name=_('Drop partition %s') % ', '.join(partition_specs)[:100],
             name=_('Drop partition %s') % ', '.join(partition_specs)[:100],
-            editor_type='hive',
+            editor_type=source_type,
             statement=sql.strip(),
             statement=sql.strip(),
             status='ready',
             status='ready',
             database=None,
             database=None,
@@ -638,9 +657,13 @@ def has_write_access(user):
   return user.is_superuser or user.has_hue_permission(action="write", app=DJANGO_APPS[0])
   return user.is_superuser or user.has_hue_permission(action="write", app=DJANGO_APPS[0])
 
 
 
 
-def _get_db(user):
-  default_sql_interpreter = ClusterConfig(user).get_config()['default_sql_interpreter']
-  query_server = get_query_server_config(name=default_sql_interpreter['type'] if default_sql_interpreter['type'] != 'hive' else 'beeswax')
+
+def _get_db(user, source_type=None):
+  if source_type is None:
+    default_sql_interpreter = ClusterConfig(user).get_config()['default_sql_interpreter']
+    source_type = default_sql_interpreter['type']
+
+  query_server = get_query_server_config(name=source_type if source_type != 'hive' else 'beeswax')
   return dbms.get(user, query_server)
   return dbms.get(user, query_server)