[HADOOP] 하이브, 어떻게 모든 데이터베이스의 테이블 열을 검색합니까?
HADOOP하이브, 어떻게 모든 데이터베이스의 테이블 열을 검색합니까?
이 SQL 요청에 해당하는 하이브를 작성하고 싶습니다.
select * from information_schema.columns where table_schema='database_name'
해결법
-
==============================
1.하이브 메타 데이터를 반환하는 쿼리를 실행할 수있는 기능을 원한다면 MySQL을 사용하여 하이브 메타 스토어를 설정할 수 있습니다. 하이브에 사용 된 메타 데이터는 MySQL의 특정 계정에 저장됩니다.
하이브 메타 데이터를 반환하는 쿼리를 실행할 수있는 기능을 원한다면 MySQL을 사용하여 하이브 메타 스토어를 설정할 수 있습니다. 하이브에 사용 된 메타 데이터는 MySQL의 특정 계정에 저장됩니다.
CREATE USER 'hive'@ 'metastorehost'IDENTIFIED BY 'mypassword'를 수행하여 하이브 용 MySQL 사용자를 만들어야합니다.
그런 다음 찾고있는 정보가있는 COLUMNS_VS와 같은 테이블을 찾을 수 있습니다.
모든 테이블의 모든 열을 검색하는 쿼리 예는 다음과 같습니다. SELECT COLUMN_NAME, TBL_NAME FROM COLUMNS_V2 c JOIN TBLS a ON c.CD_ID = a.TBL_ID
또는 WebHCat에 대한 REST 호출을 통해이 정보에 액세스 할 수 있습니다. 자세한 정보는 wiki를 참조하십시오.
-
==============================
2.이것은 HiveMetaStoreClient를 연결하는 한 방법이며 getTableColumnsInformation 메서드를 사용하여 열을 가져올 수 있습니다.
이것은 HiveMetaStoreClient를 연결하는 한 방법이며 getTableColumnsInformation 메서드를 사용하여 열을 가져올 수 있습니다.
이 클래스에서는 열과 함께 파티션과 같은 다른 모든 정보를 추출 할 수 있습니다. pls 예제 클라이언트 및 예제 메서드를 참조하십시오.
import org.apache.hadoop.hive.conf.HiveConf; // test program public class Test { public static void main(String[] args){ HiveConf hiveConf = new HiveConf(); hiveConf.setIntVar(HiveConf.ConfVars.METASTORETHRIFTCONNECTIONRETRIES, 3); hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, "thrift://host:port"); HiveMetaStoreConnector hiveMetaStoreConnector = new HiveMetaStoreConnector(hiveConf); if(hiveMetaStoreConnector != null){ System.out.print(hiveMetaStoreConnector.getAllPartitionInfo("tablename")); } } } // define a class like this import com.google.common.base.Joiner; import com.google.common.collect.Lists; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.HiveMetaStoreClient; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.metastore.api.MetaException; import org.apache.hadoop.hive.metastore.api.Partition; import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants; import org.apache.hadoop.hive.ql.metadata.Hive; import org.apache.thrift.TException; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class HiveMetaStoreConnector { private HiveConf hiveConf; HiveMetaStoreClient hiveMetaStoreClient; public HiveMetaStoreConnector(String msAddr, String msPort){ try { hiveConf = new HiveConf(); hiveConf.setVar(HiveConf.ConfVars.METASTOREURIS, msAddr+":"+ msPort); hiveMetaStoreClient = new HiveMetaStoreClient(hiveConf); } catch (MetaException e) { e.printStackTrace(); System.err.println("Constructor error"); System.err.println(e.toString()); System.exit(-100); } } public HiveMetaStoreConnector(HiveConf hiveConf){ try { this.hiveConf = hiveConf; hiveMetaStoreClient = new HiveMetaStoreClient(hiveConf); } catch (MetaException e) { e.printStackTrace(); System.err.println("Constructor error"); System.err.println(e.toString()); System.exit(-100); } } public String getAllPartitionInfo(String dbName){ List<String> res = Lists.newArrayList(); try { List<String> tableList = hiveMetaStoreClient.getAllTables(dbName); for(String tableName:tableList){ res.addAll(getTablePartitionInformation(dbName,tableName)); } } catch (MetaException e) { e.printStackTrace(); System.out.println("getAllTableStatistic error"); System.out.println(e.toString()); System.exit(-100); } return Joiner.on("\n").join(res); } public List<String> getTablePartitionInformation(String dbName, String tableName){ List<String> partitionsInfo = Lists.newArrayList(); try { List<String> partitionNames = hiveMetaStoreClient.listPartitionNames(dbName,tableName, (short) 10000); List<Partition> partitions = hiveMetaStoreClient.listPartitions(dbName,tableName, (short) 10000); for(Partition partition:partitions){ StringBuffer sb = new StringBuffer(); sb.append(tableName); sb.append("\t"); List<String> partitionValues = partition.getValues(); if(partitionValues.size()<4){ int size = partitionValues.size(); for(int j=0; j<4-size;j++){ partitionValues.add("null"); } } sb.append(Joiner.on("\t").join(partitionValues)); sb.append("\t"); DateTime createDate = new DateTime((long)partition.getCreateTime()*1000); sb.append(createDate.toString("yyyy-MM-dd HH:mm:ss")); partitionsInfo.add(sb.toString()); } } catch (TException e) { e.printStackTrace(); return Arrays.asList(new String[]{"error for request on" + tableName}); } return partitionsInfo; } public String getAllTableStatistic(String dbName){ List<String> res = Lists.newArrayList(); try { List<String> tableList = hiveMetaStoreClient.getAllTables(dbName); for(String tableName:tableList){ res.addAll(getTableColumnsInformation(dbName,tableName)); } } catch (MetaException e) { e.printStackTrace(); System.out.println("getAllTableStatistic error"); System.out.println(e.toString()); System.exit(-100); } return Joiner.on("\n").join(res); } public List<String> getTableColumnsInformation(String dbName, String tableName){ try { List<FieldSchema> fields = hiveMetaStoreClient.getFields(dbName, tableName); List<String> infs = Lists.newArrayList(); int cnt = 0; for(FieldSchema fs : fields){ StringBuffer sb = new StringBuffer(); sb.append(tableName); sb.append("\t"); sb.append(cnt); sb.append("\t"); cnt++; sb.append(fs.getName()); sb.append("\t"); sb.append(fs.getType()); sb.append("\t"); sb.append(fs.getComment()); infs.add(sb.toString()); } return infs; } catch (TException e) { e.printStackTrace(); System.out.println("getTableColumnsInformation error"); System.out.println(e.toString()); System.exit(-100); return null; } } }
from https://stackoverflow.com/questions/29239565/hive-how-do-i-retrieve-all-the-databases-tables-columns by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop FS 셸을 사용하여 두 개의 파일을 어떻게 Hadoop의 파일로 연결할 수 있습니까? (0) | 2019.06.23 |
---|---|
[HADOOP] 3 번의 재시도 후 ZooKeeper가 실패했습니다. (0) | 2019.06.23 |
[HADOOP] Hadoop 다중 입력 (0) | 2019.06.23 |
[HADOOP] Hive 1.1.0 테이블 파티션 유형을 int에서 string으로 변경합니다. (0) | 2019.06.23 |
[HADOOP] Dataproc 클러스터 시작시 파이썬 라이브러리를 자동으로 설치하려면 어떻게해야합니까? (0) | 2019.06.23 |