|
19 | 19 | pytestmark = [pytest.mark.engine, pytest.mark.snowflake] |
20 | 20 |
|
21 | 21 |
|
| 22 | +@pytest.fixture |
| 23 | +def snowflake_mocked_engine_adapter( |
| 24 | + make_mocked_engine_adapter: t.Callable, |
| 25 | +) -> SnowflakeEngineAdapter: |
| 26 | + return make_mocked_engine_adapter(SnowflakeEngineAdapter) |
| 27 | + |
| 28 | + |
22 | 29 | def test_get_temp_table(mocker: MockerFixture, make_mocked_engine_adapter: t.Callable): |
23 | 30 | adapter = make_mocked_engine_adapter(SnowflakeEngineAdapter) |
24 | 31 |
|
@@ -270,11 +277,25 @@ def test_create_managed_table(make_mocked_engine_adapter: t.Callable, mocker: Mo |
270 | 277 | }, |
271 | 278 | ) |
272 | 279 |
|
| 280 | + # table_format=iceberg |
| 281 | + adapter.create_managed_table( |
| 282 | + table_name="test_table", |
| 283 | + query=query, |
| 284 | + columns_to_types=columns_to_types, |
| 285 | + table_properties={ |
| 286 | + "target_lag": exp.Literal.string("20 minutes"), |
| 287 | + "catalog": exp.Literal.string("snowflake"), |
| 288 | + "external_volume": exp.Literal.string("test"), |
| 289 | + }, |
| 290 | + table_format="iceberg", |
| 291 | + ) |
| 292 | + |
273 | 293 | assert to_sql_calls(adapter) == [ |
274 | 294 | """CREATE OR REPLACE DYNAMIC TABLE "test_table" TARGET_LAG='20 minutes' WAREHOUSE="default_warehouse" AS SELECT CAST("a" AS INT) AS "a", CAST("b" AS INT) AS "b" FROM (SELECT "a", "b" FROM "source_table") AS "_subquery\"""", |
275 | 295 | """CREATE OR REPLACE DYNAMIC TABLE "test_table" TARGET_LAG='20 minutes' WAREHOUSE="foo" AS SELECT CAST("a" AS INT) AS "a", CAST("b" AS INT) AS "b" FROM (SELECT "a", "b" FROM "source_table") AS "_subquery\"""", |
276 | 296 | """CREATE OR REPLACE DYNAMIC TABLE "test_table" CLUSTER BY ("a") TARGET_LAG='20 minutes' WAREHOUSE="default_warehouse" AS SELECT CAST("a" AS INT) AS "a", CAST("b" AS INT) AS "b" FROM (SELECT "a", "b" FROM "source_table") AS "_subquery\"""", |
277 | 297 | """CREATE OR REPLACE DYNAMIC TABLE "test_table" TARGET_LAG='20 minutes' REFRESH_MODE='auto' INITIALIZE='on_create' WAREHOUSE="default_warehouse" AS SELECT CAST("a" AS INT) AS "a", CAST("b" AS INT) AS "b" FROM (SELECT "a", "b" FROM "source_table") AS "_subquery\"""", |
| 298 | + """CREATE OR REPLACE DYNAMIC ICEBERG TABLE "test_table" TARGET_LAG='20 minutes' CATALOG='snowflake' EXTERNAL_VOLUME='test' WAREHOUSE="default_warehouse" AS SELECT CAST("a" AS INT) AS "a", CAST("b" AS INT) AS "b" FROM (SELECT "a", "b" FROM "source_table") AS "_subquery\"""", |
278 | 299 | ] |
279 | 300 |
|
280 | 301 |
|
@@ -666,3 +687,44 @@ def test_clone_table(mocker: MockerFixture, make_mocked_engine_adapter: t.Callab |
666 | 687 | adapter.cursor.execute.assert_called_once_with( |
667 | 688 | 'CREATE TABLE "target_table" CLONE "source_table"' |
668 | 689 | ) |
| 690 | + |
| 691 | + |
| 692 | +def test_table_format_iceberg(snowflake_mocked_engine_adapter: SnowflakeEngineAdapter) -> None: |
| 693 | + adapter = snowflake_mocked_engine_adapter |
| 694 | + |
| 695 | + model = load_sql_based_model( |
| 696 | + expressions=d.parse(""" |
| 697 | + MODEL ( |
| 698 | + name test.table, |
| 699 | + kind full, |
| 700 | + table_format iceberg, |
| 701 | + physical_properties ( |
| 702 | + catalog = 'snowflake', |
| 703 | + external_volume = 'test' |
| 704 | + ) |
| 705 | + ); |
| 706 | + SELECT a::INT; |
| 707 | + """) |
| 708 | + ) |
| 709 | + assert isinstance(model, SqlModel) |
| 710 | + assert model.table_format == "iceberg" |
| 711 | + |
| 712 | + adapter.create_table( |
| 713 | + table_name=model.name, |
| 714 | + columns_to_types=model.columns_to_types_or_raise, |
| 715 | + table_format=model.table_format, |
| 716 | + table_properties=model.physical_properties, |
| 717 | + ) |
| 718 | + |
| 719 | + adapter.ctas( |
| 720 | + table_name=model.name, |
| 721 | + query_or_df=model.render_query_or_raise(), |
| 722 | + columns_to_types=model.columns_to_types_or_raise, |
| 723 | + table_format=model.table_format, |
| 724 | + table_properties=model.physical_properties, |
| 725 | + ) |
| 726 | + |
| 727 | + assert to_sql_calls(adapter) == [ |
| 728 | + 'CREATE ICEBERG TABLE IF NOT EXISTS "test"."table" ("a" INT) CATALOG=\'snowflake\' EXTERNAL_VOLUME=\'test\'', |
| 729 | + 'CREATE ICEBERG TABLE IF NOT EXISTS "test"."table" CATALOG=\'snowflake\' EXTERNAL_VOLUME=\'test\' AS SELECT CAST("a" AS INT) AS "a" FROM (SELECT CAST("a" AS INT) AS "a") AS "_subquery"', |
| 730 | + ] |
0 commit comments