diff --git a/pykusto/item_fetcher.py b/pykusto/item_fetcher.py
index 406f8eb..6b3620a 100644
--- a/pykusto/item_fetcher.py
+++ b/pykusto/item_fetcher.py
@@ -92,7 +92,7 @@ class ItemFetcher(metaclass=ABCMeta):
         return fallback()
 
     def __dir__(self) -> Iterable[str]:
-        return sorted(chain(super().__dir__(), tuple() if self.__items is None else self.__items.keys()))
+        return sorted(chain(super().__dir__(), tuple() if self.__items is None else filter(lambda name: '.' not in name, self.__items.keys())))
 
     def refresh(self) -> None:
         """

Do not autocomplete to columns which contain a dot in their name
diff --git a/test/test_client_fetch.py b/test/test_client_fetch.py
index 76f9d2a..1b45a23 100644
--- a/test/test_client_fetch.py
+++ b/test/test_client_fetch.py
@@ -22,12 +22,12 @@ class TestClientFetch(TestBase):
             mock_kusto_client.recorded_queries,
         )
         # Dot notation
-        self.assertIsInstance(table.foo, StringColumn)
-        self.assertIsInstance(table.bar, NumberColumn)
+        self.assertEqual(type(table.foo), StringColumn)
+        self.assertEqual(type(table.bar), NumberColumn)
         # Bracket notation
-        self.assertIsInstance(table['foo'], StringColumn)
-        self.assertIsInstance(table['bar'], NumberColumn)
-        self.assertIsInstance(table['baz'], AnyTypeColumn)
+        self.assertEqual(type(table['foo']), StringColumn)
+        self.assertEqual(type(table['bar']), NumberColumn)
+        self.assertEqual(type(table['baz']), AnyTypeColumn)
 
     def test_column_fetch_slow(self):
         mock_response_future = Future()
@@ -42,9 +42,9 @@ class TestClientFetch(TestBase):
             mock_kusto_client = MockKustoClient(upon_execute=upon_execute, record_metadata=True)
             table = PyKustoClient(mock_kusto_client, fetch_by_default=False)['test_db']['test_table']
             table.refresh()
-            self.assertIsInstance(table['foo'], AnyTypeColumn)
-            self.assertIsInstance(table['bar'], AnyTypeColumn)
-            self.assertIsInstance(table['baz'], AnyTypeColumn)
+            self.assertEqual(type(table['foo']), AnyTypeColumn)
+            self.assertEqual(type(table['bar']), AnyTypeColumn)
+            self.assertEqual(type(table['baz']), AnyTypeColumn)
             # Make sure above lines were called while the fetch query was still waiting
             assert not mock_response_future.executed
         finally:
@@ -109,11 +109,11 @@ class TestClientFetch(TestBase):
         )
         table = db.test_table
         # Table columns
-        self.assertIsInstance(table.foo, StringColumn)
-        self.assertIsInstance(table.bar, NumberColumn)
-        self.assertIsInstance(table['baz'], AnyTypeColumn)
+        self.assertEqual(type(table.foo), StringColumn)
+        self.assertEqual(type(table.bar), NumberColumn)
+        self.assertEqual(type(table['baz']), AnyTypeColumn)
         # Bracket notation
-        self.assertIsInstance(db['other_table']['foo'], AnyTypeColumn)
+        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'"),
@@ -135,20 +135,20 @@ class TestClientFetch(TestBase):
             mock_kusto_client.recorded_queries,
         )
         # Table columns
-        self.assertIsInstance(db.test_table_1.foo, StringColumn)
-        self.assertIsInstance(db.test_table_1.bar, NumberColumn)
-        self.assertIsInstance(db.test_table_2['baz'], BooleanColumn)
-        self.assertIsInstance(db['other_table']['foo'], AnyTypeColumn)
+        self.assertEqual(type(db.test_table_1.foo), StringColumn)
+        self.assertEqual(type(db.test_table_1.bar), NumberColumn)
+        self.assertEqual(type(db.test_table_2['baz']), BooleanColumn)
+        self.assertEqual(type(db['other_table']['foo']), AnyTypeColumn)
         # Union
         table = db.get_table('test_table_1', 'test_table_2')
-        self.assertIsInstance(table.foo, StringColumn)
-        self.assertIsInstance(table.bar, NumberColumn)
-        self.assertIsInstance(table.baz, BooleanColumn)
+        self.assertEqual(type(table.foo), StringColumn)
+        self.assertEqual(type(table.bar), NumberColumn)
+        self.assertEqual(type(table.baz), BooleanColumn)
         # Wildcard
         table = db.get_table('test_table_*')
-        self.assertIsInstance(table.foo, StringColumn)
-        self.assertIsInstance(table.bar, NumberColumn)
-        self.assertIsInstance(table.baz, BooleanColumn)
+        self.assertEqual(type(table.foo), StringColumn)
+        self.assertEqual(type(table.bar), NumberColumn)
+        self.assertEqual(type(table.baz), BooleanColumn)
 
     def test_union_column_name_conflict(self):
         mock_kusto_client = MockKustoClient(
@@ -174,9 +174,9 @@ class TestClientFetch(TestBase):
             ],
             mock_kusto_client.recorded_queries,
         )
-        self.assertIsInstance(table.foo_string, StringColumn)
-        self.assertIsInstance(table.bar, NumberColumn)
-        self.assertIsInstance(table.foo_bool, BooleanColumn)
+        self.assertEqual(type(table.foo_string), StringColumn)
+        self.assertEqual(type(table.bar), NumberColumn)
+        self.assertEqual(type(table.foo_bool), BooleanColumn)
 
     def test_union_wildcard_one_table(self):
         mock_kusto_client = MockKustoClient(
@@ -193,9 +193,9 @@ class TestClientFetch(TestBase):
             mock_kusto_client.recorded_queries,
         )
         table = db.get_table('test_table_*')
-        self.assertIsInstance(table.foo, StringColumn)
-        self.assertIsInstance(table.bar, NumberColumn)
-        self.assertIsInstance(table['baz'], AnyTypeColumn)
+        self.assertEqual(type(table.foo), StringColumn)
+        self.assertEqual(type(table.bar), NumberColumn)
+        self.assertEqual(type(table['baz']), AnyTypeColumn)
 
     def test_database_fetch(self):
         mock_kusto_client = MockKustoClient(
@@ -210,13 +210,13 @@ class TestClientFetch(TestBase):
         )
         # Table columns
         table = client.test_db.test_table
-        self.assertIsInstance(table.foo, StringColumn)
-        self.assertIsInstance(table.bar, NumberColumn)
-        self.assertIsInstance(table['baz'], AnyTypeColumn)
-        self.assertIsInstance(client.test_db['other_table']['foo'], AnyTypeColumn)
+        self.assertEqual(type(table.foo), StringColumn)
+        self.assertEqual(type(table.bar), NumberColumn)
+        self.assertEqual(type(table['baz']), AnyTypeColumn)
+        self.assertEqual(type(client.test_db['other_table']['foo']), AnyTypeColumn)
         # Various utility methods
         db = client.get_database('test_db')
-        self.assertIsInstance(db, Database)
+        self.assertEqual(type(db), Database)
         self.assertEqual('test_db', db.get_name())
         self.assertEqual(('test_db',), tuple(client.get_databases_names()))
         self.assertEqual(('test_table', 'other_table'), tuple(client.test_db.get_table_names()))
@@ -224,6 +224,22 @@ class TestClientFetch(TestBase):
         self.assertTrue({'foo', 'bar'} < set(dir(client.test_db.test_table)))
         self.assertEqual('PyKustoClient(test_cluster.kusto.windows.net).Database(test_db).Table(test_table)', repr(client.test_db.test_table))
 
+    def test_autocomplete_with_dot(self):
+        mock_kusto_client = MockKustoClient(
+            databases_response=mock_databases_response([('test_db', [('test_table', [('foo', KustoType.STRING), ('bar.baz', KustoType.INT)])])]),
+            record_metadata=True,
+        )
+        client = PyKustoClient(mock_kusto_client)
+        client.wait_for_items()
+        # Table columns
+        table = client.test_db.test_table
+        self.assertEqual(type(table.foo), StringColumn)
+        self.assertEqual(type(table.bar), AnyTypeColumn)
+        self.assertEqual(type(table['bar.baz']), NumberColumn)
+        autocomplete_list = set(dir(client.test_db.test_table))
+        self.assertIn('foo', autocomplete_list)
+        self.assertNotIn('bar.baz', autocomplete_list)
+
     def test_empty_database(self):
         mock_kusto_client = MockKustoClient(
             databases_response=mock_databases_response([
@@ -238,7 +254,7 @@ class TestClientFetch(TestBase):
             [RecordedQuery('', '.show databases schema | project DatabaseName, TableName, ColumnName, ColumnType | limit 100000')],
             mock_kusto_client.recorded_queries,
         )
-        self.assertIsInstance(client.test_db.test_table.foo, StringColumn)
+        self.assertEqual(type(client.test_db.test_table.foo), StringColumn)
 
     def test_client_not_fetched(self):
         client = PyKustoClient(MockKustoClient(), fetch_by_default=False)

pip install -e .
parse_log_pytest
pytest
pytest
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
adal==1.2.7
attrs @ file:///croot/attrs_1668696182826/work
azure-core==1.30.1
azure-kusto-data==0.0.44
certifi @ file:///croot/certifi_1671487769961/work/certifi
cffi==1.15.1
charset-normalizer==3.4.1
cryptography==44.0.2
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
idna==3.10
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
isodate==0.7.2
msrest==0.7.1
msrestazure==0.6.4.post1
numpy==1.21.6
oauthlib==3.2.2
packaging @ file:///croot/packaging_1671697413597/work
pandas==1.0.3
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pycparser==2.21
PyJWT==2.8.0
-e git+https://github.com/Azure/pykusto.git@0930c481041f5165e870094d2716d9ebeb671c41#egg=pykusto
pytest==7.1.2
python-dateutil==2.9.0.post0
pytz==2025.2
requests==2.31.0
requests-oauthlib==2.0.0
six==1.17.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions==4.7.1
urllib3==2.0.7
zipp @ file:///croot/zipp_1672387121353/work

name: pykusto
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - adal==1.2.7
      - azure-core==1.30.1
      - azure-kusto-data==0.0.44
      - cffi==1.15.1
      - charset-normalizer==3.4.1
      - cryptography==44.0.2
      - idna==3.10
      - isodate==0.7.2
      - msrest==0.7.1
      - msrestazure==0.6.4.post1
      - numpy==1.21.6
      - oauthlib==3.2.2
      - pandas==1.0.3
      - pycparser==2.21
      - pyjwt==2.8.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - requests==2.31.0
      - requests-oauthlib==2.0.0
      - six==1.17.0
      - typing-extensions==4.7.1
      - urllib3==2.0.7
prefix: /opt/conda/envs/pykusto

test/test_client_fetch.py::TestClientFetch::test_autocomplete_with_dot test/test_client_fetch.py::TestClientFetch::test_query_before_fetch_returned
test/test_client_fetch.py::TestClientFetch::test_client_not_fetched test/test_client_fetch.py::TestClientFetch::test_column_fetch test/test_client_fetch.py::TestClientFetch::test_column_fetch_slow test/test_client_fetch.py::TestClientFetch::test_database_fetch test/test_client_fetch.py::TestClientFetch::test_empty_database test/test_client_fetch.py::TestClientFetch::test_table_fetch test/test_client_fetch.py::TestClientFetch::test_two_tables_fetch test/test_client_fetch.py::TestClientFetch::test_union_column_name_conflict test/test_client_fetch.py::TestClientFetch::test_union_wildcard_one_table
pykusto/item_fetcher.py
pykusto/item_fetcher.py