gpt4 book ai didi

presto - Presto 的 "query data where it lives"是什么意思?

转载 作者:行者123 更新时间:2023-12-02 16:12:49 27 4
gpt4 key购买 nike

我在 Presto 教程上看到了这个,它说好处是“在数据存在的地方查询数据”。

这是什么意思?我喜欢与事物的传统 v. Presto 版本进行比较。

编辑:通过链接到主页上的引用来添加上下文

https://prestodb.io/在“它能做什么?”下

最佳答案

TL;DR:查询数据所在的位置是一种快速的表达方式,表明您无需将数据从其他数据库移动到一个数据库中即可对所有数据运行查询。换句话说,Presto 可以充当查询多个数据库的枢纽,并使用标准 ANSI SQL 对数据进行进一步处理。

我在上一家公司遇到的一个用例是,我们需要一种标准方法来访问 Elasticsearch 集群和数据湖 (Hive/HDFS) 中的数据,并将这两个数据源结合起来。唯一的区别是我们使用 Trino 而不是 Presto,因为 Trino is the fork that the creators of Presto now maintain .这些示例仍然适用于两者。

Elasticsearch 将数据存储在 Apache Lucene 中索引,实际上只能通过派生自 Elasticsearch query DSL 的 Elasticsearch 客户端访问.

Hive的数据通常以开放文件格式(ORC、JSON、AVRO 或 Parquet)存储,并驻留在像 HDFS 或 S3 云存储解决方案这样的分布式文件系统中。您可以通过 HiveQL 查询它,它有点像 SQL,但是是一种特殊的方言。

我们必须编写和维护大量代码才能与这两个系统交互,尤其是维护查询每个系统的模型。维护此代码并保持两个系统与正确查询来自每个系统的数据保持一致会产生无数问题和错误。例如,看看这个 Elasticsearch 查询与 HiveQL 等效查询。

curl -X POST "localhost:9200/my_table/_search?pretty" -H 'Content-Type:application/json' -d'
{
"query": {
"bool" : {
"must" : {
"term" : { "user_id" : "kimchy" }
},
"must_not" : {
"range" : {
"age" : { "gte" : 10, "lte" : 20 }
}
}
}
}
}
'

HiveQL 等价于上面的 Elasticsearch 查询。

SELECT * 
FROM my_table
WHERE user_id = "kimchy" AND NOT (age >= 10 AND age <= 20);

Trino 真正强大的地方在于,如果我想在每个系统中获取所有这些数据。我不仅可以只使用 SQL 访问这两个系统,而且我不必在系统之间移动这些数据来获得这个系统的答案。我可以运行以下查询。

SELECT * 
FROM hive.default.my_table
WHERE user_id = "kimchy" AND NOT (age >= 10 AND age <= 20)
UNION ALL
SELECT *
FROM elasticsearch.default.my_table
WHERE user_id = "kimchy" AND NOT (age >= 10 AND age <= 20);

现在,您可以跨两个系统生成相同的查询并将输出合并在一起,并且知道 Trino 会不断验证每个版本中所有不同连接器的正确性。这只是 Trino 解决的用例之一,并且能够替换许多 ETL 过程等......

关于presto - Presto 的 "query data where it lives"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67591269/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com