使用sqoop列出列

bqucvtff  于 2021-06-04  发布在  Sqoop
关注(0)|答案(5)|浏览(414)

我发现以下命令非常有用,可以查看源数据库的外观:

sqoop-list-databases
sqoop-list-tables

但是,似乎没有命令列出表中的列,这将是一个逻辑步骤。
我现在的问题是:

如何通过sqoop从表中获取列列表?

0dxa2lsx

0dxa2lsx1#

你可以利用 sqoop eval 用于此目的的命令。
netezza中的示例:

sqoop eval --connect 'jdbc:netezza://host:port/db' --username 'your_user' --password 'your_pass' --query "SELECT column_name, DATA_TYPE FROM INFORMATION_SCHEMA.Columns WHERE table_name='your_table'"

这将结果输出到控制台:

-----------------------------------------------
| column_name          | data_type            | 
-----------------------------------------------
| col1                 | bigint               | 
| col2                 | bigint               | 
| col3                 | bigint               | 
| col4                 | integer              |
cetgtptt

cetgtptt2#

在sqoop eval中使用“describe db\u name.table\u name”。
sqoop eval--connect connection\u string--username用户名--password密码--query“describe db\u name.table\u name”

hivapdat

hivapdat3#

在sqoop eval query中使用以下命令:“describe database\u name.table\u name”
这个命令对我有效:
sqoop eval—连接jdbc:mysql用法://localhost/database\u name--username root-p--查询“description database\u name.table\u name”
命令输出如下:
[cloudera@localhost ~]$sqoop eval—连接jdbc:mysql用法://localhost/mytestdb--用户名root-p--查询“descripe mytestdb.customersnew3”
17/01/26 22:13:08信息sqoop.sqoop:运行sqoop版本:1.4.3-cdh4.7.0输入密码:

17/01/26 22:13:12 info manager.mysqlmanager:准备使用mysql流结果集。

|列|名称|列|类型|可为空|列|键|列|默认|额外|

|id | int(11)| no | |(null)| | name | varchar(20)| no | |(null)| | age | int(11)| no |(null)| | address | char 25 | yes | |(null)| |

|薪资|小数(18,2)|是| |(空)||

5w9g7ksd

5w9g7ksd4#

如果您只想知道某个源表的列名,下面是处理sqoop eval的最简单方法,下面是从oracle数据库中提取列名的示例,对于所有rdbms都是一样的
sqoop eval libjars/var/lib/sqoop/ojdbc6.jar—连接jdbc:oracle:thin:@hostname:portnumber/servicename--username user-password password--query“selectfrom schemaname.tablename where rownum=10”
这将在终端上打印模式。在query部分中,您可以运行任何要在rdbms上运行的查询。
假设您想存储输出,只需将其附加到一个文件中,如下所示。sqoop eval-libjars/var/lib/sqoop/ojdbc6.jar—连接jdbc:oracle:thin:@hostname:portnumber/servicename--username user-password password--查询“select
from schemaname.tablename where rownum=10”>>sqoop\u results.txt

mo49yndu

mo49yndu5#

不幸的是,没有像这样的命令 sqoop-list-columns 但是,有一些创造性的解决方法:

运行导入,并导入字段名。

下面是连接到sql server数据库时如何执行此操作的示例:

sqoop import --m 1 --connect 'jdbc:sqlserver://nameofmyserver; database=nameofmydatabase; username=dennisjaheruddin; password=mypassword' --query "SELECT column_name, DATA_TYPE FROM INFORMATION_SCHEMA.Columns WHERE table_name='mytableofinterest' AND \$CONDITIONS" --target-dir 'mytableofinterest_column_name'

这将检索列名并将它们写入一个文件,然后您可以手动检查该文件。
当然,这可以扩展以获得其他元数据(例如字段类型)。请注意,如果要连接到不同的数据库类型,则需要稍微不同的select语句,但这应该很容易找到。

相关问题