ホームページ > バックエンド開発 > Golang > Parquet ファイルの int96 タイムスタンプを Go タイムスタンプに変換するにはどうすればよいですか?

Parquet ファイルの int96 タイムスタンプを Go タイムスタンプに変換するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-28 01:56:10
オリジナル
902 人が閲覧しました

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

Parquet から Go への int96 タイムスタンプのキャスト

Parquet ファイルに格納されている int96 タイムスタンプ値を扱う場合、これらの値を次のように変換する必要があります。 Golang アプリケーション内のタイムスタンプ。この問題は、データ パイプラインまたは分析フレームワークを使用するときに発生する可能性があります。

int96 タイムスタンプについて

Int96 タイムスタンプは、マイクロ秒精度のタイムスタンプを表す 12 バイトの値です。 。最初の 8 バイトには午前 0 時からのナノ秒単位の時間が含まれ、最後の 4 バイトはユリウス日番号 (JDN) を表します。

Go でのタイムスタンプへの変換

To int96 タイムスタンプを Go タイムスタンプにキャストするには、次の手順を実行します。必須:

  1. 時刻と日付の値を抽出します:

    • int96 配列を 2 つの部分に分割します: 時間部分 (8 バイト) ) と日付部分 (4
  2. バイト順序を反転する:

    • Int96 タイムスタンプは逆バイト順序を使用します。 Go で正しい表現を取得するには、時刻部分と日付部分の両方のバイト順序を逆にします。これにより、Go タイムスタンプが期待するとおり、バイトがビッグエンディアン形式で配置されるようになります。
  3. 時間をナノ秒に変換する:

    • 時刻部分の 8 バイトを int64 値として解釈します。これは午前 0 時からの経過ナノ秒数を表します。
  4. 日付を JDN に変換:

    • 次の 4 バイトを解釈します。日付部分を 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 アプリケーションは int96 を効率的に処理できるようになります。 Parquet データで検出されたタイムスタンプ値を、さらなる処理または分析のために Go タイムスタンプに変換します。

以上がParquet ファイルの int96 タイムスタンプを Go タイムスタンプに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート