Apache spark 如何使用Pyspark加载雪花表,数据帧的date列应反映为TIMESTAMP_LTZ格式

Apache spark 如何使用Pyspark加载雪花表,数据帧的date列应反映为TIMESTAMP_LTZ格式,apache-spark,pyspark,apache-spark-sql,snowflake-cloud-data-platform,azure-databricks,Apache Spark,Pyspark,Apache Spark Sql,Snowflake Cloud Data Platform,Azure Databricks,如果我想在snowflake表中写入数据帧,考虑到snowflake中已经不存在该表,并且在存储时,数据帧中的时间戳列应该在snowflake中反映为timestamp_LTZ格式 注意:我不想在snowflake中将时间戳数据格式更改为timestamp_LTZ,我希望一切都发生在我的spark代码本身中 编辑: 我看到的行为是雪花表的数据类型是TIMESTAMP\u NTZ 我看到的行为是雪花表的数据类型是TIMESTAMP\u NTZ 遵守行为遵循Snowflake中描述的默认行为: 默认

如果我想在snowflake表中写入数据帧,考虑到snowflake中已经不存在该表,并且在存储时,数据帧中的时间戳列应该在snowflake中反映为timestamp_LTZ格式

注意:我不想在snowflake中将时间戳数据格式更改为timestamp_LTZ,我希望一切都发生在我的spark代码本身中

编辑:

我看到的行为是雪花表的数据类型是TIMESTAMP\u NTZ

我看到的行为是雪花表的数据类型是TIMESTAMP\u NTZ

遵守行为遵循Snowflake中描述的默认行为:

默认的时间戳数据类型映射是timestamp_NTZ(无时区),因此必须显式设置timestamp_type_映射参数以使用timestamp_LTZ

如果在执行创建/插入操作之前,Spark连接器中的
时间戳
数据类型映射已明确指定为会话级参数(
时间戳(类型)映射
),则它将映射到
时间戳(LTZ)
基础类型,而不是
时间戳(NTZ

会话级别参数,无需永久更改帐户上的任何设置。只需将其添加为Spark代码中与Snowflake交互时传递的选项映射中的一个选项。下面是一个简单的例子:

sfOptions += ("TIMESTAMP_TYPE_MAPPING" -> "TIMESTAMP_LTZ")
// Pass this adjusted sfOptions to the .options(…) when writing the DataFrame

对于我来说,在雪花阅读操作之前添加以下内容可以解决问题:

java.util.TimeZone.setDefault(java.util.TimeZone.getTimeZone("UTC"))

@Harish J已经解释了原因,雪花文档中也提到了这一点。

您目前有哪些代码?你有什么问题吗?请注意,像
TIMESTAMP_LTZ
这样的数据类型没有格式,它们只是日期。如果愿意,您可以在演示时对其进行格式化。我只需将相应的数据帧写入具有时间戳(CST格式)的snowflake,但此时间戳格式被snowflake视为时间戳。我希望snowflake将其视为时间戳而不是时间戳。我想知道,我们如何在不接触雪花的情况下,从我们的火花代码本身实现这一点。注意:我存储到snowflake的数据框不存在,我使用spark本身创建了它。它有助于在原始问题中包含所有信息-即解释您实际看到的行为。我编辑了您的问题以添加此内容,但请添加其他信息,如样本数据。这个页面有用吗?