Просмотр исходного кода

HUE-3450 [metadata] Implement getPopularFilterValues API

Romain Rigaux 9 лет назад
Родитель
Сommit
d34ba96

+ 184 - 176
desktop/libs/metadata/src/metadata/optimizer_api.py

@@ -154,7 +154,6 @@ def query_complexity(request):
   return JsonResponse(response)
 
 
-# Mocked
 @require_POST
 @error_handler
 def popular_values(request):
@@ -163,182 +162,191 @@ def popular_values(request):
   table_name = request.POST.get('tableName')
   column_name = request.POST.get('columnName')
 
-  if column_name:
-    values = [
-        {
-          "values": [
-            "1",
-            "(6,0)"
-          ],
-          "columnName": "d_dow",
-          "tableName": "date_dim"
-        }
-    ]
-  else:
-    values = [
-        {
-          "values": [
-            "('2001q1','2001q2','2001q3')",
-            "'2001q1'"
-          ],
-          "columnName": "d_quarter_name",
-          "tableName": "date_dim"
-        },
-        {
-          "values": [
-            "1",
-            "2",
-            "4"
-          ],
-          "columnName": "d_qoy",
-          "tableName": "date_dim"
-        },
-        {
-          "values": [
-            "Subquery"
-          ],
-          "columnName": "d_week_seq",
-          "tableName": "date_dim"
-        },
-        {
-          "values": [
-            "(cast('1998-08-14' as date) + interval '30' day)",
-            "(cast ('1998-03-08' as date) + interval '30' day)",
-            "d1.d_date + 5",
-            "cast('1998-08-14' as date)",
-            "cast('1999-04-26' as date)",
-            "'2002-4-01'",
-            "(cast('2000-02-02' as date) + interval '90' day)",
-            "(cast('2002-4-01' as date) + interval '60' day)",
-            "(cast('2002-01-18' as date) + 60 + interval '60' day)",
-            "('1999-04-17','1999-10-04','1999-11-10')",
-            "(cast('1999-04-26' as date) + 30 + interval '30' day)",
-            "(cast('1999-06-03' as date) + interval '30' day)",
-            "cast('1998-01-06' as date)",
-            "(cast('2000-2-01' as date) + interval '60' day)",
-            "(cast('2002-04-01' as date) + interval '30' day)",
-            "( cast('2000-03-22' as date ) + interval '90' day )",
-            "cast('2001-08-21' as date)",
-            "(cast ('1998-03-08' as date) - interval '30' day)",
-            "'2000-03-22'",
-            "(cast('2001-08-21' as date) + interval '14' day)",
-            "( cast('1999-08-25' as date) + interval '30' day )",
-            "Subquery",
-            "'2000-3-01'",
-            "cast('2002-01-18' as date)",
-            "(cast ('2001-03-14' as date) - interval '30' day)",
-            "'2000-02-02'",
-            "cast('2002-04-01' as date)",
-            "'2002-03-09'",
-            "(cast('2000-3-01' as date) + interval '60' day)",
-            "cast('1999-06-03' as date)",
-            "cast('1999-08-25' as date)",
-            "(cast ('2001-03-14' as date) + interval '30' day)",
-            "'2000-2-01'",
-            "(cast('1998-01-06' as date) + interval '60' day)"
-          ],
-          "columnName": "d_date",
-          "tableName": "date_dim"
-        },
-        {
-          "values": [
-            "1223",
-            "1200",
-            "1202",
-            "1214+11",
-            "(select distinct date_dim.d_month_seq+1 from date_dim where date_dim.d_year = 2001 and date_dim.d_moy = 5)",
-            "1181+11",
-            "1199",
-            "1191",
-            "(1206,1206+1,1206+2,1206+3,1206+4,1206+5,1206+6,1206+7,1206+8,1206+9,1206+10,1206+11)",
-            "1211 + 11",
-            "1199 + 11",
-            "1212",
-            "(select distinct date_dim.d_month_seq+3 from date_dim where date_dim.d_year = 2001 and date_dim.d_moy = 5)",
-            "1211",
-            "1214",
-            "Subquery",
-            "(1195,1195+1,1195+2,1195+3,1195+4,1195+5,1195+6,1195+7,1195+8,1195+9,1195+10,1195+11)",
-            "1200+11",
-            "1212 + 11",
-            "1223+11",
-            "1183 + 11",
-            "1183",
-            "1181",
-            "1191 + 11",
-            "1202 + 11"
-          ],
-          "columnName": "d_month_seq",
-          "tableName": "date_dim"
-        },
-        {
-          "values": [
-            "11",
-            "4 + 3",
-            "12",
-            "3+2",
-            "2+3",
-            "1",
-            "3",
-            "2",
-            "5",
-            "4",
-            "6",
-            "8",
-            "10"
-          ],
-          "columnName": "d_moy",
-          "tableName": "date_dim"
-        },
-        {
-          "values": [
-            "25",
-            "16",
-            "28",
-            "1",
-            "3",
-            "2"
-          ],
-          "columnName": "d_dom",
-          "tableName": "date_dim"
-        },
-        {
-          "values": [
-            "(1998,1998+1)",
-            "2000 + 1",
-            "2000 + 2",
-            "(2000,2000+1,2000+2)",
-            "(1999,1999+1,1999+2)",
-            "2000-1",
-            "2001+1",
-            "1999 + 2",
-            "2000+1",
-            "2000+2",
-            "1999+1",
-            "(2002)",
-            "( 1999, 1999 + 1, 1999 + 2, 1999 + 3 )",
-            "1999-1",
-            "( 1998, 1998 + 1, 1998 + 2 )",
-            "1999",
-            "1998",
-            "(1998,1998+1,1998+2)",
-            "2002",
-            "2000",
-            "2001",
-            "2004"
-          ],
-          "columnName": "d_year",
-          "tableName": "date_dim"
-        },
-        {
-          "values": [
-            "1",
-            "(6,0)"
-          ],
-          "columnName": "d_dow",
-          "tableName": "date_dim"
-        }
+  if OPTIMIZER.MOCKING.get():
+    if column_name:
+      values = [
+          {
+            "values": [
+              "1",
+              "(6,0)"
+            ],
+            "columnName": "d_dow",
+            "tableName": "date_dim"
+          }
       ]
+    else:
+      values = [
+          {
+            "values": [
+              "('2001q1','2001q2','2001q3')",
+              "'2001q1'"
+            ],
+            "columnName": "d_quarter_name",
+            "tableName": "date_dim"
+          },
+          {
+            "values": [
+              "1",
+              "2",
+              "4"
+            ],
+            "columnName": "d_qoy",
+            "tableName": "date_dim"
+          },
+          {
+            "values": [
+              "Subquery"
+            ],
+            "columnName": "d_week_seq",
+            "tableName": "date_dim"
+          },
+          {
+            "values": [
+              "(cast('1998-08-14' as date) + interval '30' day)",
+              "(cast ('1998-03-08' as date) + interval '30' day)",
+              "d1.d_date + 5",
+              "cast('1998-08-14' as date)",
+              "cast('1999-04-26' as date)",
+              "'2002-4-01'",
+              "(cast('2000-02-02' as date) + interval '90' day)",
+              "(cast('2002-4-01' as date) + interval '60' day)",
+              "(cast('2002-01-18' as date) + 60 + interval '60' day)",
+              "('1999-04-17','1999-10-04','1999-11-10')",
+              "(cast('1999-04-26' as date) + 30 + interval '30' day)",
+              "(cast('1999-06-03' as date) + interval '30' day)",
+              "cast('1998-01-06' as date)",
+              "(cast('2000-2-01' as date) + interval '60' day)",
+              "(cast('2002-04-01' as date) + interval '30' day)",
+              "( cast('2000-03-22' as date ) + interval '90' day )",
+              "cast('2001-08-21' as date)",
+              "(cast ('1998-03-08' as date) - interval '30' day)",
+              "'2000-03-22'",
+              "(cast('2001-08-21' as date) + interval '14' day)",
+              "( cast('1999-08-25' as date) + interval '30' day )",
+              "Subquery",
+              "'2000-3-01'",
+              "cast('2002-01-18' as date)",
+              "(cast ('2001-03-14' as date) - interval '30' day)",
+              "'2000-02-02'",
+              "cast('2002-04-01' as date)",
+              "'2002-03-09'",
+              "(cast('2000-3-01' as date) + interval '60' day)",
+              "cast('1999-06-03' as date)",
+              "cast('1999-08-25' as date)",
+              "(cast ('2001-03-14' as date) + interval '30' day)",
+              "'2000-2-01'",
+              "(cast('1998-01-06' as date) + interval '60' day)"
+            ],
+            "columnName": "d_date",
+            "tableName": "date_dim"
+          },
+          {
+            "values": [
+              "1223",
+              "1200",
+              "1202",
+              "1214+11",
+              "(select distinct date_dim.d_month_seq+1 from date_dim where date_dim.d_year = 2001 and date_dim.d_moy = 5)",
+              "1181+11",
+              "1199",
+              "1191",
+              "(1206,1206+1,1206+2,1206+3,1206+4,1206+5,1206+6,1206+7,1206+8,1206+9,1206+10,1206+11)",
+              "1211 + 11",
+              "1199 + 11",
+              "1212",
+              "(select distinct date_dim.d_month_seq+3 from date_dim where date_dim.d_year = 2001 and date_dim.d_moy = 5)",
+              "1211",
+              "1214",
+              "Subquery",
+              "(1195,1195+1,1195+2,1195+3,1195+4,1195+5,1195+6,1195+7,1195+8,1195+9,1195+10,1195+11)",
+              "1200+11",
+              "1212 + 11",
+              "1223+11",
+              "1183 + 11",
+              "1183",
+              "1181",
+              "1191 + 11",
+              "1202 + 11"
+            ],
+            "columnName": "d_month_seq",
+            "tableName": "date_dim"
+          },
+          {
+            "values": [
+              "11",
+              "4 + 3",
+              "12",
+              "3+2",
+              "2+3",
+              "1",
+              "3",
+              "2",
+              "5",
+              "4",
+              "6",
+              "8",
+              "10"
+            ],
+            "columnName": "d_moy",
+            "tableName": "date_dim"
+          },
+          {
+            "values": [
+              "25",
+              "16",
+              "28",
+              "1",
+              "3",
+              "2"
+            ],
+            "columnName": "d_dom",
+            "tableName": "date_dim"
+          },
+          {
+            "values": [
+              "(1998,1998+1)",
+              "2000 + 1",
+              "2000 + 2",
+              "(2000,2000+1,2000+2)",
+              "(1999,1999+1,1999+2)",
+              "2000-1",
+              "2001+1",
+              "1999 + 2",
+              "2000+1",
+              "2000+2",
+              "1999+1",
+              "(2002)",
+              "( 1999, 1999 + 1, 1999 + 2, 1999 + 3 )",
+              "1999-1",
+              "( 1998, 1998 + 1, 1998 + 2 )",
+              "1999",
+              "1998",
+              "(1998,1998+1,1998+2)",
+              "2002",
+              "2000",
+              "2001",
+              "2004"
+            ],
+            "columnName": "d_year",
+            "tableName": "date_dim"
+          },
+          {
+            "values": [
+              "1",
+              "(6,0)"
+            ],
+            "columnName": "d_dow",
+            "tableName": "date_dim"
+          }
+        ]
+  else:
+    api = OptimizerApi()
+    data = api.popular_filter_values(table_name=table_name, column_name=column_name)
+
+    if data['status'] == 'success':
+      values = data['details']
+    else:
+      response['message'] = 'Optimizer: %s' % data['details']
 
   response['values'] = values
   response['status'] = 0

+ 18 - 0
desktop/libs/metadata/src/metadata/optimizer_client.py

@@ -191,6 +191,24 @@ class OptimizerApi(object):
       raise PopupException(e, title=_('Error while accessing Optimizer'))
 
 
+  def popular_filter_values(self, table_name, column_name=None, token=None, email=None):
+    if token is None:
+      token = self._authenticate()
+
+    try:
+      data = {
+          'email': email if email is not None else self._email,
+          'token': token,
+          'tableName': table_name
+      }
+      if column_name:
+        data['columnName'] = column_name
+      return self._root.post('/api/getPopularFilterValues', data=json.dumps(data), contenttype=_JSON_CONTENT_TYPE)
+    except RestException, e:
+      raise PopupException(e, title=_('Error while accessing Optimizer'))
+
+
+
 def OptimizerDataAdapter(queries):
   headers = ['SQL_ID', 'ELAPSED_TIME', 'SQL_FULLTEXT']
   if queries and len(queries[0]) == 3:

+ 10 - 0
desktop/libs/metadata/src/metadata/optimizer_tests.py

@@ -133,6 +133,16 @@ class TestOptimizerApi(object):
     assert_equal('success', resp['status'], resp)
 
 
+  def test_table_details(self):  # Requires test_upload to run before
+    resp = self.api.authenticate()
+    token = resp['token']
+
+    resp = self.api.popular_values(table_name='Part', token=token)
+    resp = self.api.popular_values(table_name='Part', column_name='partkey', token=token)
+
+    assert_equal('success', resp['status'], resp)
+
+
   def test_query_compatibility(self):
     source_platform = 'MySQL'
     target_platform = 'Hive'