0

Google Cloud 저장소에서 파일을 읽고 파일의 필드 인 transaction_date를 기준으로 여러 파일로 분할해야합니다. 파일 크기는 약 6TB입니다 (여러 파일로 분할 됨). 이것을 달성하는 가장 효과적인 방법은 무엇입니까? 데이터 흐름이나 Dataproc, 다른 간단한 방법을 사용해야합니까?Google 클라우드 저장소 - 파일의 값으로 파일 분할

+0

transaction_date 당 레코드 수는 대략 몇 개입니까? 그리고 입력 형식의 파일 형식은 무엇입니까? 출력용으로 동일한 파일 형식을 계획하고 있습니까? (개행 문자로 구분 된 CSV 또는 JSON 같은 것입니까?) –

+0

데이터의 90 %는 하나의 날짜이고 나머지 10 %는 최대 10 일입니다. 개행 문자로 분리 된 CSV, 출력에서 ​​동일한 형식을 계획 중입니다. 한 파일을 최대 11 개 파일에 넣을 필요가 있습니다 (오늘 90 % + 지난 10 일 동안 10 %). –

+0

* single * 파일에 단일 transaction_date와 관련된 모든 레코드가 필요하거나 거래일에 대한 모든 데이터를 손쉽게 얻을 수있는 방법으로 구성하려했는지, 아니면 더 작은 파일 거래 날짜별로 다른 디렉토리로 나눈 값? –

답변

1

transaction_date마다 별도의 (샤드 드) 파일을 작성하려고합니다. 데이터 흐름과 함께 제공되는 TextIO.Write에는 직접 지원이 없지만 날짜 범위를 알고있는 특별한 경우가있는 것 같기 때문에 ~ 11 개의 서로 다른 필터링 된 TextIO.Write 변형을 수동으로 만들 수 있습니다.

PCollection<Record> input = ... 

for (Date transaction_date : known_transaction_dates) { 
    input.apply(Filter.by(<record has this date>) 
     .apply(TextIO.Write.to(
      String.format("gs://my-bucket/output/%s", transaction_date))); 
} 

확실히 이상적은 아닙니다. BigQueryIO의 경우 데이터의 창을 기준으로 다른 테이블에 쓰기 기능이 있습니다. 비슷한 기능을 TextIO에 추가하면 사용 사례를 해결할 수 있습니다. 그렇지 않으면 다양한 종류의 데이터 의존적 인 기록이 Google의 레이더에 있으며 사용자의 경우와 같은 사례가 포함됩니다.

관련 문제