使用 sqoop 列出列

List columns with sqoop

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

sqoop-list-databases
sqoop-list-tables

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

我现在的问题是:

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

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

运行导入,导入字段名。

这是一个示例,说明如何在连接到 SQL 服务器数据库时完成此操作:

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 语句,但这应该很容易找到。

在 sqoop 评估中使用 "Describe DB_name.table_name"。

sqoop eval --connect Connection_string --username 用户名 --password 密码 --query "describe DB_Name.Table_Name"

在 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 信息 sqoop.Sqoop:运行 Sqoop 版本:1.4.3-cdh4.7.0 输入密码:

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

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

|编号 |整数(11) |否 | | (空) | | |姓名 |变种(20) |否 | | (空) | | |年龄 |整数(11) |否 | | (空) | | |地址 |字符(25) |是 | | (空) | |

|工资 |十进制(18,2) |是 | | (空) | |

如果您只想知道某些来源的列名 table,下面是最简单的处理方法 SQOOP 评估 下面是从 oracle 数据库中提取列名的示例,它对所有 RDBMS

都是一样的

sqoop eval -libjars /var/lib/sqoop/ojdbc6.jar --connect jdbc:oracle:thin:@hostname:portnumber/servicename --用户名用户-密码密码--查询"select * from schemaname.tablename where rownum=10"

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

假设您想存储输出,只需将其附加到如下文件即可。 sqoop eval -libjars /var/lib/sqoop/ojdbc6.jar --connect jdbc:oracle:thin:@hostname:portnumber/servicename --用户名用户-密码密码--查询"select * from schemaname.tablename where rownum=10">>sqoop_results.txt

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