sqoop—在sql server中使用模式进行查询

6mw9ycah  于 2021-06-03  发布在  Sqoop
关注(0)|答案(3)|浏览(421)

我试着用 --query 选项从sql server导入数据。我关心的是,如何在sql server中声明要与--query一起使用的模式。
我的剧本:

sqoop \
--options-file sqoop/aw_mssql.cfg \
--query "select BusinessEntityId, LoginID, cast(OrganizationNode as string) from Employee where \$CONDITIONS" \
--hive-table employees \
--hive-database mssql \
-- --schema=HumanResources

仍然会产生错误
对象名“employee”无效
也试过了

--connect "jdbc:sqlserver://192.168.1.17;database=AdventureWorks;schema=HumanResources"

但这也失败了。

ycl3bljg

ycl3bljg1#

-schema 可以与 -table ,但与 -query . 想想这意味着什么,它需要解析查询的文本并用两部分的名称替换每个不合格的表引用,而不是已经是两部分、三部分或四部分名称的表引用。并完全匹配后端的语法规则(在本例中为sql server)。这是不可行的。
在查询中显式指定架构:

select BusinessEntityId, LoginID, cast(OrganizationNode as string)
from HumanResources.Employee 
where ...
68bkxrlz

68bkxrlz2#

您正在使用的sqoop命令缺少一些东西。首先,您需要指定这是一个sqoop导入作业。除此之外,您的查询需要有一个连接字符串。此外,我不知道你是什么参数内传递的选项文件,所以如果你已经张贴了详细信息,它会更容易,我不确定的 -- --schema=HumanResources 我没见过的东西。正确的sqoop示例查询是:

sqoop import --connect <connection string> --username <username> --password <password> --query <query> --hive-import --target-table <table_name> -m <no_if_mappers

此外,使用时请记住这一点 --query 您不需要指定 --table 工具,否则将抛出错误。

bqf10yzr

bqf10yzr3#

您可以尝试以下代码:

sqoop import \
--connect jdbc:sqlserver://192.168.1.17;database=AdventureWorks \
--username "Your User" \
--password "Your Password" \
--driver  com.microsoft.sqlserver.jdbc.SQLServerDriver \
--verbose  \
--query "select BusinessEntityId, LoginID, cast(OrganizationNode as string) from HumanResources.Employee where \$CONDITIONS" \
--split-by "EmpID" \ 
--where " EmpID='Employee ID' " \
-m 1  \
--target-dir /user/cloudera/ingest/raw/Employee\
--fields-terminated-by "," \
--hive-import \
--create-hive-table \
--hive-table mssql.employees \
``` `hive-import` –将表导入配置单元(如果未设置任何分隔符,则使用配置单元的默认分隔符。) `create-hive-table` –它将创建新的hibe表。 `Note:` 如果配置单元表已存在,则作业将失败。在这种情况下是有效的。 `hive-table` –指定 `<db_name>.<table_name>` .

相关问题