事件中心、流分析和数据湖管道问题
Event Hub, Stream Analytics and Data Lake pipe questions
阅读这篇文章后 article 我决定尝试构建一个数据摄取管道。一切正常。我能够将数据发送到事件中心,由流分析提取并发送到数据湖。但是,对于一些对我来说很奇怪的事情,我有几个问题。如果比我更有经验的人能够回答,我将不胜感激。
这是我的流分析中的 SQL
SELECT
*
INTO
[my-data-lake]
FROM
[my-event-hub]
现在,对于问题:
- 我应该将 100% 的数据存储在一个文件中,尝试将其拆分为多个文件,还是尝试实现每个对象一个文件?流分析将所有数据存储在一个文件中,作为一个巨大的 JSON 数组。我尝试将{date}和{time}设置为变量,但它每天仍然是一个巨大的单个文件。
- 有没有办法强制流分析将事件中心的每个条目写入其自己的文件?或者限制文件的大小?
- 有没有办法设置流分析文件的名称?如果是这样,如果名称已经存在,是否有办法覆盖文件?
- 我还注意到该文件在创建后立即可用,并且是实时写入的,在某种程度上我可以在 download/display 文件时看到其中的数据截断。此外,在它完成之前,它不是有效的 JSON。如果我在写入数据湖文件时查询(通过 U-SQL)会发生什么情况?是不是聪明到忽略最后一个条目,或者将其理解为一个不完整的对象数组?
- 将 JSON 数据存储为数组或每个对象在新行中存储更好吗?
也许我对我的问题采取了错误的方法,但我在 Google 数据存储中有一个巨大的数据集(Google 没有SQL 解决方案)。我只能使用权限有限的帐户访问数据存储区。我需要将这些数据存储在数据湖中。因此,我制作了一个应用程序,将数据从 Datastore 流式传输到 Event Hub,这些数据由 Stream Analytics 摄取,后者在 Data Lake 中记下文件。这是我第一次使用这三种技术,但似乎是最好的解决方案。这是我对 ETL 混乱的首选替代方案。
不好意思提了这么多问题。我希望有人能帮助我。
提前致谢。
我只回答文件方面的问题:
生成较大的文件供以后处理通常比生成许多非常小的文件更好。鉴于您正在使用 JSON,我建议将文件的大小限制为您的 JSON 提取器能够在内存不足 运行 的情况下管理的大小(如果您决定使用 DOM 基于解析器).
我会把它留给 ASA 专家。
同上。
答案取决于 ASA 如何编写 JSON。客户端可以附加到文件,U-SQL 应该只能看到已添加到密封扩展区中的文件中的数据。因此,如果 ASA 确保范围与 JSON 文档的末尾对齐,您应该只会看到有效的 JSON 文档。如果没有,那么你可能会失败。
这取决于您计划如何处理数据。请注意,如果您将其作为数组的一部分编写,则必须等到数组为 "closed",否则您的 JSON 解析器很可能会失败。对于并行化和更多 "flexible",我可能每行得到一个 JSON 文档。
阅读这篇文章后 article 我决定尝试构建一个数据摄取管道。一切正常。我能够将数据发送到事件中心,由流分析提取并发送到数据湖。但是,对于一些对我来说很奇怪的事情,我有几个问题。如果比我更有经验的人能够回答,我将不胜感激。
这是我的流分析中的 SQL
SELECT
*
INTO
[my-data-lake]
FROM
[my-event-hub]
现在,对于问题:
- 我应该将 100% 的数据存储在一个文件中,尝试将其拆分为多个文件,还是尝试实现每个对象一个文件?流分析将所有数据存储在一个文件中,作为一个巨大的 JSON 数组。我尝试将{date}和{time}设置为变量,但它每天仍然是一个巨大的单个文件。
- 有没有办法强制流分析将事件中心的每个条目写入其自己的文件?或者限制文件的大小?
- 有没有办法设置流分析文件的名称?如果是这样,如果名称已经存在,是否有办法覆盖文件?
- 我还注意到该文件在创建后立即可用,并且是实时写入的,在某种程度上我可以在 download/display 文件时看到其中的数据截断。此外,在它完成之前,它不是有效的 JSON。如果我在写入数据湖文件时查询(通过 U-SQL)会发生什么情况?是不是聪明到忽略最后一个条目,或者将其理解为一个不完整的对象数组?
- 将 JSON 数据存储为数组或每个对象在新行中存储更好吗?
也许我对我的问题采取了错误的方法,但我在 Google 数据存储中有一个巨大的数据集(Google 没有SQL 解决方案)。我只能使用权限有限的帐户访问数据存储区。我需要将这些数据存储在数据湖中。因此,我制作了一个应用程序,将数据从 Datastore 流式传输到 Event Hub,这些数据由 Stream Analytics 摄取,后者在 Data Lake 中记下文件。这是我第一次使用这三种技术,但似乎是最好的解决方案。这是我对 ETL 混乱的首选替代方案。
不好意思提了这么多问题。我希望有人能帮助我。
提前致谢。
我只回答文件方面的问题:
生成较大的文件供以后处理通常比生成许多非常小的文件更好。鉴于您正在使用 JSON,我建议将文件的大小限制为您的 JSON 提取器能够在内存不足 运行 的情况下管理的大小(如果您决定使用 DOM 基于解析器).
我会把它留给 ASA 专家。
同上。
答案取决于 ASA 如何编写 JSON。客户端可以附加到文件,U-SQL 应该只能看到已添加到密封扩展区中的文件中的数据。因此,如果 ASA 确保范围与 JSON 文档的末尾对齐,您应该只会看到有效的 JSON 文档。如果没有,那么你可能会失败。
这取决于您计划如何处理数据。请注意,如果您将其作为数组的一部分编写,则必须等到数组为 "closed",否则您的 JSON 解析器很可能会失败。对于并行化和更多 "flexible",我可能每行得到一个 JSON 文档。