【问题标题】:Creating hive with multiple parquets用多个镶木地板创建蜂巢
【发布时间】:2020-08-29 03:22:15
【问题描述】:

从 (2007q1 - 2020q3) 开始,我有名为“yearquarter”的镶木地板文件夹。我正在创建的配置单元表应仅从 2014q1 到 2020q2 提取数据。我如何做到这一点?

【问题讨论】:

  • 这是 hive 问题还是 scala spark 问题?

标签: scala hive parquet


【解决方案1】:

您必须更改 parquet 文件夹名称并为其添加前缀,例如 yearquarter=2001q1(例如),它指示存储这些值的列,因此它位于顶级文件夹下的层次结构中(名为 @987654322 @ 下面)。

table_name
|
 - yearquarter=2001q1
 - yearquarter=2001q2
  .
  .
 - yearquarter=2020q3

基于 Hive 的解决方案:

然后,您将创建一个位于顶级文件夹的external hive 表。您选择external,以便设置位置。表架构应与文件中的列标签相对应。

CREATE EXTERNAL TABLE TABLE_NAME (
   col_name1 HIVE_TYPE, 
   ..., 
   col_nameN HIVE_TYPE)
PARTITIONED BY (yearquarter STRING)
STORED AS PARQUET
LOCATION '/location/to/your/table_name';

在您的文件夹层次结构上有一个按文件夹分区的配置单元表后,您可以创建一个配置单元视图,它使用 WHERE 子句到 SELECT 子集。

CREATE VIEW view_name 
AS SELECT * 
FROM table_name 
WHERE yearquarter >= "2014q1" AND yearquarter <= "2020q2";

从此视图执行SELECT 将提供所需的范围。

基于 Spark 的解决方案:

您创建一个读取顶级位置的DataFrame。因为您存储了像yearquarter=2001q1 这样的层次结构,所以这些值会自动读入标记为yearquarter 的列中。

// Read parquet hierarchy. The schema (if present) is automatically detected.
val df = spark.read.parquet("/location/to/your/table_name")

// Set filter condition to use.
val filterCondition = col("yearquarter") >= "2014q1" && col("yearquarter") <= "2020q2"

// Filter according to condition.
val filtered = df.filter(filterCondition)

【讨论】:

    猜你喜欢
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多