Menggunakan sistem jenis data BigQuery DataFrames
Sistem jenis data BigQuery DataFrames dibangun berdasarkan jenis data BigQuery. Desain ini memastikan integrasi dan keselarasan yang lancar dengan Google Cloud data warehouse, yang mencerminkan jenis bawaan yang digunakan untuk penyimpanan data di BigQuery.
Pemetaan jenis
Tabel berikut menunjukkan jenis data yang setara di BigQuery, BigQuery DataFrames, dan library Python lainnya, serta tingkat dukungannya:
Jenis data | BigQuery | DataFrame BigQuery | Bawaan Python | PyArrow |
---|---|---|---|---|
Boolean | BOOL |
pandas.BooleanDtype() |
bool |
bool_() |
Bilangan bulat | INT64 |
pandas.Int64Dtype() |
int |
int64() |
Float | FLOAT64 |
pandas.Float64Dtype() |
float |
float64() |
String | STRING |
pandas.StringDtype(storage="pyarrow") |
str |
string() |
Byte | BYTES |
pandas.ArrowDtype(pyarrow.binary()) |
bytes |
binary() |
Tanggal | DATE |
pandas.ArrowDtype(pyarrow.date32()) |
datetime.date |
date32() |
Waktu | TIME |
pandas.ArrowDtype(pyarrow.time64("us")) |
datetime.time |
time64("us") |
Datetime | DATETIME |
pandas.ArrowDtype(pyarrow.timestamp("us")) |
datetime.datetime |
timestamp("us") |
Stempel waktu | TIMESTAMP |
pandas.ArrowDtype(pyarrow.timestamp("us", tz="UTC")) |
Datetime.datetime dengan zona waktu |
timestamp("us", tz="UTC") |
Angka | NUMERIC |
pandas.ArrowDtype(pyarrow.decimal128(38, 9)) |
decimal.Decimal |
decimal128(38, 9) |
Numerik besar | BIGNUMERIC |
pandas.ArrowDtype(pyarrow.decimal256(76, 38)) |
decimal.Decimal |
decimal256(76, 38) |
Daftar |
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()) di pandas versi 3.0 atau yang lebih baru dan PyArrow versi 19.0 atau yang lebih baru; jika tidak, kolom JSON akan ditampilkan sebagai pandas.ArrowDtype(db_dtypes.JSONArrowType()) . Fitur ini berada dalam Pratinjau. |
Tidak didukung | json_() (Pratinjau) |
Geografi | GEOGRAPHY |
Geopandas.array.GeometryDtype() Hanya didukung oleh to_pandas() . |
Tidak didukung | Tidak didukung |
Timedelta | Tidak didukung | pandas.ArrowDtype(pyarrow.duration("us")) |
datetime.timedelta |
duration("us") |
Konversi jenis
Saat digunakan dengan data lokal, DataFrame BigQuery mengonversi jenis data ke jenis data yang setara di DataFrame BigQuery di mana pun pemetaan jenis ditentukan, seperti yang ditunjukkan dalam contoh berikut:
PyArrow menentukan perilaku jika ada perbedaan antara jenis data yang setara. Dalam kasus yang jarang terjadi saat fungsi jenis bawaan Python berperilaku berbeda dari fungsi PyArrow yang setara, BigQuery DataFrames umumnya lebih memilih perilaku PyArrow untuk memastikan konsistensi.
Contoh kode berikut menggunakan operasi datetime.date + timedelta
untuk
menunjukkan bahwa, tidak seperti library datetime Python yang masih menampilkan instance tanggal, BigQuery DataFrames mengikuti perilaku PyArrow dengan menampilkan
instance stempel waktu:
Jenis khusus
Bagian berikut menjelaskan jenis data khusus yang digunakan BigQuery DataFrames.
JSON
Dalam BigQuery DataFrames, kolom yang menggunakan
format JSON BigQuery
(standar ringan) diwakili oleh pandas.ArrowDtype
. Jenis Arrow yang mendasarinya bergantung pada versi library Anda. Lingkungan yang lebih lama biasanya menggunakan db_dtypes.JSONArrowType()
untuk kompatibilitas, yang merupakan jenis ekstensi Arrow yang berfungsi sebagai wrapper ringan di sekitar pa.string()
. Sebaliknya,
penyiapan yang lebih baru (pandas 3.0 dan yang lebih baru serta PyArrow 19.0 dan yang lebih baru) menggunakan representasi pa.json_(pa.string())
yang lebih baru.
timedelta
Jenis timedelta
tidak memiliki padanan langsung dalam sistem jenis native BigQuery. Untuk mengelola data durasi, BigQuery DataFrames menggunakan jenis INT64
sebagai format penyimpanan pokok dalam tabel BigQuery. Anda dapat mengharapkan hasil komputasi Anda konsisten dengan perilaku yang Anda harapkan dari operasi yang setara yang dilakukan dengan library pandas.
Anda dapat langsung memuat nilai timedelta
ke objek DataFrame BigQuery dan
Series
, seperti yang ditunjukkan dalam contoh berikut:
Tidak seperti pandas, BigQuery DataFrames hanya mendukung nilai timedelta
dengan presisi mikrodetik. Jika data Anda mencakup nanodetik, Anda harus membulatkannya untuk
menghindari potensi pengecualian, seperti yang ditunjukkan dalam contoh berikut:
Anda dapat menggunakan fungsi bigframes.pandas.to_timedelta
untuk mentransmisikan objek Series
BigQuery DataFrames ke jenis timedelta
, seperti yang ditunjukkan dalam contoh berikut:
Saat Anda memuat data yang berisi nilai timedelta
ke tabel BigQuery, nilai tersebut akan dikonversi menjadi mikrodetik dan disimpan dalam kolom INT64
. Untuk
mempertahankan informasi jenis, BigQuery DataFrames menambahkan string
#microseconds
ke deskripsi kolom ini. Beberapa operasi, seperti eksekusi kueri SQL dan pemanggilan UDF, tidak mempertahankan deskripsi kolom, dan informasi jenis timedelta
akan hilang setelah operasi ini selesai.
Alat untuk jenis komposit
Untuk jenis komposit tertentu, BigQuery DataFrames menyediakan alat yang memungkinkan Anda mengakses dan memproses nilai elemen dalam jenis tersebut.
Pengakses daftar
Objek ListAccessor
dapat membantu Anda melakukan operasi pada setiap elemen daftar
dengan menggunakan properti daftar objek Series
, seperti yang ditunjukkan dalam
contoh berikut:
Pengakses struct
Objek StructAccessor
dapat mengakses dan memproses kolom dalam serangkaian
struct. Objek akses API adalah series.struct
, seperti yang ditunjukkan dalam
contoh berikut:
Jika kolom struct
yang ingin Anda akses tidak ambigu dari properti Series
lain, Anda dapat melewati panggilan struct
, seperti yang ditunjukkan dalam contoh berikut:
Namun, praktik terbaiknya adalah menggunakan struct
untuk mengakses kolom, karena
kode Anda akan lebih mudah dipahami dan tidak rentan terhadap error.
Pengakses string
Anda dapat mengakses objek StringAccessor
dengan properti str
pada objek Series
, seperti yang ditunjukkan dalam contoh berikut:
Pengakses geografi
BigQuery DataFrames menyediakan objek GeographyAccessor
yang memiliki
API serupa dengan struktur GeoSeries yang disediakan oleh library GeoPandas. Anda
dapat memanggil objek GeographyAccessor
dengan properti geo
pada objek Series
seperti yang ditunjukkan dalam contoh berikut:
Langkah berikutnya
- Pelajari cara menggunakan DataFrame BigQuery.
- Pelajari cara memvisualisasikan grafik menggunakan DataFrame BigQuery.
- Jelajahi referensi BigQuery DataFrames API.