Utiliser le système de types de données BigQuery DataFrames
Le système de types de données BigQuery DataFrames est basé sur les types de données BigQuery. Cette conception assure une intégration et un alignement fluides avec l'entrepôt de donnéesTrusted Cloud by S3NS , reflétant les types intégrés utilisés pour le stockage des données dans BigQuery.
Mappages de types
Le tableau suivant présente les types de données équivalents dans BigQuery, BigQuery DataFrames et d'autres bibliothèques Python, ainsi que leur niveau de compatibilité :
Type de données | BigQuery | BigQuery DataFrames | Python intégré | PyArrow |
---|---|---|---|---|
Booléen | BOOL |
pandas.BooleanDtype() |
bool |
bool_() |
Integer | INT64 |
pandas.Int64Dtype() |
int |
int64() |
Float | FLOAT64 |
pandas.Float64Dtype() |
float |
float64() |
Chaîne | STRING |
pandas.StringDtype(storage="pyarrow") |
str |
string() |
Octets | BYTES |
pandas.ArrowDtype(pyarrow.binary()) |
bytes |
binary() |
Date | DATE |
pandas.ArrowDtype(pyarrow.date32()) |
datetime.date |
date32() |
Heure | TIME |
pandas.ArrowDtype(pyarrow.time64("us")) |
datetime.time |
time64("us") |
Date/Heure | DATETIME |
pandas.ArrowDtype(pyarrow.timestamp("us")) |
datetime.datetime |
timestamp("us") |
Horodatage | TIMESTAMP |
pandas.ArrowDtype(pyarrow.timestamp("us", tz="UTC")) |
Datetime.datetime avec fuseau horaire |
timestamp("us", tz="UTC") |
Numérique | NUMERIC |
pandas.ArrowDtype(pyarrow.decimal128(38, 9)) |
decimal.Decimal |
decimal128(38, 9) |
Grand nombre | BIGNUMERIC |
pandas.ArrowDtype(pyarrow.decimal256(76, 38)) |
decimal.Decimal |
decimal256(76, 38) |
Liste |
ARRAY <T> |
pandas.ArrowDtype(pyarrow.list_(T)) |
list[T] |
list_(T) |
Struct | STRUCT |
pandas.ArrowDtype(pyarrow.struct()) |
dict |
struct() |
JSON | JSON |
pandas.ArrowDtype(pyarrow.json_(pa.string()) dans pandas version 3.0 ou ultérieure et PyArrow version 19.0 ou ultérieure. Sinon, les colonnes JSON sont exposées en tant que pandas.ArrowDtype(db_dtypes.JSONArrowType()) . Cette fonctionnalité est disponible en version bêta. |
Non compatible | json_() (Preview) |
Zone géographique | GEOGRAPHY |
Geopandas.array.GeometryDtype() Compatible avec to_pandas() uniquement. |
Non compatible | Non compatible |
Timedelta | Non compatible | pandas.ArrowDtype(pyarrow.duration("us")) |
datetime.timedelta |
duration("us") |
Conversions de types
Lorsqu'il est utilisé avec des données locales, BigQuery DataFrames convertit les types de données en leurs équivalents BigQuery DataFrames chaque fois qu'un mappage de type est défini, comme illustré dans l'exemple suivant :
PyArrow dicte le comportement en cas d'écarts entre les équivalents de type de données. Dans de rares cas où la fonction de type intégrée Python se comporte différemment de son homologue PyArrow, BigQuery DataFrames privilégie généralement le comportement PyArrow pour assurer la cohérence.
L'exemple de code suivant utilise l'opération datetime.date + timedelta
pour montrer que, contrairement à la bibliothèque Python datetime qui renvoie toujours une instance de date, BigQuery DataFrames suit le comportement de PyArrow en renvoyant une instance de code temporel :
Types spéciaux
Les sections suivantes décrivent les types de données spéciaux utilisés par BigQuery DataFrames.
JSON
Dans BigQuery DataFrames, les colonnes utilisant le format JSON de BigQuery (une norme légère) sont représentées par pandas.ArrowDtype
. Le type Arrow sous-jacent exact dépend des versions de vos bibliothèques. Les anciens environnements utilisent généralement db_dtypes.JSONArrowType()
pour la compatibilité. Il s'agit d'un type d'extension Arrow qui sert de wrapper léger autour de pa.string()
. En revanche, les configurations plus récentes (pandas 3.0 et versions ultérieures, et PyArrow 19.0 et versions ultérieures) utilisent la représentation pa.json_(pa.string())
plus récente.
timedelta
Le type timedelta
n'a pas d'équivalent direct dans le système de types natifs de BigQuery. Pour gérer les données de durée, BigQuery DataFrames utilise le type INT64
comme format de stockage sous-jacent dans les tables BigQuery. Vous pouvez vous attendre à ce que les résultats de vos calculs soient cohérents avec le comportement que vous attendez des opérations équivalentes effectuées avec la bibliothèque pandas.
Vous pouvez charger directement les valeurs timedelta
dans les objets Series
et BigQuery DataFrames, comme illustré dans l'exemple suivant :
Contrairement à pandas, BigQuery DataFrames n'accepte que les valeurs timedelta
avec une précision à la microseconde. Si vos données incluent des nanosecondes, vous devez les arrondir pour éviter d'éventuelles exceptions, comme illustré dans l'exemple suivant :
Vous pouvez utiliser la fonction bigframes.pandas.to_timedelta
pour caster un objet Series
BigQuery DataFrames vers le type timedelta
, comme illustré dans l'exemple suivant :
Lorsque vous chargez des données contenant des valeurs timedelta
dans une table BigQuery, les valeurs sont converties en microsecondes et stockées dans des colonnes INT64
. Pour préserver les informations sur le type, BigQuery DataFrames ajoute la chaîne #microseconds
aux descriptions de ces colonnes. Certaines opérations, comme les exécutions de requêtes SQL et les appels de UDF par l'utilisateur, ne conservent pas les descriptions de colonnes. Les informations de type timedelta
sont alors perdues une fois ces opérations terminées.
Outils pour les types composites
Pour certains types composites, BigQuery DataFrames fournit des outils qui vous permettent d'accéder aux valeurs élémentaires de ces types et de les traiter.
Accesseur de liste
L'objet ListAccessor
peut vous aider à effectuer des opérations sur chaque élément de la liste en utilisant la propriété list de l'objet Series
, comme illustré dans l'exemple suivant :
Accesseur de structure
L'objet StructAccessor
peut accéder aux champs et les traiter dans une série de structs. L'objet d'accesseur d'API est series.struct
, comme illustré dans l'exemple suivant :
Si le champ struct
auquel vous prévoyez d'accéder est sans ambiguïté par rapport aux autres propriétés Series
, vous pouvez ignorer l'appel de struct
, comme illustré dans l'exemple suivant :
Toutefois, il est recommandé d'utiliser struct
pour accéder aux champs, car cela rend votre code plus facile à comprendre et moins sujet aux erreurs.
Accesseur de chaîne
Vous pouvez accéder à l'objet StringAccessor
avec la propriété str
sur un objet Series
, comme illustré dans l'exemple suivant :
Accesseur de géographie
BigQuery DataFrames fournit un objet GeographyAccessor
qui partage des API similaires avec la structure GeoSeries fournie par la bibliothèque GeoPandas. Vous pouvez appeler l'objet GeographyAccessor
avec la propriété geo
sur un objet Series
, comme indiqué dans l'exemple suivant :
Étapes suivantes
- Découvrez comment utiliser BigQuery DataFrames.
- En savoir plus sur les sessions et les E/S BigQuery DataFrames
- Découvrez comment visualiser des graphiques à l'aide de BigQuery DataFrames.
- Explorez la documentation de référence de l'API BigQuery DataFrames.