automation - 如何根据雪花中的任何文本文件自动创建表格?

标签 automation snowflake-cloud-data-platform

是否有任何工具或任何方法可以根据任何文本文件自动创建表格?

我有 100 多个 csv 文件,每个文件都有不同的列数。如果先在 snowflake 中手动创建表定义,然后加载数据,那么工作量会很大。我正在寻找一种无需创建表即可加载数据的特定方法。

如果有人知道如何解决这个问题,请告诉我。谢谢!

最佳答案

数据处理框架,例如 SparkPandas拥有可以解析 CSV 标题行并使用推断数据类型(不仅仅是字符串)形成模式的阅读器。您可以利用它来创建新表。

以下示例作为说明提供:

  • 使用 Pandas使用 Snowflake Connector for Python 的 SQL 写入功能(通过 SQL Alchemy )
  • 假设每个文件需要一个新表
  • 假设输入文件路径的文件名部分是表名
  • 假定 CSV 为标准格式,并具有列名标题
  • 在相同的数据库和架构名称下创建所有表
import sqlalchemy as sql
import pandas as pd
import os

# Setup an SQL Alchemy Engine object
# This will provide a connection pool for Pandas to use later
engine = sql.create_engine(
    'snowflake://{u}:{p}@{a}/{d}/{s}?warehouse={w}&role={r}'.format(
        u='USERNAME',
        p='PASSWORD',
        a='account.region',
        r='ROLE_NAME',
        d='DATABASE',
        s='SCHEMA',
        w='WAREHOUSE_NAME',
    )
)

# List of (n) input CSV file paths
csv_input_filepaths = [
    '/tmp/test1.csv',
    '/tmp/test2.csv',
    '/tmp/test3.csv',
]

try:
    # Process each path
    for path in csv_input_filepaths:

        # Use filename component of path as tablename
        # '/tmp/test1.csv' creates table named 'test1', etc.
        filename, _ext = os.path.splitext(os.path.basename(path))

        # Default CSV reading options in Pandas sniff and infer headers
        # It will auto-populate schema and types based on data
        data = pd.read_csv(path)

        # Stores into Snowflake (will create the table name if it does not exist)
        # Default args will attempt to create an index, so we disable that
        data.to_sql(filename, engine, index = False)

finally:
    # Tear down all connections gracefully pre-exit
    engine.dispose()

关于automation - 如何根据雪花中的任何文本文件自动创建表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61921349/

相关文章:

python - 如何单击使用 Selenium WebDriver 隐藏的元素?

iOS:无需越狱即可通过命令行在设备上部署和运行应用程序

deployment - Professional Rails 3.2+ 部署到 Heroku

time-series - 我可以将时间序列数据存储在数据仓库中吗?

SQL - 如何仅获取每个 ID 的当前值和先前值

sql - 正则表达式 - 无效的正则表达式 : '(?:[v=)' , 没有重复运算符的参数 :?

sql - 将 YYYYMMDD 字符串转换为 Snowflake 中的 YYYY-MM-DD 日期格式

android - 使用 Robolectric 和 ANT 进行测试

snowflake-cloud-data-platform - 我是否需要为Snowflake和On Premise之间的数据传输付费?

ios - 适用于 iOS 的 Genymotion 应用程序