Загрузка Snowflake из Databricks меняет структуру таблицы - PullRequest
0 голосов
/ 17 января 2020

Я делаю кое-какое ПО C, чтобы загрузить таблицу Snowflake из кадра данных в Databricks. Я успешно загрузил таблицу, однако она меняет ее структуру.

Например, в Snowflake я создал эту таблицу:

CREATE OR REPLACE TABLE FNT_DAYS
(
    FNT_DT_PK TIMESTAMP_NTZ NOT NULL,
    OPEN_DT_FLG VARCHAR(1),
    HOLIDAY_DT_FLG VARCHAR(1),
    LOAD_USR VARCHAR(10)
);

ALTER TABLE FNT_DAYS ADD CONSTRAINT FNT_DAYS_PK PRIMARY KEY (FNT_DT_PK);

При запуске моего кода в Databricks unsing Python, таблица успешно загружена, однако структура таблицы изменяется следующим образом:

CREATE OR REPLACE TABLE FNT_DAYS
    (
        FNT_DT_PK TIMESTAMP_NTZ,
        OPEN_DT_FLG VARCHAR(16777216),
        HOLIDAY_DT_FLG VARCHAR(16777216),
        LOAD_USR VARCHAR(10)
    );

Обратите внимание, что ограничение первичного ключа исчезло, поле FNT_DT_PK больше не равно NOT NULL и, наконец, каждое отдельное поле VARCHAR длина типа данных изменена на 16777216.

Мой python код в Databricks очень прост:

%python

options = dict(sfUrl="mysnflk.snowflakecomputing.com",
               sfUser="me",
               sfPassword="******",
               sfDatabase="SNF_DB",
               sfSchema="PUBLIC",
               sfWarehouse="SNF_WH")

df = spark.sql("select * from exc.test")

df.write \
  .format("snowflake") \
  .mode("overwrite") \
  .options(**options) \
  .option("dbtable", "FNT_DAYS") \
  .save()

У вас есть представление о том, почему структура таблицы изменяется в Snowflake?

1 Ответ

0 голосов
/ 17 января 2020

Если вы посмотрите на query_history в Snowflake, видите ли вы, что таблица воссоздается командой df.write? Похоже, что он воссоздает таблицу и использует типы данных в фрейме данных для определения вашей новой таблицы. Я не знаю точно, что является причиной этого, но я вижу, что пример Snowflake (https://docs.snowflake.net/manuals/user-guide/spark-connector-use.html#id1) имеет немного другой синтаксис в вашем режиме.

Я должен также отметить, что Длина этих полей не повредит вам в Снежинке. Длина не влияет на объем памяти или производительность, и эти длины означают, что соединитель буквально использует VARCHAR в качестве типа данных без указания длины. Кроме того, ограничения на PK не применяются, поэтому не уверен, насколько это важно для вас. Единственное, о чем я буду беспокоиться, это ваш NOT NULL, который Снежинка навязывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...