我正在做一些POC来从Databrics中的dataframe中加载雪花表。我已经成功地加载了表,但是它改变了表的结构。
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);
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。
我在Databricks中的python代码非常简单:
%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中的query_history,是否看到df.write命令正在重新创建表?它似乎是在重新创建表,并使用dataframe的DataType来定义新表。我不知道到底是什么原因造成的,但我确实看到雪花示例(https://docs.Snowflake.net/manuals/user-guide/spark-connector-use.html#id1)在您的模式下有一些稍微不同的语法。
我还应该注意到那些varchar场的长度不会在雪花中以任何方式伤害你。长度不影响存储或性能,这些长度意味着连接器实际上只是使用VARCHAR作为数据类型,而没有指定长度。此外,对PK的约束没有强制执行,所以不确定这对你有多重要。我唯一关心的是你的不是空的,雪花确实强制执行。
我无法从亚马逊S3桶加载雪花中的外部表。外部表创建成功,但在运行select命令时,不会返回任何内容。奇怪的是COPY into命令对雪花中的同一个表起作用。 谢谢,纳维德
我使用的是spark 2.4.7和spark-snowflake 2.8.4,以及snowflake jdbc 3.12.17。我在Mac OS X Big Sur上。这发生在我升级到大苏尔之后,尽管我不确定这是否有关系。 我试过: 将bouncy castle提供程序作为包依赖项添加到我的配置中 检查是否指向Java 8(它确实指向) 重新安装java 8(使用homebrew和adoptope
我试图使用以下代码将数据加载到雪花,但得到一个错误。 tmp是从Snowflake下载的,该表使用RStudio:
如何使用雪花存储过程将current_date()bind变量插入到表中 创建或替换过程abc(“p_message_id”浮点数、“p_theater”字符串、“p_month”字符串、“p_message”字符串、“p_message”字符串、“p_start_date”字符串、“p_end_date”字符串、“p_action”字符串、“p_msg_type”字符串、“p_logged_us
我如何一次加载5年的拼花数据并复制到一个表中?因为1个月的负荷比我1.5个小时,5年就要花我90个小时。如果有可能并行加载?我该怎么做呢? 谢谢