Snowflake连接器错误:001003(42000):SQL编译错误(语法错误)

ppi*_*cus 2 python pandas snowflake-cloud-data-platform snowflake-connector

我正在尝试将 pandas 数据帧加载到雪花表中。

这是我的 SF 表 DDL:

create or replace TABLE MY_TABLE (
    WEBSITE VARCHAR(16777216),
    ORGANIZATION_NAME VARCHAR(16777216),
    ORGANIZATION_NAME_URL VARCHAR(16777216),
    IPO_STATUS VARCHAR(16777216),
    FOUNDED_DATE VARCHAR(16777216),
    FOUNDED_DATE_PRECISION VARCHAR(16777216),
    TOTAL_FUNDING_AMOUNT VARCHAR(16777216),
    TOTAL_FUNDING_AMOUNT_CURRENCY VARCHAR(16777216),
    TOTAL_FUNDING_AMOUNT_CURRENCY_USD VARCHAR(16777216),
    LAST_FUNDING_AMOUNT VARCHAR(16777216),
    LAST_FUNDING_AMOUNT_CURRENCY VARCHAR(16777216),
    LAST_FUNDING_AMOUNT_CURRENCY_USD VARCHAR(16777216),
    LAST_FUNDING_DATE VARCHAR(16777216),
    INDUSTRIES VARCHAR(16777216),
    INDUSTRY_GROUPS VARCHAR(16777216),
    LAST_FUNDING_TYPE VARCHAR(16777216),
    IT_SPEND VARCHAR(16777216),
    IT_SPEND_CURRENCY VARCHAR(16777216),
    IT_SPEND_CURRENCY_USD VARCHAR(16777216)
);
Run Code Online (Sandbox Code Playgroud)

这是我的数据框的结构:

Data columns (total 19 columns):
 #   Column                                  Non-Null Count  Dtype  
---  ------                                  --------------  -----  
 0   Website                                 3924 non-null   object 
 1   Organization Name                       3924 non-null   object 
 2   Organization Name URL                   3924 non-null   object 
 3   IPO Status                              3924 non-null   object 
 4   Founded Date                            3837 non-null   object 
 5   Founded Date Precision                  3837 non-null   object 
 6   Total Funding Amount                    2397 non-null   float64
 7   Total Funding Amount Currency           2397 non-null   object 
 8   Total Funding Amount Currency (in USD)  2397 non-null   float64
 9   Last Funding Amount                     2259 non-null   float64
 10  Last Funding Amount Currency            2259 non-null   object 
 11  Last Funding Amount Currency (in USD)   2259 non-null   float64
 12  Last Funding Date                       2612 non-null   object 
 13  Industries                              3894 non-null   object 
 14  Industry Groups                         3894 non-null   object 
 15  Last Funding Type                       2612 non-null   object 
 16  Aberdeen - IT Spend                     1576 non-null   float64
 17  Aberdeen - IT Spend Currency            1627 non-null   object 
 18  Aberdeen - IT Spend Currency (in USD)   1576 non-null   float64
Run Code Online (Sandbox Code Playgroud)

根据 Snowflake 的文档,我编写了以下代码来帮助我将数据帧写入数据库:

success, nchunks, nrows, _ = write_pandas(conn, 
                                          df, 
                                          "MY_DB.MY_SCHEMA.MY_TABLE", 
                                          quote_identifiers=False)

print(str(success) + ', ' + str(nchunks) + ', ' + str(nrows))
Run Code Online (Sandbox Code Playgroud)

我遇到的问题如下:

ProgrammingError: 001003 (42000): SQL compilation error:
syntax error line 1 at position 133 unexpected 'Name'.
Run Code Online (Sandbox Code Playgroud)

我已经使用此函数来摄取其他数据帧,并且过去没有出现任何问题(所以我知道我的连接/连接器正在工作) - 也许我的数据或我在 Snowflake 中设置表的方式有问题?我有一些 NaN 值..这可能是一个问题吗?

以下是数据摘录:

在此输入图像描述

我还检查了其他 SO 答案,例如此处此处,但它们与我的问题没有直接关系。我对 Snowflake 和 SQL 比较陌生,因此我们将不胜感激任何解决此问题的帮助!

esh*_*ana 5

您的 df 列名称中有空格,您必须将quote_identifiers参数设置为 true :

success, nchunks, nrows, _ = write_pandas(conn, 
                                          df, 
                                          "MY_DB.MY_SCHEMA.MY_TABLE", 
                                          quote_identifiers=True)
Run Code Online (Sandbox Code Playgroud)

虽然我不确定雪花是否能够将其映射到您的列,其中它们有下划线而不是空格

  • 我更改了 df 的列名称以匹配 Snowflake 表并保留 quote_identifiers=False ,这似乎可以解决问题。谢谢你! (2认同)
  • @ppincus是的,如果您可以更改 df 列名称,这是另一种方式,如果这个答案有帮助,请接受/投票 (2认同)