# hdfs外部表导出数据 本节通过一个简单的例子来说明如何使用hdfs外部表来导出数据。关于NULL值处理,分割符,换行符,转义字符以及编码的处理可以参考CREATE EXTERNAL TABLE的详细语法。 > - 准备导出的表 > - 定义外部表 > - 导出数据 ## 准备导出的表 假设我们有一个内部表expenses如下: ``` CREATE TABLE myexpenses(name text, date date, amount float4, category text, desc1 text); INSERT INTO myexpenses VALUES('john','2017-01-20',100.00,'travel','nothing'),('tom','2016-12-01',300,'taxi','nothing'); INSERT INTO myexpenses VALUES('marry','2017-01-21',1000.00,'travel','nothing'),('kurt','2016-12-02',800,'taxi','nothing'); ``` ``` etl=# select * from myexpenses; name | date | amount | category | desc1 -------+------------+--------+----------+--------- john | 2017-01-20 | 100 | travel | nothing tom | 2016-12-01 | 300 | taxi | nothing marry | 2017-01-21 | 1000 | travel | nothing kurt | 2016-12-02 | 800 | taxi | nothing (4 rows) ``` ## 定义(可写)外部表 可以使用下面的命令创建WRITABLE外部表,指定的location中如果路径名不存在,OushuDB 会自动为客户创建该目录。其中'nnhost'和'nnport'代表使用的Hadoop HDFS的namenode 主机地址和端口号: ``` CREATE WRITABLE EXTERNAL TABLE expense_out (LIKE myexpenses) LOCATION ('hdfs://nnhost:nnport/expense') FORMAT 'csv' ( DELIMITER '|' NULL ' '); ``` ### ORC外表 ``` CREATE WRITABLE EXTERNAL TABLE expense_out (LIKE myexpenses) LOCATION ('hdfs://nnhost:nnport/expense') FORMAT 'orc' options ("orc.write.format" '0.11', "orc.compress" 'lz4'); ``` * orc可写外表参数配置参考 [orc-core-config](https://orc.apache.org/docs/core-java-config.html) 以及 [hive-orc-config](https://orc.apache.org/docs/hive-config.html) ## 导出数据 下面这条语句可以很简单的导出数据到expense_out外部表。 ``` INSERT INTO expense_out select * from myexpenses; ``` 现在你可以查看/expense目录下已经产生了相应文件。