Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Snowflake cloud data platform Snowflake在加载CSV时选择时间戳格式而不是日期格式_Snowflake Cloud Data Platform - Fatal编程技术网

Snowflake cloud data platform Snowflake在加载CSV时选择时间戳格式而不是日期格式

Snowflake cloud data platform Snowflake在加载CSV时选择时间戳格式而不是日期格式,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我有一个CSV,其中有一列包含基本日期,如2020年11月1日 我在文件加载器中指定了以下格式规范: 日期\格式='MM/DD/YYYY' 时间戳格式='MM/DD/YYYY HH24:MI'。 这将使用date_格式为日期列创建匹配项。但是,Snowflake会看到日期列并将其标识为时间戳列。由于该列中不存在时间,因此无法匹配时间戳格式,加载失败 为什么雪花选择将我的日期列标识为时间戳列 以下是我使用的完整文件格式规范: CREATE OR REPLACE FILE FORMAT jobsta

我有一个CSV,其中有一列包含基本日期,如2020年11月1日

我在文件加载器中指定了以下格式规范:

日期\格式='MM/DD/YYYY' 时间戳格式='MM/DD/YYYY HH24:MI'。 这将使用date_格式为日期列创建匹配项。但是,Snowflake会看到日期列并将其标识为时间戳列。由于该列中不存在时间,因此无法匹配时间戳格式,加载失败

为什么雪花选择将我的日期列标识为时间戳列

以下是我使用的完整文件格式规范:

CREATE OR REPLACE FILE FORMAT jobstats_csv_format
  TYPE = CSV FIELD_DELIMITER = ',' SKIP_HEADER = 1 NULL_IF = ('NULL', 'null') EMPTY_FIELD_AS_NULL = true COMPRESSION = AUTO FIELD_OPTIONALLY_ENCLOSED_BY='"' DATE_FORMAT = 'MM/DD/YYYY' TIMESTAMP_FORMAT = 'MM/DD/YYYY  HH24:MI';
。。。此文件格式规范在我的阶段定义中引用

CREATE OR REPLACE STAGE tct_jobstats_input_stage
  URL='azure://blahblahblah.blob.core.windows.net/tct-filefly-input/'
  CREDENTIALS=(AZURE_SAS_TOKEN='blahblahblahblahblah')
  FILE_FORMAT = jobstats_csv_format;
。。。我用来加载它的代码

    try 
    {
        var load_cmd  = "COPY INTO LifelineRemoved ";
            load_cmd += "FROM @tct_jobstats_input_stage ";
            load_cmd += "PATTERN='.*Lifeline Removed During Date Range.*[.]csv.*';";
        var load_stmt = snowflake.createStatement( { sqlText: load_cmd } );
        load_stmt.execute();
    }
    catch (err)
    {
        result =  "Failed: Code: " + err.code + "\n  State: " + err.state;
        result += "\n  Message: " + err.message;
        result += "\nStack Trace:\n" + err.stackTraceTxt; 
    }
。。。这里是一个标题+来自CSV的单行数据,无法加载。 帐户、customerstatus、certifieddate、LifeLineRemoveDate、lifelineremovedreason、电话号码1、线路状态、激活日期、断开连接日期、名字、姓氏、服务地址1、服务地址2、服务城市、服务状态、服务邮编、列1 123456,有效,2019年11月26日,2019年12月1日,DSN D拒绝90-5客户的生命线,321 5551212,有效,2019年11月26日,美国能源部约翰,加利福尼亚州弗雷斯诺示例街1524号,93706

。。。最后我看到的错误是。。。

时间戳\u格式目前是一种预览功能,因此可能尚未准备好用于生产。作为一种解决方法,您可以使用“从中选择”将副本复制到mytable中。。。模式对每个字段应用自定义转换。或加载为文本并在之后转换。最后,如果您能提供代码和示例数据,它总是有帮助的。

我尝试用您的规范加载示例数据,它在WebUI中运行良好

这就是我的示例数据的外观

创建以下文件格式和定义的日期/TS格式

当您从WebUI加载数据时,它可以完美地工作

使用正确的文件,定义数据类型的格式看起来也很完美

如果文件格式定义的日期和时间戳不正确,则会出现以下错误


检查表定义以确保列类型与预期数据匹配。在我的例子中,我有一个应该是日期的列的时区列类型。

我尝试使用上面的WebUI选择创建一个新的文件格式。不幸的是,对于我的样本数据,我仍然有同样的问题。现在,我将上传更好的示例数据和我为文件格式配置所做的选择。为什么不在SQL命令中使用选项FILEFORMAT=>MY\u file\u format?我没有看到您命令中的文件格式选项。我想这是因为在我的命令中我指的是stage,在stage定义中,我指定了文件格式。我会更新。我似乎无法区分触发雪花错误识别文件中日期的数据之间的差异,因为它在所有行上都失败了。我想我希望你能对代码有所了解。也许你建议在查询中应用一个转换,将日期重新格式化为使用破折号,可能会使事情正常工作。这是一个解决办法,现在就足够了。但可能需要为此提交一份bug报告。
01/09/2020,01/09/2020 23:59,9th Jan
01/10/2020,01/10/2020 22:58,10th Jan
01/11/2020,01/11/2020 21:57,11th Jan
01/12/2020,01/12/2020 20:56,12th Jan