def test_union_wildcard_one_table(self): mock_kusto_client = MockKustoClient( tables_response=mock_tables_response([ ('test_table_1', [('foo', _KustoType.STRING), ('bar', _KustoType.INT)]), ('other_table_2', [('baz', _KustoType.BOOL)]) ]), record_metadata=True, ) db = PyKustoClient(mock_kusto_client, fetch_by_default=False)['test_db'] db.blocking_refresh() self.assertEqual( [ RecordedQuery( 'test_db', '.show database schema | project TableName, ColumnName, ColumnType | limit 10000' ) ], mock_kusto_client.recorded_queries, ) table = db.get_table('test_table_*') self.assertEqual(type(table.foo), _StringColumn) self.assertEqual(type(table.bar), _NumberColumn) self.assertEqual(type(table['baz']), _AnyTypeColumn)
def test_column_fetch(self): mock_kusto_client = MockKustoClient( columns_response=mock_columns_response([('foo', _KustoType.STRING), ('bar', _KustoType.INT)]), record_metadata=True, ) table = PyKustoClient(mock_kusto_client, fetch_by_default=False)['test_db']['mock_table'] table.blocking_refresh() # Fetch query self.assertEqual( [ RecordedQuery( 'test_db', '.show table mock_table | project AttributeName, AttributeType | limit 10000' ) ], mock_kusto_client.recorded_queries, ) # Dot notation self.assertEqual(type(table.foo), _StringColumn) self.assertEqual(type(table.bar), _NumberColumn) # Bracket notation self.assertEqual(type(table['foo']), _StringColumn) self.assertEqual(type(table['bar']), _NumberColumn) self.assertEqual(type(table['baz']), _AnyTypeColumn)
def test_table_fetch(self): mock_kusto_client = MockKustoClient( tables_response=mock_tables_response([ ('mock_table', [('foo', _KustoType.STRING), ('bar', _KustoType.INT)]) ]), record_metadata=True, ) db = PyKustoClient(mock_kusto_client, fetch_by_default=False)['test_db'] db.blocking_refresh() self.assertEqual( [ RecordedQuery( 'test_db', '.show database schema | project TableName, ColumnName, ColumnType | limit 10000' ) ], mock_kusto_client.recorded_queries, ) table = db.mock_table # Table columns self.assertEqual(type(table.foo), _StringColumn) self.assertEqual(type(table.bar), _NumberColumn) self.assertEqual(type(table['baz']), _AnyTypeColumn) # Bracket notation self.assertEqual(type(db['other_table']['foo']), _AnyTypeColumn) # Dot notation error self.assertRaises( AttributeError( "PyKustoClient(test_cluster.kusto.windows.net).Database(test_db) has no attribute 'test_table_1'" ), lambda: db.test_table_1)
def test_union_column_name_conflict(self): mock_client = MockKustoClient( tables_response=mock_tables_response([ ('test_table_1', [('foo', _KustoType.STRING), ('bar', _KustoType.INT)]), ('test_table_2', [('foo', _KustoType.BOOL)]) ]), getschema_response=mock_getschema_response([ ('foo_string', _KustoType.STRING), ('bar', _KustoType.INT), ('foo_bool', _KustoType.BOOL) ]), record_metadata=True, ) db = PyKustoClient(mock_client, fetch_by_default=False)['test_db'] db.blocking_refresh() table = db.get_table('test_table_*') table.blocking_refresh() # To trigger name conflict resolution self.assertEqual( [ # First trying the usual fetch RecordedQuery('test_db', '.show database schema | project TableName, ColumnName, ColumnType | limit 10000'), # Fallback for name conflict resolution RecordedQuery('test_db', 'union test_table_* | getschema | project ColumnName, DataType | limit 10000') ], mock_client.recorded_queries, ) self.assertType(table.foo_string, _StringColumn) self.assertType(table.bar, _NumberColumn) self.assertType(table.foo_bool, _BooleanColumn)
def test_union_wildcard_one_table(self): mock_client = MockKustoClient(record_metadata=True) db = PyKustoClient(mock_client, fetch_by_default=False)['test_db'] db.blocking_refresh() self.assertEqual( [RecordedQuery('test_db', '.show database schema | project TableName, ColumnName, ColumnType | limit 10000')], mock_client.recorded_queries, ) table = db.get_table('mock_table_*') self.assertType(table.foo, _AnyTypeColumn) self.assertType(table.bar, _AnyTypeColumn) self.assertType(table['baz'], _BooleanColumn)
def test_two_tables_fetch(self): mock_client = MockKustoClient(record_metadata=True) db = PyKustoClient(mock_client, fetch_by_default=False)['test_db'] db.blocking_refresh() self.assertEqual( [RecordedQuery('test_db', '.show database schema | project TableName, ColumnName, ColumnType | limit 10000')], mock_client.recorded_queries, ) # Table columns self.assertType(db.mock_table.foo, _StringColumn) self.assertType(db.mock_table.bar, _NumberColumn) self.assertType(db.mock_table_2['baz'], _BooleanColumn) self.assertType(db['other_table']['foo'], _AnyTypeColumn) # Union table = db.get_table('mock_table', 'mock_table_2') self.assertType(table.foo, _StringColumn) self.assertType(table.bar, _NumberColumn) self.assertType(table.baz, _BooleanColumn) # Wildcard table = db.get_table('mock_*') self.assertType(table.foo, _StringColumn) self.assertType(table.bar, _NumberColumn) self.assertType(table.baz, _BooleanColumn)