sqoop如何将sql数据类型转换为配置单元 [英] How sqoop converts sql datatypes into hive
问题描述
我需要在sqoop中转换为配置单元的SQL Server数据类型的完整列表。
像SQL Server的 timestamp
转换为hive string
,SQL Server varchar
转换为配置单元字符串
等。
在哪里可以找到这个完整的映射?
对于Java映射
SELECT * FROM< TABLE-NAME> WHERE 1 = 0
使用查询。它将获取没有记录,但元数据。
有用的来源代码:
protected String getColNamesQuery(String tableName){
//添加where子句以防止加载大表
返回SELECT t。* FROM+ escapeTableName(tableName)+AS t WHERE 1 = 0 ;
}
然后它使用 ResulSetMetadata
找到数据类型。
有用的源代码代码为通用JDBC,
int cols = result.getMetaData()。getColumnCount();
ArrayList< String> columns = new ArrayList< String>();
ResultSetMetaData metadata = results.getMetaData();
for(int i = 1; i< cols + 1; i ++){
String colName = metadata.getColumnLabel(i);
if(colName == null || colName.equals()){
colName = metadata.getColumnName(i);
if(null == colName){
colName =_RESULT_+ i;
}
}
columns.add(colName);
LOG.debug(Found column+ colName);
从 - map-column-java
在此映射上被覆盖。
用于Hive映射
使用此映射:
public static String toHiveType(int sqlType){
switch(sqlType ){
case Types.INTEGER:
case Types.SMALLINT:
returnINT;
case Types.VARCHAR:
case Types.CHAR:
case Types.LONGVARCHAR:
case Types.NVARCHAR:
case Types.NCHAR:
case Types.LONGNVARCHAR:
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
case Types.CLOB:
returnSTRING;
案例Types.NUMERIC:
案例Types.DECIMAL:
案例Types.FLOAT:
案例Types.DOUBLE:
案例Types.REAL:
返回双;
case Types.BIT:
case Types.BOOLEAN:
returnBOOLEAN;
case Types.TINYINT:
返回TINYINT;
case Types.BIGINT:
返回BIGINT;
默认值:
// TODO(aaron):支持BINARY,VARBINARY,LONGVARBINARY,DISTINCT,
// BLOB,ARRAY,STRUCT,REF,JAVA_OBJECT。
返回null;
检查源代码此处。
来自 - map-column-hive
的映射在此映射上被覆盖。
I need complete list of SQL Server datatypes converted to hive in sqoop.
Like SQL Server's timestamp
is converted to hive string
, SQL Server varchar
is converted to hive string
, etc.
Where can I find this complete mapping?
For Java mapping
SELECT * FROM <TABLE-NAME> WHERE 1=0
Query is used. It will fetch no records but metadata.
Useful source code:
protected String getColNamesQuery(String tableName) {
// adding where clause to prevent loading a big table
return "SELECT t.* FROM " + escapeTableName(tableName) + " AS t WHERE 1=0";
}
Then it uses ResulSetMetadata
to find datatypes.
Useful source code for generic JDBC,
int cols = results.getMetaData().getColumnCount();
ArrayList<String> columns = new ArrayList<String>();
ResultSetMetaData metadata = results.getMetaData();
for (int i = 1; i < cols + 1; i++) {
String colName = metadata.getColumnLabel(i);
if (colName == null || colName.equals("")) {
colName = metadata.getColumnName(i);
if (null == colName) {
colName = "_RESULT_" + i;
}
}
columns.add(colName);
LOG.debug("Found column " + colName);
Mapping from --map-column-java
is overridden on this mapping.
For Hive Mapping
This mapping is used:
public static String toHiveType(int sqlType) {
switch (sqlType) {
case Types.INTEGER:
case Types.SMALLINT:
return "INT";
case Types.VARCHAR:
case Types.CHAR:
case Types.LONGVARCHAR:
case Types.NVARCHAR:
case Types.NCHAR:
case Types.LONGNVARCHAR:
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
case Types.CLOB:
return "STRING";
case Types.NUMERIC:
case Types.DECIMAL:
case Types.FLOAT:
case Types.DOUBLE:
case Types.REAL:
return "DOUBLE";
case Types.BIT:
case Types.BOOLEAN:
return "BOOLEAN";
case Types.TINYINT:
return "TINYINT";
case Types.BIGINT:
return "BIGINT";
default:
// TODO(aaron): Support BINARY, VARBINARY, LONGVARBINARY, DISTINCT,
// BLOB, ARRAY, STRUCT, REF, JAVA_OBJECT.
return null;
}
}
Check source code here.
Mapping from --map-column-hive
is overridden on this mapping.
这篇关于sqoop如何将sql数据类型转换为配置单元的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!