SQLserver查询结果输出到Hive而不用担心列名

时间:2014-03-27 18:51:06

标签: sql-server hive sqoop

我有一个非常复杂的SQL服务器查询来返回报告。我想将结果表移动到Hive。

我知道内置SQOOP has free-form query功能。但是,它清楚地说明了

  

“在当前版本的Sqoop中使用自由格式查询的功能   仅限于没有模棱两可的预测的简单查询   并且WHERE子句中没有OR条件。使用复杂的查询等   作为具有子查询或联接的查询导致模糊不清   预测会导致意想不到的结果。“

所以我想--query功能在这种情况下不起作用,我必须将相关表从sql server移动到hive / hdfs,然后将查询重写为HQL flavor查询。

所以这是令人头痛的地方: SQLserver对表/列名的限制很少..你可以在其中放置空格和其他字符,你只需要在它周围加上方括号[]就可以了。例如,[公司名称]。[列名],我不认为HIVE是如此“灵活”。

这是否意味着:

(1)当我将表从SQLserver移动到Hive时,我需要进行自由格式查询以手动将所有列更改为合法的名称,例如

  

/ usr / bin / sqoop import --driver'net.sourceforge.jtds.jdbc.Driver'--connect'jdbc:jtds:sqlserver:// xxxx'-query'SELECT“No_”as“No_” ,“ECCN_HTS Hold”为“ECCN_HTS_Hold”,“Vendor Site Name”为   来自[公司$ Sales Line]的“Vendor_Site_Name”WHERE $ CONDITIONS'   --target-dir / directoary / data / data_sales_line -m 1 --fields-terminated-by'\ 001' - append

(2)之后,你是否必须手动创建指向hdfs目录的hive外部表?

我会说我的桌子上有这么多栏目,我猜这真的不是它想象的工作方式,有人能指出我正确的方向吗?一些示例并将表移入配置单元而不用担心列名称将非常感谢!

0 个答案:

没有答案