sqoop如何将sql数据类型转换为配置单元 [英] How sqoop converts sql datatypes into hive

查看:655
本文介绍了sqoop如何将sql数据类型转换为配置单元的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆