2017-12-27 803 views
1

的文档通过Expressions on base columns表示支持集群和具有使用TO_DATE(时间戳)作为聚集键的例子,雪花支持按小时微分区群集?

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

,确实可以作为我验证了,但对我来说,按小时簇是更好,所以按小时使用此DATE_TRUNC簇键

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

的CREATE TABLE成功运行,但是,与复制到加载数据时,它说不是一个副本中的支持,所以通过群集支持每小时奇迹?或者是COPY命令的限制?任何人都知道解决方法?

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

回答

0

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

INSERT INTO t 
SELECT * FROM stg 
ORDER BY (DATE_TRUNC('HOUR', "timestamp")); 
1

扩展斯图尔特的答案:只需执行INSERT INTO,SELECT FROM [staging区域]。

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]')