2016-09-13 6 views
0

unixODBC/isqlを使用してNetezzaサーバーからデータを取得するLinuxサーバー(Cloudera)にスクリプトがあります。ローカルファイルシステム上にテキストファイルを生成し、それをHDFSにプッシュします。unixODBC/isqlを使用してHDFSにデータをロード

export ODBCHOME=; 
export ODBCINI=; 
export LIBPATH=; 
export LD_LIBRARY_PATH=; 

NZ_ODBC_INI_PATH=/home/myuser/sql/; 
export NZ_ODBC_INI_PATH; 
export ODBCINI=/home/myuser/sql/odbc.ini; 

export NZ_HOME=/usr/local/nz; 
export PATH=$PATH:$NZ_HOME/bin64; 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NZ_HOME/lib64; 
export NZ_HOST=myntzserver 

EXTRACT_PATH=/home/myuser/trgt_path/; 
export EXTRACT_PATH; 

cd $EXTRACT_PATH; 

hive_char=`printf "\035\n"` 

isql nettezaServer1 tsg1dev \$\$infadmin11 -v<<EOF 
drop table test_1; 
CREATE EXTERNAL TABLE test_1 (GRP BIGINT, ID BIGINT, DATA CHARACTER V VARYING(10)) USING (DATAOBJECT ("$EXTRACT_PATH/test_1.txt") REMOTESOURCE 'ODBC' delimiter 2); 
insert into test_1 SELECT GRP,ID,DATA FROM SCHEMA1..test_table; 
EOF 

hdfs dfs -put /home/myuser/trgt_path/test_1.txt /user/projects/my_dir/ 

それがに来るようHDFSにデータをHDFSに直接接続、またはパイプするいずれかの方法がある場合、私は疑問に思って。言い換えれば、私は原因ローカルファイルシステム上のテキストファイルを作成スキップしたいです(ソーステーブルは数百GBです)。

私がsqoopを使用していない理由は、プロジェクトの所要時間が長すぎるためです。上記のスクリプトは2-3時間でテキストファイルを作成することができますが、sqoopはデータをロードするのに平均7-8時間かかっています。私のチームのスペシャリストのエキスパートは、時間を節約するためにコマンドを微調整しようとしましたが、運がありませんでした。

要約すると、ローカルファイルシステムをスキップしてこのデータをHDFSに直接ロードできますか?

答えて

0

Netezzaには、NetezzaがさまざまなフォーマットでNetezzaからHDFSに直接データを移動することができるように、他のデータソースを照会することができるFluid Queryが含まれています。

Netezzaにはソフトウェア・エンタイトルメントのFluid Queryが含まれていますが、管理者は使用前にインストールして構成する必要があります。

Here's a quick overview of Fluid Query.

関連する問題