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