用多个实木复合地板创建配置单元

时间:2020-08-29 03:22:15

标签: scala hive parquet

我有一个拼花文件夹,其名称为“ yearquarter”,始于(2007q1-2020q3)。我正在创建的配置单元表应该仅提取2014q1到2020q2之间的数据。我该如何实现?

1 个答案:

答案 0 :(得分:0)

您必须更改镶木地板文件夹名称,并向其添加前缀,例如yearquarter=2001q1,例如,它指示存储这些值的列,因此它位于顶层文件夹(名称为table_name)。

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

基于配置单元的解决方案:

然后,您将创建一个external配置单元表,该单元表位于顶层文件夹中。您选择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将提供所需的范围。

基于火花的解决方案:

您创建一个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)