使用impala-shell导入导出数据

本文介绍如何使用Impala进行数据的导出与导入操作,包括导出数据到CSV和Excel,以及通过Hadoop上传文件并创建临时表导入数据的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(tip:将select * from sq_dim_city,替换为需要导出的查询sql即可,分割符号可以自选)


参数说明:
  • -q query (--query=query) 从命令行执行查询,不进入impala-shell
  • -d default_db (--database=default_db) 指定数据库
  • -B(--delimited)去格式化输出
  • --output_delimiter=character 指定分隔符
  • --print_header 打印列名
  • -f query_file(--query_file=query_file)执行查询文件,以分号分隔
  • -o filename (--output_file filename) 结果输出到指定文件1、导出

1.1 导出结果到csv
impala-shell -q "select id,price,name,dtime from config.price_test limit 3" -B --output_delimiter="," --print_header -o /var/testimpalaout.csv

1.2 导出结果到excle
impala-shell -q "select id,price,name,dtime from config.price_test limit 3" -B --output_delimiter="\t" --print_header -o /var/testimpalaout.xlsx
 

2、导入
2.1 hadoop创建文件夹
hadoop fs -mkdir /tmp/dim_city

2.2 本地文件上传hadoop
hadoop fs -put /var/testimpalaout.csv /tmp/dim_city

2.3 创建临时表(无分区,普通文本表)
impala-shell ,进入impala-shell数据库,(分隔符,自定义)

CREATE TABLE config.dim_city_ls (                                         
  p_code  VARCHAR(200),                                                               
  p_name  VARCHAR(200),                                                         
  c_code  VARCHAR(200),                                                    
  c_name VARCHAR(200)                                                       

row format delimited fields terminated by ','
location '/tmp/dim_city';

2.4 导入分区表
INSERT INTO config.dim_city PARTITION(DAY = 20170701, MINUTE = cast('0000' as char(4)) ) 
SELECT 
  p_code,
  p_name,
  c_code,
  c_name
FROM
  config.dim_city_ls

2.5 删除临时表
drop table config.dim_city_ls;

### 将数据从 Oracle 数据库快速导出并导入到 MySQL #### 使用命令行工具和脚本自动化流程 为了高效地完成这一过程,可以采用组合使用 `expdp` 和 `impala-shell` 或者更现代的方式通过编程接口如 Python 的 SQLAlchemy 库配合 Pandas 来处理。然而,在这里主要介绍一种较为传统但稳定可靠的方法——利用 SQL 脚本与命令行工具相结合。 对于直接由 `.dmp` 文件转换的情况: - 需要先将 .dmp 文件中的对象定义(比如表结构)提取出来,并调整这些 DDL (Data Definition Language) 语句使其适应 MySQL 的语法要求[^3]。 ```sql -- 假设这是经过修改后的MySQL版本创建表格的例子 CREATE TABLE IF NOT EXISTS my_table ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` 接着针对实际的数据迁移部,则可以通过如下几种方式之一来进行: 1. **借助中间件软件** 利用专业的 ETL 工具像 Talend Open Studio、Pentaho Data Integration 等,它们能够简化跨平台间复杂的数据映射关系以及批量加载工作;或者按照描述中提到的 Navicat 这样的图形界面应用程序也十方便快捷[^2]。 2. **编写自定义程序读取 dmp 并写入 MySQL** 如果希望更加灵活控制整个转移过程的话,也可以考虑开发一段简单的应用来解析 dump 文件内容再逐条记录插入目标数据库里去。Python 是非常适合做这类任务的语言选项因为它拥有丰富的第三方模块支持各种类型的数据库连接操作。 3. **基于命令行的操作** 对于熟悉 Linux/Unix Shell 编程的人来说,还可以尝试构建 shell script 自动化上述两步动作。具体来说就是调用 expdp 导出特定模式下的所有用户对象为文本形式保存下来之后再经 sed/gawk 等工具加工成为适合 mysqlimport 实用程序识别的标准输入流格式最后实施大批量录入作业。 4. **在线服务或云解决方案** 当今很多云计算服务商都提供了便捷的服务帮助用户轻松实现不同 RDBMS 之间的无缝切换,例如 AWS Database Migration Service(AWS DMS),它允许设置源端点(Source Endpoint)指向本地部署好的 Oracle Instance 同时指定目的位置(Target Endpoint)为我们想要迁移到的目标实例即此处所说的 MySQL Server. 综上所述,虽然存在多种途径可供选择取决于个人偏好和技术栈的不同,但从效率角度来看推荐优先评估是否有条件选用成熟的商业级产品或是公共云平台上提供的专门用于解决此类场景的功能特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值