【问题标题】:How to copy parquet file from Azure Blob Storage into Snowflake table?如何将 Parquet 文件从 Azure Blob 存储复制到雪花表中?
【发布时间】:2022-09-21 15:28:58
【问题描述】:

要将 Parquet 文件从 Azure Blob 存储复制到雪花表中,我创建了一个存储过程,但我不知道如何将源数据中的时间戳转换为日期。

CREATE OR REPLACE PROCEDURE PROC_IMPORT_COPY_DATA(year varchar,month varchar,day varchar)
returns varchar
LANGUAGE sql
AS
  $$
  BEGIN
  let delete_query varchar:= \'delete from PRD_RAW_DATA.PUBLIC.SAMPLE_DATA where load_date = substr(to_char(CURRENT_DATE()),1,4) || substr(to_char(CURRENT_DATE()),6,2) || substr(to_char(CURRENT_DATE()),9,2)\';
  execute immediate delete_query;
let uri varchar := concat(
\'select 
$1:COMPANY_CODE,
$1:STORE_CODE,
$1:JAN_CODE,
$1:PERIOD,
$1:QUANTITY,
$1:AMOUNT,
$1:GROSS_PROFIT,
$1:SELLING_PRICE,
$1:SALE_QUANTITY,
$1:SALE_AMOUNT,
$1:SALE_GROSS_PROFIT,
$1:SALE_PRICE,
$1:NUMBER_OF_DEALERS,
$1:NUMBER_OF_VISITORS,
$1:LOAD_DATE
FROM @SYNAPSE_STAGE_PRD/delta/sample_data\'
,\'/year=\'
, :year
,\'/month=\'
, :month
,\'/day=\'
, :day
);
let copy_query varchar := concat(\'copy into PRD_RAW_DATA.PUBLIC.SAMPLE_DATA from \'
                                        ,\'(\'
                                        ,uri
                                        ,\'(file_format => my_parquet_format, pattern => \\\'.*.parquet\\\') t\'
                                        ,\') force=TRUE\'
                                    );
    execute immediate copy_query;
    return(copy_query);
  END;
  $$;

这是错误信息; 在第 77 行的位置 4 上未捕获类型为 \'STATEMENT_ERROR\' 的异常:无法将变量值 \"2022-08-17 00:00:00.000\" 转换为 DATE

你知道解决这个问题的方法吗? 任何帮助,将不胜感激。 谢谢你。

    标签: sql stored-procedures snowflake-cloud-data-platform


    【解决方案1】:

    如果需要,您可以将时间戳转换为日期,如下所示:

    select '2022-08-17 00:00:00.000'::date;
    

    给我:

    2022-08-17
    

    在您的情况下,我不确定哪个是给出该错误的列,但如果我会采用一个看起来像时间戳的列:

    $1:LOAD_DATE
    

    你可以这样做:

    $1:LOAD_DATE::date
    

    【讨论】:

    • 我尝试了“$1:LOAD_DATE::date”,但发生了同样的错误。
    • 试一试怎么样as_date($1:LOAD_DATE)
    • 发生了不同的错误。 “在位置 4 的第 36 行上未捕获类型为 'STATEMENT_ERROR' 的异常:SQL 编译错误:位置 0 处的语法错误行 5 意外 'as'。位置 18 处的语法错误行 5 意外 ','。”
    • 您可以直接在 Snowflake UI 上尝试 SELECT 语句吗?它是否使用强制转换为::日期或功能as_date?
    • 使用TO_DATE(TO_TIMESTAMP($1:LOAD_DATE)),效果很好。谢谢您的支持。
    猜你喜欢
    • 2020-08-18
    • 2021-07-29
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2017-05-06
    • 2020-03-23
    相关资源
    最近更新 更多