【问题标题】:Azure Synapse Polybase/External Tables - Can we get the line numbers from a file while we create an external tableAzure Synapse Polybase/外部表 - 我们可以在创建外部表时从文件中获取行号吗
【发布时间】:2021-11-24 15:35:48
【问题描述】:

我在使用 Azure Synapse 中的 Polybase 读取文件并将其加载到表时尝试从文件中获取行号。例如,假设文件(csv)有 3 列,我需要加载具有 4 列的目标表(来自文件的 3 列和用于保存文件中行/行号的列)。有什么 polybase 属性可以用来获取这条线吗?

Sample File

Expected Output

我在从外部表中选择时尝试使用 row_number 函数,但是当数据很大时,这会给出不正确的行号(将行号混淆)。我猜这是由于概念上构建了 Azure Synapse(主/从)。

CREATE EXTERNAL TABLE dbo.EXAMPLE_EXT (
   COL1 VARCHAR(5),
   COL2 VARCHAR(5),
   COL3 VARCHAR(5))
WITH (
    LOCATION='../',
    DATA_SOURCE=Example_DataSource,
    FILE_FORMAT=Example_csvFile
    );

INSERT INTO EXAMPLE_TARGET_TABLE (LINE_NUMBER,COL1,COL2,COL3)
SELECT ROW_NUMBER() OVER(ORDER BY NULL) AS LINE_NUMBER, COL1, COL2, COL3
FROM dbo.EXAMPLE_EXT

Output from above code

【问题讨论】:

    标签: sql azure azure-synapse external-tables


    【解决方案1】:

    是的,您可以使用“create table as select”添加行号。下面是一个示例脚本,如果您创建了外部数据源,则可以跳过第 1 个。

     1.  
      CREATE EXTERNAL DATA SOURCE <data_source_name>
      WITH
        ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
          [ [ , ] CREDENTIAL = <credential_name> ]
          [ [ , ] TYPE =HADOOP ]
         )
     [ ; ]
    
    2. 
    CREATE EXTERNAL TABLE dbo.EXAMPLE_EXT (
       COL1 VARCHAR(5),
       COL2 VARCHAR(5),
       COL3 VARCHAR(5))
     WITH (
        LOCATION='../',
        DATA_SOURCE=Example_DataSource,
        FILE_FORMAT=Example_csvFile
        );
    
    3. 
    CREATE TABLE EXAMPLE_TARGET_TABLE
    WITH
    (DISTRIBUTION = ROUND ROBIN
    ,CLUSTERED COLUMNSTORE INDEX
    )
    
    AS
    
    SELECT ROW_NUMBER() OVER(ORDER BY NULL) AS LINE_NUMBER, 
    *
    FROM dbo.EXAMPLE_EXT;
    

    【讨论】:

      猜你喜欢
      • 2021-03-13
      • 2017-09-19
      • 1970-01-01
      • 2021-10-03
      • 2019-07-01
      • 1970-01-01
      • 2021-09-13
      • 2021-08-01
      • 1970-01-01
      相关资源
      最近更新 更多