【问题标题】:External table not refreshing data Snowflake外部表不刷新数据雪花
【发布时间】:2020-10-30 03:26:06
【问题描述】:

假设我在 Hive 中有一个外部表,并且外部表的 S3 位置中的 csv 文件如下所示。

+----+------+
| ID | Name |
+----+------+
|  1 | A    |
|  2 | B    |
+----+------+

如果我像下面这样更改文件中的数据,当我在 Hive 中查询外部表时,我能够看到更改后的值。

+----+------+
| ID | Name |
+----+------+
|  1 | A    |
|  2 | C    |
+----+------+

在 Snowflake 中测试时的相同场景,我无法看到新数据,但我仍然可以看到旧数据,尽管我在 Snowflake 中创建外部表时添加了 auto_refresh = true

create or replace external table schema.table_name 
(
    ID INT as  (value:c1::int), 
    Name varchar(20) as ( value:c2::varchar)
)
with location = @ext_stage_test
file_format = pipeformat
auto_refresh = true

这是雪花的行为还是我遗漏了什么?

非常感谢任何帮助。

【问题讨论】:

  • 您是否验证了您的外部舞台位置中的文件中的数据已更新为这些值? Snowflake 应始终根据外部阶段中的文件显示正确的值。
  • 是的,在 S3 位置,文件具有更新的值。但是当我查询表格时,它显示的是旧数据
  • 从 Snowflake 中直接对舞台运行选择时会看到什么? SELECT $1, $2 FROM @ext_stage_test ( FILE_FORMAT => 'pipeformat' );
  • 另外,您是否按照以下文档使用 AWS SNS 设置了自动刷新:docs.snowflake.com/en/sql-reference/sql/…
  • 当我在舞台上运行选择查询时,我没有看到刷新的数据。但是当我再次创建/替换外部表时,数据正在刷新。那不应该是这种行为,对吧?

标签: sql amazon-s3 hive snowflake-cloud-data-platform external-tables


【解决方案1】:

我会将此作为答案,但听起来您并未在 AWS S3 上设置 SNS 通知。 AUTO_REFRESH 允许 Snowflake 在向队列发送文件已放入 S3 存储桶或已删除的通知时刷新外部表。这是唯一真正可用的自动刷新属性。否则需要手动刷新外部表,需要运行刷新外部表:

alter external table exttable_part refresh;

如果您无法设置文档中提到的 SNS 配置 (https://docs.snowflake.com/en/sql-reference/sql/create-external-table.html#simple-external-table-auto-refresh-using-amazon-sns),那么我建议您将上面的命令添加到以对您有意义的频率执行的 task

【讨论】:

  • 我不确定是否设置了 AWS S3 上的 SNS 通知,因为此设置由我们组织中的另一个团队处理。我需要和他们核实一下。
  • 我已经尝试过alter external table schema.table_name refresh,但我仍然只能看到旧数据。
  • 你能把答案贴在这里吗?
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
相关资源
最近更新 更多