这是一个可以正常运行的示例创建表语句。
CREATE EXTERNAL TABLE default.reviews(
marketplace varchar(10),
customer_id varchar(15),
review_id varchar(15),
product_id varchar(25),
product_parent varchar(15),
product_title varchar(50),
star_rating int,
helpful_votes int,
total_votes int,
vine varchar(5),
verified_purchase varchar(5),
review_headline varchar(25),
review_body varchar(1024),
review_date date,
year int)
PARTITIONED BY (
product_category varchar(25))
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://amazon-reviews-pds/parquet/';
修复表时,出现错误:
MSCK修复表default.reviews
不在metastore中的分区:reviews:product_category =服装评论:product_category =汽车
如果该分区不在metastore中,我如何获得350万的计数?
SELECT
COUNT(*)
FROM
"default"."reviews"
WHERE
product_category='Automotive'
-- OUTPUT
3516476
如何确保所有记录都正确读取并可用?
此镶木地板分区表是如何创建的?我问是因为我有一个csv表,我希望以完全相同的方式进行分区。
答案 0 :(得分:1)
分区概念仅在Athena中用于限制应扫描哪些“目录”中的数据。
由于MSCK REPAIR TABLE
命令失败,因此未创建任何分区。因此,WHERE product_category='Automotive'
没有任何影响,我想说 3516476 是s3://amazon-reviews-pds/parquet/
下所有csv文件中的总行数。
请注意,MSCK REPAIR TABLE
仅在AWS S3上的“文件夹”结构遵守HIVE约定时才有效:
s3://amazon-reviews-pds/parquet/
|
├── product_category=Apparel
│ ├── file_1.csv
│ | ...
│ └── file_N.csv
|
├── product_category=Automotive
│ ├── file_1.csv
│ | ...
│ └── file_M.csv
为确保所有记录均正确读取,您必须确保表定义正确。
为了确保所有记录均可用,您必须确保LOCATION
指向根目录
所有文件在S3上的“目录”。
如果您有一个庞大的csv文件,其列为col_1, col_2, col_3, col_4
,并且您想按col_4
对其进行分区,
需要使用CTAS
查询语句,但是请记住
limitations的此类声明。
或者,如果您已经有多个csv文件,每个文件对应于col_4
中的单个值,则
只需按照上述方式将它们上传到S3。然后,您应该结合使用以下DDL语句:
-- FIRST STATMENT
CREATE EXTERNAL TABLE `my_database`.`my_table`(
`col_1` string,
`col_2` string,
`col_3` string,
)
PARTITIONED BY (
`col_4` string)
ROW FORMAT SERDE
-- CHANGE AS APPROPRIATE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
-- CHANGE AS APPROPRIATE
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
-- CHANGE AS APPROPRIATE
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
's3://amazon-reviews-pds/parquet/';
-- SECOND STATEMENT
MSCK REPAIR TABLE `my_database`.`my_table`