生成多个文件表结构并创建表

Posted

技术标签:

【中文标题】生成多个文件表结构并创建表【英文标题】:Generate Multiple files Table Structure and create table 【发布时间】:2022-01-15 23:19:48 【问题描述】:

我正在尝试通过 Python 为 Snowflake 生成多个文件表结构

我在目录中有文件列表,我想从文件中读取数据使用文件名在雪花中动态创建表。

以下是我目前尝试过的

# Generate Multiple files Table Structure to Snowflake via Python
import os
from os import path
import pandas as pd
import snowflake.connector
from snowflake.sqlalchemy import URL
from sqlalchemy import create_engine
from snowflake.connector.pandas_tools import write_pandas, pd_writer

dir = r"D:\Datasets\users_dataset"

engine = create_engine(URL(
    account='<account>',
    user='<user>',
    password='<password>',
    role='ACCOUNTADMIN',
    warehouse='COMPUTE_WH',
    database='DEM0_DB',
    schema='PUBLIC'
))

connection = engine.connect()
connection.execute("USE DATABASE DEMO_DB")
connection.execute("USE SCHEMA PUBLIC")
results = connection.execute('USE DATABASE DEMO_DB').fetchone()
print(results)
# read the files from the directory and split the filename and extension

for file in os.listdir(dir):
    name, extr = path.splitext(file)
    print(name)
    file_path = os.path.join(dir, file)
    print(file_path)
    df = pd.read_csv(file_path, delimiter=',')
    df.to_sql(name, con=engine, index=False)

我遇到了错误

sqlalchemy.exc.ProgrammingError: (snowflake.connector.errors.ProgrammingError) 090105 (22000): Cannot perform CREATE TABLE. This session does not have a current database. Call 'USE DATABASE', or use a qualified name.
[SQL: 
CREATE TABLE desktop (
    "[.ShellClassInfo]" FLOAT
)

]
(Background on this error at: https://sqlalche.me/e/14/f405)

我检查了雪花的权限问题,没有发现任何问题。

有人可以帮忙解决这个错误

【问题讨论】:

请告诉我这些凭据不是真实的 这只是一个跟踪帐户。 【参考方案1】:

在 create_engine 中,数据库被称为 DEM0_DB 而不是 DEMO_DB

engine = create_engine(URL(
    ...
    #database='DEM0_DB',
    database='DEMO_DB',
    schema='PUBLIC'
))

【讨论】:

我觉得在这个 Typo 错误上花费超过 1 小时真是愚蠢。

以上是关于生成多个文件表结构并创建表的主要内容,如果未能解决你的问题,请参考以下文章

转-oracle中比较两表表结构差异和数据差异的方法

导出空表表结构方法

如何在Oracle中复制表结构和表数据

MySQL表的操作

PostgreSQL查看表表索引视图表结构以及参数设置

表操作