列出具有sqoop的列

时间:2016-03-14 13:54:56

标签: sqoop

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

sqoop-list-databases
sqoop-list-tables

但是,似乎没有命令列出表中的列,这将是一个合乎逻辑的步骤。

我现在的问题是:

如何通过Sqoop从表中获取列的列表?

5 个答案:

答案 0 :(得分:4)

不幸的是,没有像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语句,但这应该很容易找到。

答案 1 :(得分:1)

使用"描述DB_name.table_name"在sqoop eval。

sqoop eval --connect Connection_string --username username --password password --query" describe DB_Name.Table_Name"

答案 2 :(得分:1)

如果您只想知道某些源表的列名,则下面是最简单的处理方式 SQOOP EVAL 下面是从oracle数据库中提取列名的示例,对于所有RDBMS

都是相同的

sqoop eval -libjars /var/lib/sqoop/ojdbc6.jar - connect jdbc:oracle:thin:@hostname: portnumber / servicename - 用户名用户 -password 密码 - 查询"从schemaname.tablename中选择*,其中rownum = 10&#34 ;

这将在终端上打印架构。在查询部分中,您可以运行要在rdbms上运行的任何查询。

假设您要存储输出,只需将其附加到文件中,如下所示。 sqoop eval -libjars /var/lib/sqoop/ojdbc6.jar - connect jdbc:oracle:thin:@hostname:portnumber / servicename - username < / strong>用户 -password 密码 - 查询&#34;从schemaname.tablename中选择*,其中rownum = 10&#34; &GT;&GT; sqoop_results.txt

答案 3 :(得分:0)

在sqoop eval查询中使用以下命令: “describe database_name.table_name”

这个命令对我有用:

sqoop eval --connect jdbc:mysql:// localhost / database_name --username root -P --query“describe database_name.table_name”

命令输出如下:

[cloudera @ localhost~] $ sqoop eval --connect jdbc:mysql:// localhost / mytestdb --username root -P --query“describe mytestdb.CustomersNew3”

17/01/26 22:13:08 INFO sqoop.Sqoop:运行Sqoop版本:1.4.3-cdh4.7.0 输入密码:

17/01/26 22:13:12 INFO manager.MySQLManager:准备使用MySQL流式结果集。

| COLUMN_NAME | COLUMN_TYPE | IS_NULLABLE | COLUMN_KEY | COLUMN_DEFAULT |额外|

| ID | int(11)|没有| | (null)| | | NAME | varchar(20)|没有| | (null)| | |年龄| int(11)|没有| | (null)| | |地址| char(25)|是的| | (null)| |

| SALARY |小数(18,2)|是的| | (null)| |

答案 4 :(得分:0)

您可以为此目的使用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              |