【问题标题】:Data ingestion to snowflake from Azure data factory从 Azure 数据工厂将数据引入雪花
【发布时间】:2020-09-29 21:29:26
【问题描述】:

问题:谁能帮我找到一个解决方案,在不使用 azure blob 存储的情况下将数据从 Azure 数据工厂摄取到雪花表。

要求:我们现在有一组存储在雪花表中的客户 ID。我们想要遍历每个客户 ID,并使用 WebAPI 从 Amazon S3 获取所有客户详细信息并将其写回雪花表。当前系统使用 Azure Databricks(PySpark) POST 客户 ID 并使用 WebAPI 从 S3 获取相关的 json 数据,解析 json 以提取我们所需的信息并将其写回雪花。但是对于一条记录,这个过程至少需要 3 秒,我们不能花那么多时间进行数据摄取,因为我们需要处理大量数据,并且长时间运行 ADB 集群成本更高。我们认为的解决方案就像不是使用 python Web API,而是使用 azure 数据工厂从 s3 存储桶中获取数据并将其摄取到雪花表中。由于数据是客户数据,由于隐私规则,我们不假设在将其写入雪花之前将其存储在 azure blob 存储中。我们是否有任何其他方法可用于直接从 s3 或通过 ADF 将其写入雪花表不使用 Blob 存储。

【问题讨论】:

  • 您不需要昂贵的数据块来从雪花中读取数据并查找 Web 服务并将数据写回雪花。您可以使用几乎任何脚本语言来执行此操作。你有多少个客户ID?如果你有任何低于 1000 万的东西,你可以将它们缓存在雪花之外的某个地方,即一个本地 sql 服务器(快速)-免费,然后使用 powershell 进行迭代,调用 Web 服务(免费),获取结果并编写回到 sql server(免费),然后一旦完成所有这些,您就可以将结果批量上传到雪花(昂贵)
  • @Nick.McDermaid 非常感谢您的建议。我们正在考虑每日批量 ETL 流程,我们的每日客户数量从 10K 到 15K 不等。但是在我们将这个系统作为一个整体进行生产之前,我们可能需要加载 10 个月的历史数据。到目前为止,我们完全避免使用任何本地数据库,因为我们的系统完全基于 azure。截至目前,客户数据(只有 ID ) 在雪花表中上演。我们正在尝试从 WebAPI 优化这些 ID 的相关数据查找/提取。
  • 您是否考虑过利用 Snowflake 的内部舞台?我意识到这也是 Azure Blob,但是它的安全性和加密性非常高,并且一旦 COPY INTO 成功,数据就会被刷新。
  • 如果您愿意,您可以在 Azure 函数和 Azure SQL 之类的东西中构建它。事实仍然是有更便宜的平台来实现这一目标

标签: azure amazon-s3 azure-data-factory snowflake-cloud-data-platform azure-databricks


【解决方案1】:

您可以创建一个 databricks 笔记本并从 s3 读取所有数据,并出于临时目的将数据存储在 dbfs 上,一旦集群终止,这些数据将被销毁。

ADF -> Databricks Notebook

Databricks
Read from s3 -> create a pyspark dataframe -> filter the data based on your condition -> write to snowflake

【讨论】:

  • 从 WebAPI 到 ADB 的周转时间是相当长的,而且随着数据量的增加,我们需要做的 json 解析来提取数据并将其转换为 spark dataframe 的时间也不长。跨度>
【解决方案2】:

好吧,如果您的数据已经在 S3 上,您可以使用 COPY INTO 命令。 https://docs.snowflake.com/en/user-guide/data-load-s3.html

【讨论】:

  • 是的,我们目前正在探索这个选项。非常感谢您的建议。
  • 如果这回答了您的问题,请考虑将其标记为已解决:)
  • COPY INTO 不会查找网络服务。
  • 确实如此,但不要求查找 Web 服务。 OP 要求一种从 S3 获取客户数据的方法。
猜你喜欢
  • 2021-09-02
  • 2022-06-22
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 2019-03-27
  • 2020-07-18
  • 1970-01-01
相关资源
最近更新 更多