我需要创建一个具有特定条件的表,该条件可以在桶更新时更新。下面是一个示例:
CREATE EXTERNAL TABLE IF NOT EXISTS `default`.`cards-test` (
`id` bigint,
`created_at` timestamp,
`type` string,
`account_id` bigint,
`last_4_digits` string,
`is_active` boolean,
`status` string,
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://something/cards-bucket/'
TBLPROPERTIES ('classification' = 'parquet');
现在,假设我想要一个WHERE子句,说WHERE type = 'type_1'
,我能在这里插入这个吗?如果有,在哪里?
如果没有,我应该如何从桶中创建一个具有这些特定条件的表?
不可以,因为doc显示了CREATE TABLE
的语法—没有提供过滤数据的选项。
你能做的-通过CREATE TABLE AS
语法创建另一个表,并应用过滤:
CREATE TABLE cards-test-type_1 WITH (
...
) AS
SELECT
*
FROM
cards-test
WHERE type = 'type_1'
或者创建一个视图:
从指定的SELECT查询创建一个新视图。视图是一个逻辑表,以后的查询可以引用它。视图不包含任何数据,也不写数据。相反,视图指定的查询在每次通过另一个查询引用视图时运行。
CREATE VIEW cards-test-type_1 AS
SELECT
*
FROM
cards-test
WHERE type = 'type_1'