问题标签 [data-ingestion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 找不到类 'org.apache.hadoop.hive.druid.DruidStorageHandler'
druid hive handler 的 jar 文件在那里。客户表已经存在于配置单元中,其中包含数据。配置单元库文件夹中的文件名hive-druid-handler-3.1.2.jar
。
当我尝试在 hive 中为德鲁伊创建表时出现错误
这是SQL。
可能是什么原因 ?
shared-memory - 在 Cloud Run 中将共享缓存对象存储在哪里?
我正在使用 Cloud Run 创建数据提取管道。每次通过 Pub Sub 将文件放入 GCS 存储桶时,都会调用我的 Cloud Run api。我需要加载一些元数据,其中包含我正在摄取的数据的文本。此元数据很少更改。我显然不想在每次执行时将它重新加载到内存中。我最好的选择是什么?到目前为止,我能够研究的是:
选项1
如果在每个服务请求上重新创建对象的成本很高,您也可以将对象缓存在内存中。将其从请求逻辑转移到全局范围会带来更好的性能。 https://cloud.google.com/run/docs/tips#run_tips_global_scope-java
在此链接给出的示例中,是否仅在冷启动时调用了一次重计算函数?如果我需要在元数据更新时偶尔重新触发此功能怎么办。我还发现以下信息令人不安,因为它似乎说不能保证其他实例会重用该对象。
在 Cloud Run 中,您不能假设在请求之间保留服务状态。但是,Cloud Run 确实会重用单个容器实例来服务持续的流量,因此您可以在全局范围内声明一个变量,以允许在后续调用中重用其值。无法提前知道任何单个请求是否会从这种重用中受益。
选项 2
使用 Redis 或 Cloud Memory Store 之类的东西,只要有更改,就会由云功能更新。并且所有的云运行 api 实例都从 Redis 中拉取元数据信息。这会比选项 1 性能更低还是更高?这还有其他不利方面吗?
如果还有其他更好的方法可以做到这一点,我会非常感兴趣。
更新 1:我想了更多,因为我的元数据对于每个租户都是不同的,而且我的云运行代码的每次调用都会为一个租户摄取一个文件,加载所有租户是个坏主意每次执行时的元数据,即使它被缓存。不过,我可能会在每个租户的项目中运行单独的云运行。
performance - 从 S3 到 Snowflake 和性能
我有大量的事件以小型 JSON 文件的形式存储在 S3 中。现在我需要使用 Snowpipes 将这些文件摄取到 Snowflake 中。发送到 Snowflake 的请求数量是否存在性能问题?我应该将这些小文件合并成一个更大的 JSON,然后让 Snowflake 摄取它吗?
我知道 Snowflake 可以自动检测 S3 上的更改并尝试刷新其外部表,但我是否应该让小文件不断触发这个过程?
postgresql - 具有外键约束的关系数据库如何摄取可能顺序错误的数据?
数据库正在从流中提取数据,满足外键约束所需的所有行可能会延迟或永远不会到达。
这可以通过使用另一个数据存储来完成,一个没有外键约束的数据存储,然后当所有需要的数据都可用时,读入具有 fk 约束的数据库。但是,这增加了复杂性,我想避免它。
我们正在研究一种创建“占位符”行以将外键指向的解决方案。当真实数据进来时,占位符被替换为真实值。同样,这增加了复杂性,但这是迄今为止我们找到的最佳解决方案。
人们通常如何解决这个问题?
编辑:一些可能有助于解释问题的示例数据:
假设我们有这些表:
如果我先下单,没问题!但是,假设我尝试:
INSERT INTO line_item (order_number) values (123)
在插入订单 123 之前。这当然会使 fk 约束失败。但这可能是我获取数据的顺序,因为它是从从多个来源收集这些数据的流中读取的。
另外,为了解决@philpxy 的问题,我对此并没有真正找到太多。提到的一件事是延迟约束。这是一种在事务结束时等待执行 fk 约束的机制。但是,我认为在我的情况下不可能这样做,因为这些插入语句将在收到数据时随机运行。
apache-kafka - 将数百万物联网设备中的数据提取到 kafka 主题的最佳工具/技术
任何人都可以建议将数百万条消息从 IOT 设备(传感器/移动设备等)摄取到我服务器中的 kafka 主题的最佳方法吗?最佳成本、可扩展性和吞吐量。Kafka 集群托管在 AWS 中。
我们尝试了 devices -> ALB -> NiFi -> Kafka , devices -> ALB -> GO Lang -> Kafka
还有其他更好的架构吗?
谢谢 MH
amazon-kinesis - 适用于 Web 应用程序的 Kinesis 生产者
我在玩 Kinesis 数据流,想知道 Web 应用程序或移动应用程序如何将事件发送到 Kinesis 数据流。一种方法是设置一个基于 java spring 的端点,Web 应用程序或移动应用程序将发布到该端点,并且服务器将使用 KPL 聚合/收集记录。另一种是将事件发布到像 sqs 或数据库这样的中间存储,然后通过 lambda 将它们发送到 kinesis 数据流。但在这两种情况下,我觉得中间步骤减少了数据流的“实时”本质。有人对这种情况有任何想法/经验吗?
r - 如何将结构松散的文本文件中的表格读入 R 中的数据框中?
查看此 NOAA 网页上的“估计的全球趋势每日值”文件。它是一个.txt
包含 50 个标题行(用前导#
s 标识)后跟数千行表格数据的文件。下载文件的链接嵌入在下面的代码中。
我怎样才能读取这个文件,以便我最终得到一个具有适当列名和数据的数据框(或小标题)?
我所知道的所有文本到数据的功能都被这些标题行所阻碍。这是我刚刚尝试过的,从这个 SO Q&A中抽离出来。#
我的想法是将文件读入行列表,然后从列表中删除以开头的行,然后删除do.call(rbind, ...)
其余行。顶部的下载部分工作正常,但是当我运行该函数时,我得到一个空列表。
apache-spark - 将大型机 IMS 数据摄取到 Hadoop
我正在尝试将 IMS 大型机数据引入 Hadoop。想知道是否有可能通过以下任何 a)Apache Spark 或 MapReduce 作业。b) 任何其他工具/技术。
主要目标是我们希望每天/每周摄取 IMS 大型机数据,这些数据将按计划运行
google-cloud-platform - 使用 Google Cloud 被动地摄取批处理数据(客户端推送)的好方法是什么?
我正在我的公司实施我的第一个“自动化”数据摄取管道。我们的客户不想让我们在他们的数据库中进行任何调用(甚至创建副本等)。到目前为止,我认为最好的解决方案是端点(让他们将数据推送到存储中),这样我们就可以使用它并继续所有的数据科学过程。我的云提供商是 Google Cloud,我的客户使用 MySQL 服务器。
我一直在网上阅读许多主题,并访问了以下链接:
Google Cloud Data Lifecycle - 对于批处理,它谈到了 Cloud Storage、Cloud Transfer Appliance、Transfer Appliance
签名 URL - 这些 URL 是有时间限制的资源,用于访问(例如,Google Cloud Storage)并将数据写入其中。
我的简单解决方案是用户签名 URL -> 云存储 -> 数据流 -> BigQuery。这是一个好方法吗?
总而言之,我正在寻求有关最佳实践的建议以及让用户在 GCP 中插入数据而不暴露他的数据或我的基础架构的可能方法。
禁忌:
- 客户端将定期发送数据(每天一次摄取)
- 数据是半结构化的(我将创建和内部管道进行转换)
- 预处理后,数据必须发送到 BigQuery
snowflake-cloud-data-platform - 使用 Snowpipe - 加载小文件的最佳做法是什么。例如。每天数千个 4K 文件?
问题
使用 Snowpipe 加载小文件(例如 4K)比 16K、500K 或 1-10Mb(推荐的文件大小)要贵多少。注意:这个问题意味着加载小文件比推荐的 1-10Mb 更昂贵。
了解最佳实践是加载大小为 1-10Mb 的文件,但我需要近乎实时的交付(几分钟)。我可以连接文件以使它们更大,但不能等待超过 60 秒才能将微批处理发送到 S3 并因此发送到 Snowpipe。我目前每 30 秒写一次我所有的内容,但我每 60 秒看到一次 Snowpipe 报告。这是否意味着将文件写入 S3 的频率超过 60 秒是没有意义的?IE。如果我每 30 秒发送一次文件,它实际上会减少平均延迟,或者是 60 秒的最小雪管周期。
加载 4K 文件(每天大约 200Mb,每个文件 4K),每 GB 大约需要 20 个积分,这非常昂贵。如果我加载(例如)1-10Mb 范围内的 CSV 文件,使用 Snowpipe 时每 GB 的成本应该是多少?如果我保持在 1-10Mb 范围内,每 GB 的成本会下降吗?
有没有更快/更便宜的替代方法将数据输入雪花?注意:目前使用 Parquet 格式的 Snowpipe 到 VARIANT,然后使用 STREAMS 和 TASKS 重构数据以进行近乎实时的分析。了解使用 Snowpipe 比使用虚拟仓库更便宜。这是真的?我怀疑真正的答案是“这取决于”。但是“取决于什么”。
除了我的近实时要求外,我还有许多系统提供批量提要(CSV 格式,大约每 4 小时一次,预计延迟在 30 分钟内处理和呈现以供分析。文件大小在此处有所不同,但大多数为 1Mb到 1Gb 范围。我应该使用相同的 Snowpipe 解决方案,还是我最好从 Airflow 编排工作并在专用虚拟仓库上使用 COPY 命令和 SQL 语句?或者实际上,您会推荐什么替代方案?
我可以看到 Snowpipe 加载 4K 文件很昂贵,而且可能比更大的文件便宜。如果我加载超过 10Mb 的文件,这些文件会再次变得更加昂贵吗?IE。成本是“钟形曲线”还是趋于平缓。
背景
- 我正在使用 Snowpipe 提供近乎实时 (NRT) 的数据加载解决方案。
- 我大约每 30 秒从大约 30 个表中将数据从 Kafka 复制到 S3,并且使用 Snowpipe 自动将其加载到 Snowflake。
- 数据以 Parqet 格式传递给我,加载到 Variant 中,然后是一个视图以将属性提取到表中,然后再使用 Tasks 和 SQL 进行重组以进行分析。
- 在一天之内,我发现加载了 50,000 个文件,文件大小各不相同,但每个文件的平均文件大小为 4K。
- 我可以看到每分钟加载大约 30 个文件(即每分钟加载大约 100K)。
- 我正在尝试平衡几个非功能性需求。a) 有效使用积分。意识到小文件很昂贵。b)减少延迟(我试图从 Kafka 到仪表板的管道最长大约 2-5 分钟)。c) 简单 - IE。它需要易于理解和维护,因为我希望解决方案能够大规模增长 - IE。从大约 20 张桌子到数百张桌子 - 都需要近乎实时
- 我将(在接下来的 3 个月内)每 4 小时进行一次 CSV 批量加载。它们是完全独立的数据源(来自 NRT),并且具有更密集的处理和 ELT。我想知道我是否应该为这些使用 Snowpipe 或 COPY。