Maison > développement back-end > Golang > Comment convertir les horodatages int96 des fichiers Parquet en horodatages Go ?

Comment convertir les horodatages int96 des fichiers Parquet en horodatages Go ?

Barbara Streisand
Libérer: 2024-12-28 01:56:10
original
899 Les gens l'ont consulté

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

Casting int96 Timestamp from Parquet to Go

Lorsque vous traitez des valeurs d'horodatage int96 stockées dans des fichiers Parquet, il est nécessaire de convertir ces valeurs en horodatages dans les applications Golang. Ce problème peut être rencontré lorsque vous travaillez avec des pipelines de données ou des cadres d'analyse.

Comprendre l'horodatage int96

L'horodatage Int96 est une valeur de 12 octets qui représente un horodatage avec une précision de la microseconde. . Les 8 premiers octets contiennent l'heure en nanosecondes à partir de minuit, tandis que les 4 derniers octets représentent le numéro du jour julien (JDN).

Conversion en horodatage dans Go

Vers convertissez un horodatage int96 en un horodatage Go, les étapes suivantes sont essentiel :

  1. Extraire les valeurs d'heure et de date :

    • Diviser le tableau int96 en deux parties : la partie heure (8 octets ) et la partie date (4 octets).
  2. Inverser l'ordre des octets :

    • Les horodatages Int96 utilisent un ordre d'octets inversé. Pour obtenir la représentation correcte dans Go, inversez l’ordre des octets des parties heure et date. Cela garantit que les octets sont disposés au format big-endian, comme l'attendent les horodatages Go.
  3. Convertir le temps en nanosecondes :

    • Interprétez les 8 octets de la partie temporelle comme une valeur int64. Cela représente le nombre de nanosecondes écoulées depuis minuit.
  4. Convertir la date en JDN :

    • Interpréter les 4 octets de la partie date en tant que valeur uint32. Cela représente le numéro du jour julien.
  5. Combinez l'heure et la date :

    • Créez un objet Go time.Time en combinant l'heure (nanosecondes) et la date (JDN). Cela se traduira par un horodatage avec une précision de la microseconde.

Exemple de code :

Pour illustrer le processus de diffusion dans Go, considérons le exemple suivant :

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
}
Copier après la connexion

En implémentant ces étapes de conversion, les applications Golang peuvent gérer efficacement les valeurs d'horodatage int96 rencontrées dans Données Parquet et transformez-les en horodatages Go pour un traitement ou une analyse ultérieure.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal