怎么把csv导入hive
时间: 2025-07-04 08:48:26 浏览: 15
### 将CSV文件导入Hive的方法和步骤
将CSV文件导入Hive表的过程可以分为以下几个部分,包括创建Hive表、配置表的分隔符以及加载数据。以下是详细的说明:
#### 1. 创建Hive表
在将CSV文件导入Hive之前,需要先在Hive中创建一个表来存储CSV文件中的数据。创建表时,需要指定字段分隔符为逗号(`,`),并根据实际需求选择是否使用`OpenCSVSerde`作为数据序列化程序[^2]。
```sql
CREATE TABLE ads.mem_continue_order_y (
member_id STRING COMMENT '会员号',
trans_info STRING COMMENT '消费订单-年汇总信息'
) COMMENT '会员连续下单_年_推送表'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'separatorChar' = ',', -- 分隔符
'quoteChar' = '"', -- 引号包围符号
'escapeChar' = '\\' -- 转义字符
)
TBLPROPERTIES("skip.header.line.count"="1"); -- 跳过文件首行(当CSV存在文件头的情况)
```
如果CSV文件没有头部信息,则可以省略`TBLPROPERTIES("skip.header.line.count"="1")`,或者通过Linux命令删除文件的第一行[^2]。
#### 2. 加载CSV文件数据到Hive表
加载CSV文件数据到Hive表可以通过`LOAD DATA`语句实现。以下是一个示例命令,假设CSV文件位于Linux本地路径`/home/bgyetl/etl/tmp/mem_continue_order_y.csv`[^2]。
```sql
LOAD DATA LOCAL INPATH '/home/bgyetl/etl/tmp/mem_continue_order_y.csv'
OVERWRITE INTO TABLE ads.mem_continue_order_y;
```
- `LOCAL INPATH`表示从本地文件系统加载数据。
- `OVERWRITE`表示覆盖目标表中的现有数据。如果不希望覆盖,可以省略此关键字。
#### 3. 使用Python脚本插入CSV文件数据
如果希望通过编程方式将CSV文件数据插入到Hive表中,可以使用Python结合`pyhive`库完成。以下是一个示例代码片段[^4]:
```python
from pyhive import presto
import pandas as pd
import os
# 连接Presto或Hive
conn = presto.connect(protocol='https', host='host.com', port=8443, username='username', password='password')
cursor = conn.cursor()
# 数据读取
wd = '/path/to/csv/files' # 修改为CSV文件所在目录
os.chdir(wd)
file_name = pd.read_csv("file.csv", header=None)
# 建表
sql = '''
CREATE TABLE IF NOT EXISTS table_name (
id BIGINT,
uid BIGINT,
order_id BIGINT,
aa VARCHAR(125),
bb BIGINT
) WITH (format = 'ORC')
'''
cursor.execute(sql)
cursor.fetchall()
# 插入数据
sql = 'INSERT INTO table_name VALUES '
for i in range(file_name.iloc[:, 0].size):
sql += str(tuple(file_name.iloc[i])) + ','
sql = sql[:-1]
cursor.execute(sql)
cursor.fetchall()
conn.commit()
```
#### 4. 处理特殊场景
在某些情况下,CSV文件可能包含嵌套的逗号或其他特殊字符。此时,可以使用`OpenCSVSerde`来正确解析这些字段,并通过`SERDEPROPERTIES`定义分隔符、引号字符和转义字符[^2]。
#### 注意事项
- 如果CSV文件较大,建议使用分布式文件系统(如HDFS)进行存储,而不是通过`LOCAL INPATH`加载。
- 确保CSV文件的编码格式与Hive表的设置一致,以避免乱码问题[^3]。
---
阅读全文
相关推荐

















