最快的方式 将本地文件作为外部表来入库
1,source /usr/local/hawq/greenplum_path.sh
或者直接把上面一行写入到 /etc/profile 里面,这样不用每次都敲 source 命令了。
2,需要单独开一个终端 运行gpfdist 这个程序
3,运行好了gpfdist后 就可以在psql中创建外部表 并且进行数据入库操作了
使用的不是出异常的file协议了
使用的是刚刚说的 gpfdist协议 具体建表语句如下:
CREATE EXTERNAL TABLE test
(
phone_num bigint,
imei_num TEXT,
star_data integer,
end_data integer,
city TEXT,
brand_id SMALLINT,
vip integer,
state integer,
customer_num integer,
is_group integer,
mind_high integer,
channel_num integer,
area TEXT
) LOCATION('gpfdist://mdw/data/SGSN_right_130.csv') FORMAT 'TEXT' (DELIMITER = E'|');
备注 gpfdist的根目录是 /home/gpadmin 所以上面的路径是mdw/data/....而不是/mdw/home/gpadmin/data/...
gpfdist默认端口好像是8080,有时候可能会端口冲突 需要修改一下,具体怎么修改我还没找到。
然后进行入库操作
insert into 内部表 select * from 外部表
--------------------------------------------------------
其他方式:
本地文件直接入库
cat /home/gpadmin/data/SGSN_right_130.csv | psql -p 5432 -c "COPY table_name FROM STDIN DELIMITER E'\t' NULL E''; "
/home/gpadmin/data/SGSN_right_130.csv-本地文件路径
-p 5432指定PSQL端口
table_name 就是要入库的表明
DELIMITER E'\t' 表示以制表符分割,如果不是的话 可自行将\t更换为别的。
将HDFS中的文件当作外部表来入库
A:创建外部表关联HDFS文件
create external table table_name(字段) LOCATION('pxf://mdw:50070/test/test1.csv?Fragmenter=HdfsDataFragmenter&Accessor=TextFileAccessor&Resolver=TextResolver') FORMAT 'TEXT' (DELIMITER = E'|');
A:创建外部表关联HDFS文件方式2
create external table table_name(字段) LOCATION('gphdfs://hostname:port/test/test1.csv?Fragmenter=HdfsDataFragmenter&Accessor=TextFileAccessor&Resolver=TextResolver') FORMAT 'TEXT' (DELIMITER = E'|');
test/test1.csv 是HDFS下的路径
Fragmenter=HdfsDataFragmenter&Accessor=TextFileAccessor&Resolver=TextResolver制定的规则,具体我也说不清。