SQOOP -- 在 SQL 服务器中使用 SCHEMA 查询
SQOOP --query with SCHEMA in SQL Server
我正在尝试使用 sqoop 中的 --query
选项从 SQL 服务器导入数据。我担心的是,我们如何在 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
仍然产生错误
Invalid object name 'Employee'
也尝试过
--connect "jdbc:sqlserver://192.168.1.17;database=AdventureWorks;schema=HumanResources"
但这也失败了。
您使用的 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
工具,否则会引发错误。
您可以试试下面的代码:
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
– 将 table 导入 Hive(使用 Hive 的默认分隔符
如果设置了 none。)
create-hive-table
– 它将创建新的 HIBE table。 Note:
工作
如果 Hive table 已经存在,将会失败。它在这个工作
案例.
hive-table
– 指定 <db_name>.<table_name>
.
-schema
可以与 -table
结合使用,但不能与 -query
结合使用。想一想这意味着什么,它需要解析查询文本并用两部分名称替换每个不合格的 table 引用,但不是已经由两部分、三部分组成的 table 引用部分或四部分名称。并匹配 完全 后端的语法规则(本例中为 SQL 服务器)。就是不可行。
在查询中明确指定模式:
select BusinessEntityId, LoginID, cast(OrganizationNode as string)
from HumanResources.Employee
where ...
我正在尝试使用 sqoop 中的 --query
选项从 SQL 服务器导入数据。我担心的是,我们如何在 SQL Server.
我的脚本:
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
仍然产生错误
Invalid object name 'Employee'
也尝试过
--connect "jdbc:sqlserver://192.168.1.17;database=AdventureWorks;schema=HumanResources"
但这也失败了。
您使用的 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
工具,否则会引发错误。
您可以试试下面的代码:
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
– 将 table 导入 Hive(使用 Hive 的默认分隔符 如果设置了 none。)create-hive-table
– 它将创建新的 HIBE table。Note:
工作 如果 Hive table 已经存在,将会失败。它在这个工作 案例.hive-table
– 指定<db_name>.<table_name>
.
-schema
可以与 -table
结合使用,但不能与 -query
结合使用。想一想这意味着什么,它需要解析查询文本并用两部分名称替换每个不合格的 table 引用,但不是已经由两部分、三部分组成的 table 引用部分或四部分名称。并匹配 完全 后端的语法规则(本例中为 SQL 服务器)。就是不可行。
在查询中明确指定模式:
select BusinessEntityId, LoginID, cast(OrganizationNode as string)
from HumanResources.Employee
where ...