Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 不带引号的Sqoop语句_Sql_Hadoop_Jdbc_Teradata_Sqoop - Fatal编程技术网

Sql 不带引号的Sqoop语句

Sql 不带引号的Sqoop语句,sql,hadoop,jdbc,teradata,sqoop,Sql,Hadoop,Jdbc,Teradata,Sqoop,我使用sqoop将数据从teradata查询到hadoop。问题是表太大,无法立即查询。所以我需要把工作分成不同的任务 sqoop import --connect jdbc:teradata://td.xxxxxx.com/database=db --as-textfile --table ref_product --target-dir /td_import/sqoop_import --delete-target-dir --username DB --password secre

我使用sqoop将数据从teradata查询到hadoop。问题是表太大,无法立即查询。所以我需要把工作分成不同的任务

sqoop import 
--connect jdbc:teradata://td.xxxxxx.com/database=db 
--as-textfile 
--table ref_product 
--target-dir /td_import/sqoop_import
--delete-target-dir
--username DB
--password secret 
--split-by "CAST(HASHBUCKET(hashrow(product_id) (BYTE(4))) AS BIGINT)" 
--columns 'product_id' 
--hive-import 
--num-mappers 200 
产品id本身不是很好地分布的,而是散列和散列桶。那么Sqoop的作用是:

一,。查询最小值和最大值:

这个很好用

二,。查询第一个bucket:

选择“产品标识”
来自“参考产品”
其中“CAST(HASHBUCKET(hashrow(product_id)(字节(4))作为BIGINT)”>=0
和“将HASHBUCKET(hashrow(product_id)(字节(4))转换为BIGINT)”<100
崩溃,以及明确的原因: 由于WHERE属性开头和结尾的引号,它会崩溃。如果没有这些引用,查询甚至可以工作

所以我的问题是:如何强制sqoop不使用引号修饰查询?

问候
Hans

Sqoop希望列名在--split by中,因此它不是设计为给定表达式的。我想到了几个想法/问题:

1) 为什么表足够大,不能一次查询?我看到过使用Sqoop从teradata卸载TB数据时没有任何问题。您观察到的异常或问题是什么


2) 您可以利用--where接受任意表达式来“划分”数据。

尝试使用边界查询参数,如下所述:

sqoop导入 --连接jdbc:teradata://td.xxxxxx.com/database=db --作为文本文件 --表ref\u产品 --目标目录/td_导入/sqoop_导入 --删除目标目录 --用户名数据库 --密码秘密 --按“铸造(产品id为BIGINT)模块200”拆分 --边界查询“选择0199” --列“产品标识” --蜂箱导入 --数字映射器200


仅供参考:我能够导入大约1.5 TB、250多列的数据。

1。这个表确实足够大,不能立即查询。我只有100GB的后台处理空间来执行查询。我甚至一个月都无法查询数据库。2.是的,我知道--where表达式。但是我想要整张桌子,而不是其中的一部分。我不能使用属性本身,因为它的分布不均匀。
SELECT MIN( CAST(HASHBUCKET(hashrow('product_id') (BYTE(4))) AS BIGINT) ), 
MAX( CAST(HASHBUCKET(hashrow('product_id') (BYTE(4))) AS BIGINT) ) 
FROM "ref_product"
SELECT "product_id"
FROM "ref_product"
WHERE "CAST(HASHBUCKET(hashrow(product_id) (BYTE(4))) AS BIGINT)" >=0
AND "CAST(HASHBUCKET(hashrow(product_id) (BYTE(4))) AS BIGINT)" < 100