Skip to content

Commit 75b3743

Browse files
authored
[hiveserver2] Skip describing columns for views in Hive and Impala (#4045)
1 parent 1458186 commit 75b3743

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -928,6 +928,14 @@ def _get_impala_profile_plan(self, query_id, profile):
928928

929929
def describe_column(self, notebook, snippet, database=None, table=None, column=None):
930930
db = self._get_db(snippet, interpreter=self.interpreter)
931+
tb = db.get_table(database, table)
932+
933+
# Column stats are not available for views in both Hive and Impala
934+
if tb.is_view:
935+
msg = f'Cannot describe column for view: {table}'
936+
LOG.debug(msg)
937+
return {'message': msg}
938+
931939
return db.get_table_columns_stats(database, table, column)
932940

933941
def describe_table(self, notebook, snippet, database=None, table=None):

desktop/libs/notebook/src/notebook/connectors/hiveserver2_tests.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,30 @@ def test_autocomplete_functions_hive(self):
428428
data['functions'] ==
429429
[{'name': 'f1'}, {'name': 'f2'}, {'name': 'f3'}])
430430

431+
def test_describe_column_view(self):
432+
mock_get_db = Mock(get_table=Mock(return_value=Mock(is_view=True)), get_table_columns_stats=Mock())
433+
with patch('notebook.connectors.hiveserver2.HS2Api._get_db', return_value=mock_get_db) as _get_db:
434+
with patch('notebook.connectors.hiveserver2.LOG') as LOG:
435+
api = HS2Api(self.user)
436+
437+
result = api.describe_column({}, {}, 'test_db', 'test_view', 'test_col')
438+
439+
LOG.debug.assert_called_with('Cannot describe column for view: test_view')
440+
assert result['message'] == 'Cannot describe column for view: test_view'
441+
_get_db.get_table_columns_stats.assert_not_called()
442+
443+
def test_describe_column_table(self):
444+
mock_get_db = Mock(
445+
get_table=Mock(return_value=Mock(is_view=False)),
446+
get_table_columns_stats=Mock(return_value=[{'test_field1': 'value1', 'test_field2': 'value2'}]),
447+
)
448+
with patch('notebook.connectors.hiveserver2.HS2Api._get_db', return_value=mock_get_db) as _get_db:
449+
api = HS2Api(self.user)
450+
451+
result = api.describe_column({}, {}, 'test_db', 'test_table', 'test_col')
452+
453+
assert result == [{'test_field1': 'value1', 'test_field2': 'value2'}]
454+
431455

432456
@pytest.mark.django_db
433457
class TestHiveserver2ApiNonMock(object):

0 commit comments

Comments
 (0)