雪花上的从属SnowPipe

时间:2019-12-13 05:25:53

标签: snowflake-data-warehouse

在Snowflake中,有一个名为Snowpipe的概念,它将自动将数据从不同的数据源加载到已配置的表中。

我们正在尝试通过Snowpipe将其加载到雪花中时进行归一化。

product_create.html

文件中的值

<form action="." method="post" enctype="multipart/form-data"> {% csrf_token %}

   <p>Product ID {{product_form.product_id }}</p>
   <p>Color Parent {{color_form.color}}</p>  # Button target to add more {{color_form.color}}
   <p>Video URL {{product_form.video}}</p>

   <h3>Technical Specifications</h3>
   <h4>Thickness Options</h4>
   <p>  # Button target to add more {{thickness_form.*}}
      Dimension: {{thickness_form.dimension}} {{thickness_form.dimension_unit}}
      Alias: {{thickness_form.alias}} {{thickness_form.alias_unit}}
   </p>

   <p><input type="submit" value="Save" /></p>
</form>

我们无法在同一管道中填充表A和表B,因为该管道只有一个copy语句。

是否有像依赖PIPE这样的概念以及其他先加载查找表并从示例文件加载主表的方法?

注意:

  • 如果我们有两个管道,则无法指定依赖项。

3 个答案:

答案 0 :(得分:1)

一旦云服务提供商的Blob存储位置中的源数据可用,便应使用Snowpipe将数据加载到表中。您无法在Snowpipes之间设置依赖关系,否则无论如何都会增加管道的延迟。

您最好的选择是设置两个Snowpipe,以在数据到达Blob存储中后立即加载两个表,然后使用Snowflake tasks处理依赖关系和业务逻辑。

答案 1 :(得分:0)

我有一个多表复制的想法:

  • 您可以创建存储过程,以通过参数化表名来将数据从源位置复制到目标表。
  • 在雪花中使用任务定期安排您的存储过程。

这将以给定的时间间隔将数据填充到目标表中。使用此选项,不会立即从您的源位置复制文件。必须检查TASK hoe上的选项才能在每次运行时得到通知。

希望这会有所帮助。让我知道您在开发存储过程方面是否需要任何帮助!

非常感谢, 斯里加

答案 2 :(得分:0)

只有几个想法:

  1. 设置Snowpipe以加载到单个永久性暂存区(PSA)表中。

  2. 使用哈希码作为两个分离表的代理键 (如果您必须使用代理键)。 这样,您不必查找代理键值。 您的表格如下所示: TableA-EmployerHash,EmployerName; TableB-EmployeeHash,EmployeeName,EmployerHash;

  3. 然后使用存储过程创建一个Task,该Task将发出多表插入,以便您将使用相同的源查询同时加载到两个表中。 (https://docs.snowflake.net/manuals/sql-reference/sql/insert-multi-table.html#insert-multi-table

  4. 如果实际的表结构和处理更为复杂,则可以尝试使用基于PSA表的Snowflake流和任务。 有关详细示例,请参见此处:https://community.snowflake.com/s/article/Building-a-Type-2-Slowly-Changing-Dimension-in-Snowflake-Using-Streams-and-Tasks-Part-1

HTH, Gabor