【问题标题】:COPY INTO from Azure Dala lake gen2 to Azure Synapse does nothing从 Azure Data Lake gen2 到 Azure Synapse 的 COPY INTO 不执行任何操作
【发布时间】:2020-10-30 19:01:30
【问题描述】:

我正在尝试使用本地 ssms 从 azure data Lake gen2 复制到 azure synapse 仓库中的表。 COPY INTO 语句既不会引发任何错误,也不会转储数据。我正在使用 sep=',', encoding='utf-8' 将 pandas df 从 centos 服务器复制到 azure data Lake gen2。这是我正在使用的 COPY 语句。

COPY INTO dbo.SALES_CUTOMER_D 
FROM 'https://acoount_name/test-file-system/SALES_CUSTOMER_D_0.csv'
WITH (
 FILE_TYPE = 'csv',
 CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET=''),
 FIELDQUOTE = '"',
 FIELDTERMINATOR=',',
 ROWTERMINATOR='\r\n',
 ENCODING = 'UTF8',
 FIRSTROW = 2
)

【问题讨论】:

  • 尝试 ERRORFILE 选项以查看它是否将任何错误打印到 ERRORFILE。删除FIELDQUOTEFIELDTERMINATORROWTERMINATOR,您使用的是默认值。它可能会产生影响。除此之外,如果您希望有人为您提供更多帮助,您必须将 csv 文件的内容和 DDL 放入 SALES_CUTOMER_D。指定列列表 (COPY INTO dbo.SALES_CUTOMER_D (col1, col2, ...) FROM ...) 也是一个好主意。
  • @Kashyap 是的,我尝试将其用于名为 employee.csv 的示例 csv,其中 10 行模式 id 为 int,名称为 varchar 100,即使是同样的事情也在发生
  • 当我再次尝试将错误写入错误文件时,它会抛出访问被拒绝错误代码5的错误
  • 对于错误文件,提供完整的 URL,对于错误文件凭证,使用 sas 令牌而不是帐户密钥。还要在这个输入的 CSV 文件上运行 unix2dos 并尝试。

标签: python pandas azure-data-lake-gen2 azure-synapse


【解决方案1】:

检查您的文件是否具有 Unix 样式的行尾 (LF) 而不是 Windows 样式 (CRLF)。

如果您对 CRLF 不清楚,请参阅 Difference between CR LF, LF and CR line break types?

我知道的最简单的检查方法是使用set list以二进制模式在vi中打开文件:

vi -b -c 'set list' <file>

要验证这是否是问题所在,您可以执行以下操作之一:

  1. 告诉 COPY 文件中的行尾是什么:

     COPY INTO dbo.SALES_CUTOMER_D 
     FROM 'https://acoount_name/test-file-system/SALES_CUSTOMER_D_0.csv'
     WITH (
        FILE_TYPE = 'csv',
        CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET=''),
        ROWTERMINATOR='0x0A',
        FIRSTROW = 2
     )
    
  2. 通过解析文件头来确认它实际上正在读取文件。删除FIRSTROW = 2

  3. 更改行尾:

  • unix2dos <csv file>
  • 上传到datalake并再次尝试COPY,不带ROWTERMINATOR='\r\n',(这是默认值)。

A little gotcha:

COPY 在内部将“\n”视为“\r\n”。有关详细信息,请参阅 ROWTERMINATOR 部分。

换句话说:

  • 如果我们不指定ROWTERMINATOR 选项或指定ROWTERMINATOR=’\n’ROWTERMINATOR=’0x0D0A’,那么引擎将使用\r\n 作为终止符(Windows 样式)。
  • 如果我们指定ROWTERMINATOR=’0x0A’,那么引擎将使用“\n”作为终止符(Unix 风格)

【讨论】:

    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 2019-09-10
    • 2020-01-13
    • 2021-11-10
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    相关资源
    最近更新 更多