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

What is meant by "query data where it lives" with Presto?

我在 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 index and is really only accessible through Elasticsearch clients which derive from the Elasticsearch query DSL.

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 流程等...