[HADOOP] 쿼리 결과에 정수 고유 ID를 추가하는 방법-__efficiently__?
HADOOP쿼리 결과에 정수 고유 ID를 추가하는 방법-__efficiently__?
조회가 제공되면 * from ... (CTAS 문의 일부일 수 있음)를 선택하십시오.
목표는 추가 열 ID를 추가하는 것입니다. 여기서 ID는 고유 한 정수입니다.
select ... as ID,* from ...
추신.
row_number는 논리적으로 문제를 해결합니다-
select row_number() over () as ID,* from ...
문제는 적어도 현재로서는 전역 row_number (파티션 없음)가 단일 감속기 (하이브) / 작업 (스파크)을 사용하여 구현되고 있다는 것입니다.
해결법
-
==============================
1.하이브
하이브
set mapred.reduce.tasks=1000; set hivevar:buckets=10000;
hivevar : buckets는 리듀서 (mapred.reduce.tasks)의 수에 비해 충분히 높아야하므로 로우가 리듀서간에 균등하게 분배됩니다.
select 1 + x + (row_number() over (partition by x) - 1) * ${hivevar:buckets} as id ,t.* from (select t.* ,abs(hash(rand())) % ${hivevar:buckets} as x from t ) t
스파크 SQL
select 1 + x + (row_number() over (partition by x) - 1) * 10000 as id ,t.* from (select t.* ,abs(hash(rand())) % 10000 as x from t ) t
하이브와 스파크 SQL 모두
rand ()는 좋은 분포를 생성하는 데 사용됩니다. 쿼리에 분산이 좋은 열 / 열 조합이 이미있는 경우 (독립적 일 수는 없지만) 대신 사용할 수 있습니다 (예 : -
select 1 + (abs(hash(col1,col)) % 10000) + (row_number() over (partition by abs(hash(col1,col)) % 10000) - 1) * 10000 as id ,t.* from t
-
==============================
2.Spark-sql을 사용하는 경우 가장 좋은 방법은 내장 함수를 사용하는 것입니다.
Spark-sql을 사용하는 경우 가장 좋은 방법은 내장 함수를 사용하는 것입니다.
monotonically_increasing_id
별도의 열에 고유 한 임의의 ID를 생성합니다. 그리고 당신이 말했듯이 순차적 일 필요는 없으므로 이상적으로 요구 사항을 충족시켜야합니다.
-
==============================
3.Manoj Kumar에서이 솔루션을 확인하십시오 : https://github.com/manojkumarvohra/hive-hilo
Manoj Kumar에서이 솔루션을 확인하십시오 : https://github.com/manojkumarvohra/hive-hilo
용법:
FunctionName( sequenceName, lowvalue[optional], seedvalue[optional])
-
==============================
4.전 세계적으로 고유 한 ID 서비스 https://github.com/spinaki/distributed-unique-id에 대해 확인하십시오 도커 이미지도 있으므로 빠르게 테스트 할 수 있습니다.
전 세계적으로 고유 한 ID 서비스 https://github.com/spinaki/distributed-unique-id에 대해 확인하십시오 도커 이미지도 있으므로 빠르게 테스트 할 수 있습니다.
from https://stackoverflow.com/questions/42974548/how-to-add-an-integer-unique-id-to-query-results-efficiently by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] ArrayWritable을 통해 반복-NoSuchMethodException (0) | 2019.09.10 |
---|---|
[HADOOP] JSON 문자열 열을 여러 열로 분할 (0) | 2019.09.10 |
[HADOOP] java를 사용하는 Titan-1.0.0 + Hbase-0.98.20의 원격 모드에서 연결 오류 (0) | 2019.09.10 |
[HADOOP] UserAgent 문자열에서 값을 제거하는 Java 또는 Pig 정규식 (0) | 2019.09.09 |
[HADOOP] Apache Sqoop을 사용하여 Mongo / Cassandra에서 HDFS로 데이터 내보내기 (0) | 2019.09.09 |