Impala Parquet 表 分区表

本文介绍如何使用 Impala 创建 Parquet 分区表并进行数据插入与查询操作,对比了 Parquet 分区表与普通表在数据加载速度上的表现。
1、Impala Parquet 表 分区表


#parquet表
[hadoop02:21000] > create table parquet_ex_sms_event LIKE i_bil_hb_d.ex_sms_event stored as parquet;    
Query: create table parquet_ex_sms_event LIKE i_bil_hb_d.ex_sms_event stored as parquet


[hadoop02:21000] > insert overwrite table parquet_ex_sms_event partition(date_no,area_code) select * from i_bil_hb_d.ex_sms_event where date_no=20141212 and area_code=0691;                  
    Query: insert overwrite table parquet_ex_sms_event partition(date_no,area_code) select * from i_bil_hb_d.ex_sms_event where date_no=20141212 and area_code=0691


    [hadoop02:21000] > select count(*) from parquet_ex_sms_event;
Query: select count(*) from parquet_ex_sms_event
+----------+
| count(*) |
+----------+
| 278678   |
+----------+
Fetched 1 row(s) in 0.58s


#普通表
[hadoop02:21000] > create table default_ex_sms_event as select * from i_bil_hb_d.ex_sms_event where date_no=20141212 and area_code=0691;
Query: create table default_ex_sms_event as select * from i_bil_hb_d.ex_sms_event where date_no=20141212 and area_code=0691
+------------------------+
| summary                |
+------------------------+
| Inserted 278678 row(s) |
+------------------------+
Fetched 1 row(s) in 6.19s
[hadoop02:21000] > select count(*) from default_ex_sms_event;                                                            
Query: select count(*) from default_ex_sms_event
+----------+
| count(*) |
+----------+
| 278678   |
+----------+
Fetched 1 row(s) in 0.61s
<think>我们正在讨论如何在Impala创建名为"defect"的空间。但需要澄清的是:在Impala/Hive中,实际上并没有"空间"这一概念。Impala中主要的结构层次是: 数据库(Database) → (Table) → 分区(Partition)/分桶(Bucket) 用户可能想创建的是: (1) 一个名为defect的数据库(Database) 或 (2) 一个名为defect的(Table) 由于问题中明确提到“空间”,而Impala中没有空间,最接近的概念是数据库(Database),因此我们默认用户是想创建一个名为defect的数据库。 ### 创建数据库 在Impala创建数据库的命令与标准SQL类似: ```sql CREATE DATABASE IF NOT EXISTS defect; ``` - `IF NOT EXISTS`:可选,避免重复创建时出错 - 数据库创建后,可以使用`USE defect;`切换到该数据库 ### 创建 如果用户实际是想在某个数据库中创建名为“defect”的,则步骤为: 1. 选择数据库(假设数据库名为`mydb`): ```sql USE mydb; ``` 2. 创建(示例结构,实际字段需用户定义): ```sql CREATE TABLE IF NOT EXISTS defect ( id INT, description STRING, severity STRING, created TIMESTAMP ) STORED AS PARQUET; -- 指定存储格式(常用Parquet) ``` ### 分区表 如果数据量大,通常需要按日期等字段分区: ```sql CREATE TABLE defect_partitioned ( id INT, description STRING, severity STRING ) PARTITIONED BY (created_date STRING) -- 分区字段 STORED AS PARQUET; ``` ### 注意事项 1. **数据库位置**:默认数据库存储在HDFS的`/user/hive/warehouse/`下,可通过`LOCATION`自定义: ```sql CREATE DATABASE defect LOCATION '/data/defect_db'; ``` 2. **注释**:建议添加注释说明: ```sql CREATE TABLE defect (...) COMMENT '产品缺陷记录' ``` 3. **权限控制**:Impala集成Ranger/Sentry进行权限管理,创建后需授权: ```sql GRANT ALL ON DATABASE defect TO USER analytics_team; ``` ### 验证操作 - 查看数据库列:`SHOW DATABASES;` - 查看:`SHOW TABLES IN defect;` - 查看结构:`DESCRIBE defect;` --- §§相关问题§§ 1. 如何在Impala中为defect添加分区? 2. Impala数据库的默认存储路径是什么? 3. 如何将数据从HDFS加载到Impala? 4. Impala支持哪些文件存储格式? </think>在 Impala创建空间(实际指数据库或)的正确方法如下,需要特别注意 Impala 的架构特点: ### 一、核心概念澄清 1. **Impala 没有"空间"概念** - 传统数据库的空间(Tablespace)在 Impala/Hadoop 生态中**不存在** - 最接近的概念是**数据库(Database)** 或 **(Table)** - 创建语句应使用 `CREATE DATABASE` 或 `CREATE TABLE` 2. **存储层级关系**(从高到低): ``` 集群 → Catalog 服务 → 数据库(Database) → (Table) → 分区(Partition) ``` ### 二、创建数据库(最接近空间) ```sql -- 创建名为 defect 的数据库 CREATE DATABASE IF NOT EXISTS defect COMMENT '缺陷管理数据库' LOCATION '/user/hive/warehouse/defect.db'; -- 自定义HDFS路径 ``` **关键参数**: | 参数 | 说明 | 示例值 | |------|------|--------| | `LOCATION` | HDFS存储路径 | `/data/defect` | | `COMMENT` | 描述信息 | `'产品缺陷数据库'` | | `WITH DBPROPERTIES` | 元数据属性 | `('creator'='admin')` | ### 三、创建(defect ) ```sql USE defect; -- 切换到defect数据库 CREATE TABLE IF NOT EXISTS defect_records ( id BIGINT COMMENT '缺陷ID', product_name STRING COMMENT '产品名称', severity TINYINT COMMENT '严重级别 1-5', created TIMESTAMP COMMENT '创建时间' ) PARTITIONED BY (log_date DATE) -- 按日期分区 STORED AS PARQUET -- 列式存储格式 TBLPROPERTIES ('parquet.compression'='SNAPPY'); -- 压缩设置 ``` ### 四、分区管理(优化查询) ```sql -- 添加新分区 ALTER TABLE defect_records ADD PARTITION (log_date='2023-10-01'); -- 查看分区 SHOW PARTITIONS defect_records; ``` ### 五、验证步骤 1. 确认数据库创建: ```sql SHOW DATABASES LIKE 'defect'; -- 应返回defect ``` 2. 检查结构: ```sql DESCRIBE FORMATTED defect_records; -- 显示详细元数据 ``` ### 六、注意事项 1. **存储位置**: - 默认路径:`/user/hive/warehouse/<数据库名>.db` - 自定义路径需确保 Impala 有 HDFS 写入权限 2. **元数据同步**: ```sql -- 结构变更后执行 INVALIDATE METADATA defect_records; -- 元数据刷新[^4] ``` 3. **最佳实践**: - 使用 Parquet/ORC 列式存储格式 - 按时间字段分区提升查询性能 - 设置合理的数据压缩(Snappy/Zlib) > **重要**:在 Hadoop 生态中,数据库本质是 HDFS 上的目录,对应子目录,这是与传统数据库的关键区别[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值