【问题标题】:Select binary data from Parquet using Drill使用 Drill 从 Parquet 中选择二进制数据
【发布时间】:2018-10-01 16:58:25
【问题描述】:

我有一个镶木地板数据集,其中保存了一个字节数组。

我正在使用 Apache Drill 来查询数据集:

SELECT id, x, y FROM `dfs.root`.`./data`

这给了我:

+--------------------------------------+-------------+-------------+
|                  ID                  |      X      |      Y      |
+--------------------------------------+-------------+-------------+
| 0A3D27D8-DEC5-54D6-6A8E-8FD5CF721E1C | [B@654e7f63 | [B@39a668e8 |
+--------------------------------------+-------------+-------------+

使用 PyDrill 查询时,如何将 binary object ID 转换为实际的 Python byte_array?

【问题讨论】:

  • STRING_BINARY 或一些 CONVERT_FROM 函数可以帮助你。但要确切知道,请详细说明。有几种 parquet 字节数组数据类型:binary 和 fixed_len_byte_array。为了正确解释它们,它们通常用逻辑数据类型标记。许多不同的数据类型可以表示为字节数组。您的情况是哪种逻辑数据类型?您能否使用 parquet-tools 提供 parquet 文件的架构?原始数据是什么(int、string、decimal、date)?

标签: python parquet apache-drill pydrill


【解决方案1】:
SELECT id, CONVERT_FROM(x, 'UTF8') as x, CONVERT_FROM(y, 'UTF8') as y FROM `dfs.root`.`./data`

您可以在 Apache Drill 文档中找到此信息:
https://drill.apache.org/docs/data-type-conversion/#convert_to-and-convert_from

我想你的意思是fixed_len_byte_array。它是一种原始 Parquet 数据类型。它可用于INTERVAL 和DECIMAL 逻辑数据类型。看起来Drill开箱即用地支持它们。如果您没有为 fixed_len_byte_array 指定逻辑数据类型,则不清楚如何解释此数据。

【讨论】:

  • 这不起作用,我没有将数据编码为“UTF8”字符串。这是一个普通的字节数组,我想要字节。 ` [B@654e7f63` 表示的实际二进制文件。此查询返回给我:“�]q(}q(M��M�M��KM��KM��KM��KM��KM��K”
  • 我已在答案中添加了信息。请提供 parquet-tools 的架构信息以确保。 github.com/apache/parquet-mr/tree/master/…
  • 它不是一个固定字节数组,它是一个可变字节数组:github.com/apache/drill/blob/master/common/src/main/java/org/… parquet 不是无效的,fast parquet 将字节数组返回为 ..well bytes
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多