Parquet から Go への int96 タイムスタンプのキャスト
Parquet ファイルに格納されている int96 タイムスタンプ値を扱う場合、これらの値を次のように変換する必要があります。 Golang アプリケーション内のタイムスタンプ。この問題は、データ パイプラインまたは分析フレームワークを使用するときに発生する可能性があります。
int96 タイムスタンプについて
Int96 タイムスタンプは、マイクロ秒精度のタイムスタンプを表す 12 バイトの値です。 。最初の 8 バイトには午前 0 時からのナノ秒単位の時間が含まれ、最後の 4 バイトはユリウス日番号 (JDN) を表します。
Go でのタイムスタンプへの変換
To int96 タイムスタンプを Go タイムスタンプにキャストするには、次の手順を実行します。必須:
時刻と日付の値を抽出します:
バイト順序を反転する:
時間をナノ秒に変換する:
日付を 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 サイトの他の関連記事を参照してください。