雪花,无法将分区的镶木地板文件导入数据库

时间:2019-02-08 15:41:18

标签: sql regex snowflake

-https://community.snowflake.com/s/question/0D50Z00008lq9RGSAY/cannot-import-partitioned-parquet-files-to-a-database

的副本

在S3存储桶上,我已经分区了要导入的实木复合地板文件。文件s3://<bucket>/data/id1=<int>/id2=<int>/file.parquet的结构。我以本文为例:https://www.snowflake.com/blog/how-to-load-terabytes-into-snowflake-speeds-feeds-and-techniques/。但是,进行一些修改后,导入解决方案将不起作用。这是一个SQL:

 COPY INTO PARQUET from (
    select
        NULLIF(
           regexp_replace (
           METADATA$FILENAME,
           '.*\\/id1=(.*)\\/.*',
           '\\1'),
           '__HIVE_DEFAULT_PARTITION__'
         )                         as id1,
         NULLIF(
           regexp_replace (
           METADATA$FILENAME,
           '.*\\/id2=(.*)\\/.*',
           '\\1'),
           '__HIVE_DEFAULT_PARTITION__'
         )                         as id2,
       $1:other as other
       from @test_parquet_stage/data/) pattern= '.*/id1=.*/id2=.*/.*';

我收到“检测到递归文件加载,跳过命令”。您有什么想法,为什么不起作用?谢谢!

更新:

经过一些修改,我只能使用一个正则表达式加载数据。如文章所示。我的SQL:

select
     NULLIF(
       regexp_replace (
       METADATA$FILENAME,
       '.*\\/id1=(.*)\\/.*',
       '\\1'),
       '__HIVE_DEFAULT_PARTITION__'
     )                         as id1,
     $1:other        as other
   from @test_parquet_stage/data/) pattern= '.*/.*';

但是,当我添加第二个时,会发生以下错误:

  

无法识别数值'0 / id2 = 11'

可能与正则表达式有关,但我不知道到底是什么。

1 个答案:

答案 0 :(得分:0)

以下应为您匹配s3://<bucket>/data/id1=<int>/id2=<int>/file.parquet

.*\/id1=(.*)\/.*

如果您使用\来转义其他字符,则无需转义。在您的情况下,\用于转义/。因此,仅使用\就可以了。