# 数据导入导出
数据导入导出是hwc-dws-cli的常用能力，支持将本地文件（CSV/JSON/Parquet）批量上传到DWS表、从DWS表或查询结果导出数据到本地文件，以及通过外表（OBS/HDFS）实现跨数据源导入导出。适用于数据初始化、批量迁移、数据采样等场景。
数据导入导出子命令说明如[表1]所示。
 表1**数据导入导出子命令** 
| 子命令                                                                                  | 说明                                                                                             |
|:---|:---|
| data upload --file \<f\> --table \<t\> \[--schema\] \[--format csv\\\|json\\\|parquet\] | 上传数据文件到表。支持批量 INSERT 与 DWS COPY FROM STDIN（--copy，高吞吐）两种模式；多线程（--threads）与块大小（--block-size）调优。 |
| data download --file \<f\> \[--table \\\| --query\] \[--format csv\\\|json\]          | 导出表数据或查询结果到 CSV / JSON 文件，支持行数 / 大小上限控制。                                                       |
| data show --table \<t\> \[--limit N\]                                                | 查看表样例数据。                                                                                        |
| data purge --table \<t\> \[--schema\]                                                | 清空表（TRUNCATE，**需 --confirm-dangerous**）。                                                       |
| data resume --task-id \<id\>                                                         | 恢复暂停的数据传输会话（断点续传）。                                                                             |
| data foreign create                                                                    | 创建外表（OBS / HDFS），自动生成 DISTRIBUTE BY，预校验 format×mode 约束。                                         |
| data foreign import                                                                    | 从外表导入数据到本地表（INSERT INTO ... SELECT）                                                           |
| data foreign export                                                                   | 将本地表数据导出到外表。                                                                                   |
   
**上传模式说明：**
- **批量INSERT模式（默认）：** 逐行拼接INSERT语句提交，适合中小数据量。通过 --threads 指定并发线程数提升吞吐。
- **COPY高性能模式（--copy）：** 使用DWS原生COPY FROM STDIN协议，批量流式写入，吞吐量显著高于INSERT模式，适合大数据量导入。可通过 --copy-options 传递delimiter、null、encoding等COPY选项。
- **断点续传：** 大文件传输中断后，可使用 data resume --task-id \<id\> 恢复传输会话，避免从头重传。
```
# 上传（默认 csv，batch INSERT）
hwc-dws-cli data upload --file data.csv --table fact_sales --schema dwd  
# 上传（parquet 格式，多线程）
hwc-dws-cli data upload --file data.parquet --table fact_sales --format parquet --threads 8  
# 上传（COPY 高性能模式，自定义选项）
hwc-dws-cli data upload --file big.csv --table fact --copy --copy-options "delimiter=|,null=\\N" 
# 下载（按表 / 按查询）
hwc-dws-cli data download --table fact_sales --file out.csv 
hwc-dws-cli data download --query "SELECT * FROM fact_sales WHERE day='2026-10-01'" --file out.json --format json 
hwc-dws-cli data download --table fact_sales --file head.csv --max-record 1000 --max-size 10485760
```
DWS外表操作
```
# 创建外表（OBS，自动 DISTRIBUTE BY）
hwc-dws-cli data foreign create --table ext_sales --server obs_server \
  --type obs --columns "id:bigint,name:varchar(100),amt:numeric(10,2)" \
  --format csv --foldername "obs://bucket/data" --schema dwd
# 预览外表 DDL（不执行）
hwc-dws-cli data foreign create --table ext_sales --server obs_server --type obs \
  --columns "id:bigint" --format orc --foldername "obs://bucket/data" --dry-run
# 外表导入 / 导出
hwc-dws-cli data foreign import --foreign-table ext_sales --local-table fact_sales --schema dwd
hwc-dws-cli data foreign export --local-table fact_sales --foreign-table ext_sales --schema dwd
```
