繁体   English   中英

如何使用镶木地板文件中的 python 将数据写入雪花

[英]How to write data to snowflake with python from parquet file

我正在尝试从本地存储在文件夹data/中的镶木地板文件中写入数据。 供您参考,这些文件来自 Delta Lake。

# files_list contains this ['part-00000-c8fc3190-8a49-49c5-a000-b3f885e3a053-c000.snappy.parquet', 'part-00001-cb8e2d2a-0449-406c-8d6f-3ec1249c3c36-c000.snappy.parquet']

createStmt = f"""
CREATE OR REPLACE TABLE {TABLE_NAME} (
    id int,
    firstName string,
    middleName string,
    lastName string,
    gender string,
    birthDate timestamp,
    ssn string,
    salary int
);
"""
cs.execute(createStmt)

createFileFormat = f"""
CREATE OR REPLACE FILE FORMAT sf_delta_parquet_format
  type=PARQUET COMPRESSION=SNAPPY;
"""
cs.execute(createFileFormat)

createStage = f"""
CREATE OR REPLACE STAGE sf_delta_stage
  FILE_FORMAT = sf_delta_parquet_format;
"""
cs.execute(createStage)

for file in files_list:
    uploadStmt = f'put file://{FOLDER_LOCAL}{file} @sf_delta_stage;'
    cs.execute(uploadStmt)

for file in files_list:
    copyStmt = f"""COPY INTO {SCHEMA_NAME}.{TABLE_NAME} FROM 
    (
        SELECT
            $1:id:VARIANT,
            $1:firstName:VARIANT,
            $1:middleName:VARIANT,
            $1:lastName:VARIANT,
            $1:gender:VARIANT,
            $1:birthDate:VARIANT,
            $1:ssn:VARIANT,
            $1:salary:VARIANT
        FROM @sf_delta_stage/{file}
    )
        FORCE = TRUE
    """
    cs.execute(copyStmt)

当我检查我的雪花表时,我有正确的行数,但我的所有数据都是NULL

你知道会发生什么吗?

使用 Delta Lake 阅读器读取底层 Parquet 文件是最简单的。 以下是使用 Spark 执行此操作的方法:

df = spark.read.format("delta").load("path/to/data")
df.write.format(snowflake_source_name)...

您可以使用delta-rs将您的 Delta Lake 加载到 pandas DataFrame 并将其加载到带有纯 Python 的 Snowflake 中。 您还可以使用 delta-rs 来简单地获取最新版本的 Parquet 文件列表并一一加载。

您当前的代码可能有点错误,因为它可能会拾取已被 Delta Lake 墓碑化的 Parquet 文件(例如,已标记为删除但尚未从磁盘物理删除的 Parquet 文件)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM