> 백엔드 개발 > Golang > Parquet 파일의 int96 타임스탬프를 Go 타임스탬프로 어떻게 변환하나요?

Parquet 파일의 int96 타임스탬프를 Go 타임스탬프로 어떻게 변환하나요?

Barbara Streisand
풀어 주다: 2024-12-28 01:56:10
원래의
898명이 탐색했습니다.

How do I convert int96 timestamps from Parquet files to Go timestamps?

Parquet에서 Go로 int96 타임스탬프 캐스팅

Parquet 파일에 저장된 int96 타임스탬프 값을 처리할 때 이러한 값을 Golang 애플리케이션 내의 타임스탬프. 이 문제는 데이터 파이프라인 또는 분석 프레임워크로 작업할 때 발생할 수 있습니다.

int96 타임스탬프 이해

Int96 타임스탬프는 마이크로초 정밀도의 타임스탬프를 나타내는 12바이트 값입니다. . 처음 8바이트는 자정부터 나노초 단위의 시간을 포함하고, 마지막 4바이트는 JDN(율리우스력 일수)을 나타냅니다.

Go에서 타임스탬프로 변환

To int96 타임스탬프를 Go 타임스탬프로 캐스팅합니다. 다음 단계는 다음과 같습니다. 필수:

  1. 시간 및 날짜 값 추출:

    • int96 배열을 두 부분으로 나눕니다: 시간 부분(8바이트) ) 및 날짜 부분(4 bytes).
  2. 바이트 순서 역순:

    • Int96 타임스탬프는 역방향 바이트 순서를 사용합니다. Go에서 올바른 표현을 얻으려면 시간과 날짜 부분의 바이트 순서를 반대로 바꾸세요. 이렇게 하면 Go 타임스탬프가 예상하는 대로 바이트가 빅엔디안 형식으로 정렬됩니다.
  3. 시간을 나노초로 변환:

    • 시간 부분의 8바이트를 int64 값으로 해석합니다. 이는 자정부터 경과된 나노초 수를 나타냅니다.
  4. 날짜를 JDN으로 변환:

    • 날짜 부분을 uint32 값으로 반환합니다. 이는 율리우스력 일수를 나타냅니다.
  5. 시간과 날짜 결합:

    • Go time.Time 객체를 생성합니다. 시간(나노초)과 날짜(JDN)를 결합합니다. 그러면 마이크로초 정밀도의 타임스탬프가 생성됩니다.

예제 코드:

Go에서 캐스팅 프로세스를 설명하려면 다음을 고려하세요. 다음 예:

import (
    "time"
)

// Convert Int96ToTimestamp converts an int96 timestamp to a Go timestamp (time.Time).
func ConvertInt96ToTimestamp(int96Bytes []byte) (time.Time, error) {
    // Extract the time and date parts.
    timeBytes := int96Bytes[:8]
    dateBytes := int96Bytes[8:]

    // Reverse the byte order.
    reverseBytes(timeBytes)
    reverseBytes(dateBytes)

    // Convert time to nanoseconds.
    timeInt64, err := Int64FromBytes(timeBytes)
    if err != nil {
        return time.Time{}, err
    }

    // Convert date to JDN.
    dateUint32, err := Uint32FromBytes(dateBytes)
    if err != nil {
        return time.Time{}, err
    }

    // Create a Go time.Time object.
    timestamp := time.Date(int(dateUint32), 1, 1, 0, 0, 0, int64(timeInt64), time.UTC)

    return timestamp, nil
}
로그인 후 복사

이러한 변환 단계를 구현함으로써 Golang 애플리케이션은 효율적으로 처리할 수 있습니다. Parquet 데이터에서 발견된 int96 타임스탬프 값을 추가 처리 또는 분석을 위해 Go 타임스탬프로 변환합니다.

위 내용은 Parquet 파일의 int96 타임스탬프를 Go 타임스탬프로 어떻게 변환하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿