有一个将 Excel 文件(.xls、.xlsx)加载到 Snowflake 的用例。
使用 SnowSQL PUT 命令,我可以将文件加载到阶段(用户阶段),并且在这一点之前它工作正常。下一步是使用 COPY INTO 命令从 User Stage 加载到 Snowflake Table。问题是 Snowflake 中没有可用的 FILE_FORMAT 来指定 XLS 类型数据。
我不想将 XLS 转换为 CSV 格式,这是 FILE_FORMAT 类型的可用选项。 知道如何在不修改源 Excel 文件的情况下完成这项工作吗?
截至目前,Snowflake 不支持直接从 Excel 文件加载数据。您必须将源文件转换为受支持的格式。 https://docs.snowflake.com/en/sql-reference/sql/create-file-format.html
我同意将数据转换为 CSV 很容易出错。虽然 Snowflake 选项不是“原生”的,但 Snowflake 确实有一个 python 连接器,并且有许多 python excel 库。这是关于此的 Snowflake 参考:python-connector-pandas 和一个库示例:pandas.read_excel
鉴于您随后对 excel 工作簿中的多个工作表和文件数量的评论,我认为编程解决方案是最佳选择。
选项一:
选项2:
首先你必须使用 Python 处理你的 excel 文件,然后将数据加载到 Snowflake。请使用以下代码:
from sqlalchemy import create_engine
import pandas as pd
snowflake_username = 'username'
snowflake_password = 'password'
snowflake_account = 'accoutname'
snowflake_warehouse = 'warehouse'
snowflake_database = 'database'
snowflake_schema = 'public'
engine = create_engine(
'snowflake://{user}:{password}@{account}/{db}/{schema}?warehouse=
{warehouse}'.format(
user=snowflake_username,
password=snowflake_password,
account=snowflake_account,
db=snowflake_database,
schema=snowflake_schema,
warehouse=snowflake_warehouse,
),echo_pool=True, pool_size=10, max_overflow=20
)
try:
connection = engine.connect()
df_sensor.columns = map(str.upper, df_sensor.columns)
df_sensor.to_sql('tb_equipments'.lower(), con=connection,
schema='public', index=False, if_exists='append', chunksize=16000)
results = connection.execute('select count(1) from
tb_equipments').fetchone()
print('\nTotal de linhas inseridas: ',results[0], '\n')
最后: 连接.close() 引擎.dispose()
迟到的答案,但在这里。我有一个 Power Automate Desktop 流程,它利用 Snowsql 自动将 csv 文件加载到 Snowflake。
对于大文件,选择 nn M 行拆分文件以利用大容量的快速加载。 该应用程序不检测数据类型,它以字符串形式加载数据,您应该设置雪花或 DBT 以将数据处理到您的生产资料中。
正如其他用户所建议的那样,解耦工作表并将每个工作表转换为 CSV 可能是您用例最有保障的选择。
或者,您可以使用预构建的转换服务进行加载 - 与雪花紧密集成的转换服务/工具。
优点是,其中一些工具提供了一种方法,可以在提取数据集后立即处理数据集,然后再将其推回雪花 DW。
这样您就可以即时查看摘录。
我和一个团队一起工作,试图迎合这个特殊的痛点。我们目前支持轻松加载 JSON、CSV,并可能在不久的将来增加对 excel 的支持。
如果您有兴趣,可以在此处尝试CSV 功能,如果有帮助的话。