2

文档说支持集群,Expressions on base columns并有一个使用 TO_DATE(timestamp) 作为集群键的例子,

https://docs.snowflake.net/manuals/user-guide/tables-micro-partitions.html#defining-clustering-keys-for-a-table

这确实像我验证的那样有效,但在我的情况下,按小时集群更好,所以使用这个 DATE_TRUNC by HOUR 作为集群键

CREATE OR REPLACE TABLE t(
  "timestamp" datetime,
  ... more fields
) CLUSTER BY (DATE_TRUNC('HOUR', "timestamp"));

CREATE TABLE 运行成功,但是,当使用 COPY INTO 加载数据时,它说在 COPY 中不支持,所以想知道是否支持按小时聚类?还是 COPY 命令的限制?有人知道解决方法吗?

002300 (0A000): SQL Compilation error: Function 'TRUNCTIMESTAMPTOHOUR' 
    not supported within a COPY
4

2 回答 2

1

扩展 Stuart 的答案:只需执行 INSERT INTO,SELECT FROM [staging area]。

INSERT INTO DB.SCHEMA.T(timestamp, col2, ...)
    SELECT 
    $1::timestamp_ntz,
    $2
    ...
    FROM 
        @SOURCE.EXTRACTS/folder_location (FILE_FORMAT => '[file_format_name]', 
                                            PATTERN => '[regex file pattern]')
于 2018-03-09T17:47:17.903 回答
0

作为一种解决方法,请尝试将 COPY 复制到未定义集群键的临时表“stg”中。然后插入到目标表:

INSERT INTO t 
SELECT * FROM stg 
ORDER BY (DATE_TRUNC('HOUR', "timestamp"));
于 2018-01-04T22:01:45.110 回答