【问题标题】:Snowflake - Combine external tables into one tableSnowflake - 将外部表合并为一张表
【发布时间】:2021-05-13 04:37:01
【问题描述】:

我有20个雪花外部表,假设它们是table1,table2 ... table20,它们都具有相同的结构。他们每个人都通过外部阶段在 S3 上指向他们自己的位置(镶木地板文件、同一个桶不同的文件夹)。 现在我需要将它们组合成一个视图。我写的SQL很简单

select * from table1
union
select * from table2
....
select * from table20

但是,性能很慢。据我所知,雪花不支持多个外部阶段,外部阶段不支持多个外部位置

我的问题是:有没有办法提高性能?使视图的性能至少像单个外部表?

谢谢

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    物化视图可以成为您方案中的解决方案,通过在引用外部阶段的外部表上创建它们可以帮助提高查询性能。 这是指向文档的链接,该文档是指何时创建物化视图,物化视图的优缺点。 https://docs.snowflake.com/en/user-guide/views-materialized.html

    【讨论】:

    • 主要是因为物化视图的缺点,我需要小心我的客户的成本。
    【解决方案2】:

    为什么不对所有文件使用文件模式,而不是使其成为多个表。您可以为每个文件位置创建一个表格,或者您可以拥有一个带有正则表达式的表格,以便在结构相同的情况下加载所有数据。

    CREATE TABLE IF NOT EXISTS my_db.my_schema.my_ext_table (
        col1 STRING COMMENT 'col-1-comment',
        ....
    )
    WITH LOCATION = @/path/to/file/in/s3
    FILE_FORMAT = 'parquet_file_format'
    AUTO_REFRESH = true
    PATTERN = '.*/.*/.*[.]parrquet' 
    

    【讨论】:

    • 我没有这样做有几个原因,主要是因为1.我们的AWS基础设施很复杂,它不仅涉及s3,还涉及glue,athena等。2.SF建议避免应用模式过滤大量文件;并且仅在手动刷新外部表元数据时才支持该参数。更多信息:CREATE EXTERNAL TABLE
    • 无法在多个表上创建物化视图...因此您必须使用模式方法创建外部表,然后在其顶部使用物化视图以及定义外部表时,设置自动刷新为真。或者,您也可以设置一个临时表并通过流/任务将数据加载到临时表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2016-11-13
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多