On this page
Import/Export
Version
Overview
EXPORT
命令将表或分区的数据以及元数据导出到指定的输出位置。然后可以将此输出位置移至另一个 Hadoop 或 Hive 实例,并使用IMPORT
命令从该位置导入。
导出分区表时,原始数据可能位于不同的 HDFS 位置。还支持导出/导入分区子集的功能。
导出的元数据存储在目标目录中,数据文件存储在子目录中。
EXPORT
和IMPORT
命令独立于所使用的源和目标元存储 DBMS 起作用;例如,它们可以在 Derby 和 MySQL 数据库之间使用。
IMPORT
将创建目标表/分区(如果不存在)。所有表的属性/参数都将与在EXPORT
中用于生成存档的表的属性/参数相同。如果目标存在,则检查它是否具有适当的架构,Input/OutputFormat 等。如果目标表存在且未分区,则它必须为空。如果目标表存在并已分区,则表中不得存在要导入的分区。
Export Syntax
EXPORT TABLE tablename [PARTITION (part_column="value"[, ...])]
TO 'export_target_path' [ FOR replication('eventid') ]
Import Syntax
IMPORT [[EXTERNAL] TABLE new_or_original_tablename [PARTITION (part_column="value"[, ...])]]
FROM 'source_path'
[LOCATION 'import_target_path']
Replication usage
当在复制上下文中使用EXPORT
和IMPORT
命令时,它们的行为略有不同,旨在供在配置单元仓库之间执行复制的工具使用。在大多数情况下,最终用户将不需要使用此附加标签,除非对复制目标仓库进行手动引导,以便增量复制工具可以接管该点。
它们利用表或分区中的特殊表属性“ repl.last.id”(取决于要复制的对象)来确保复制导出/导入仅在更新比更新时才更新对象。它影响的对象。在导出端,它用一个在源仓库上单调递增的 id 标记复制导出转储(每次修改源仓库 metastore 时递增)。另外,标记为复制的导出如果尝试导出当前不存在的对象,则不会导致错误。 (这是因为在一般的复制流程中,很有可能在事件被外部工具作用以进行复制时,有可能该对象已被删除,因此不应停止复制管道.)
在导入方面,没有语法更改,但是导入是在使用 FOR REPLICATION 标记生成的导出转储上运行的,它将检查要复制到的对象是否存在。如果该对象已经存在,它将检查该对象的 repl.last.id 属性,以确定所导入的内容是否比目标仓库中该对象的当前状态新。如果更新是较新的,则它将用较新的信息替换对象。如果更新早于已存在的对象,则更新将被忽略,并且不会导致任何错误。
对于首次使用 EXPORT 进行手动引导的用例,建议用户使用“ FOR 复制('bootstrapping')”标记。 (高级用户注意:这里的“ bootstrapping”选择是任意的,也可能是“ foo”.true 的目标是拥有一个值,使得所有进一步的增量复制 id 都将大于此原始 id.因此,此初始 ID 的整数值应为 0,因此,任何不包含数字的字符串都是可以接受的,但是将初始标签设为“ 123456”会很不好,因为它可能导致进一步的更新, repl.last.id <123456 将不适用.)
Examples
简单的导出和导入:
export table department to 'hdfs_exports_location/department';
import from 'hdfs_exports_location/department';
在导入时重命名表:
export table department to 'hdfs_exports_location/department';
import table imported_dept from 'hdfs_exports_location/department';
导出分区和导入:
export table employee partition (emp_country="in", emp_state="ka") to 'hdfs_exports_location/employee';
import from 'hdfs_exports_location/employee';
导出表和导入分区:
export table employee to 'hdfs_exports_location/employee';
import table employee partition (emp_country="us", emp_state="tn") from 'hdfs_exports_location/employee';
指定导入位置:
export table department to 'hdfs_exports_location/department';
import table department from 'hdfs_exports_location/department'
location 'import_target_location/department';
导入为外部表:
export table department to 'hdfs_exports_location/department';
import external table department from 'hdfs_exports_location/department';