ソースを参照

HUE-8816 [catalog] Support parsing columns with varchar type

Romain 6 年 前
コミット
c02f50d41b

+ 8 - 2
apps/metastore/src/metastore/parser.py

@@ -24,6 +24,7 @@ import re
 SIMPLE_SCALAR = '[a-z]+'
 DECIMAL_SCALAR = 'decimal\(\d+,\d+\)'
 DOUBLE_SCALAR = 'double\(\d+,\d+\)'
+VARCHAR_SCALAR = 'varchar\(\d+\)'
 
 
 def parse_column(name, type_string, comment=None):
@@ -38,6 +39,7 @@ def parse_column(name, type_string, comment=None):
   }
   simple_type, inner = _parse_type(type_string)
   column['type'] = simple_type
+
   if inner:
     column.update(_parse_complex(simple_type, inner))
   return column
@@ -48,10 +50,14 @@ def is_scalar_type(type_string):
 
 
 def _parse_type(type_string):
-  pattern = re.compile('^(%(simple)s|%(decimal)s|%(double)s)(<(.+)>)?$' % {
+  pattern = re.compile('^(%(simple)s|%(decimal)s|%(double)s|%(varchar)s)(<(.+)>)?$' % {
     'simple': SIMPLE_SCALAR,
     'decimal': DECIMAL_SCALAR,
-    'double': DOUBLE_SCALAR}, re.IGNORECASE)
+    'double': DOUBLE_SCALAR,
+    'varchar': VARCHAR_SCALAR,
+    },
+    re.IGNORECASE
+  )
   match = re.search(pattern, type_string)
   return match.group(1), match.group(3)
 

+ 9 - 0
apps/metastore/src/metastore/tests.py

@@ -470,6 +470,15 @@ class TestParser(object):
     assert_equal(parse_tree, column)
 
 
+  def test_parse_varchar(self):
+    name = 'varchar'
+    type = 'varchar(1000)'
+    comment = 'test_parse_varchar'
+    column = {'name': name, 'type': type, 'comment': comment}
+    parse_tree = parser.parse_column(name, type, comment)
+    assert_equal(parse_tree, column)
+
+
   def test_parse_decimal(self):
     name = 'simple'
     type = 'decimal(12,2)'