Menggunakan sistem jenis data BigQuery DataFrames
Sistem jenis data BigQuery DataFrames memungkinkan Anda menggunakan struktur data yang selaras dengan jenis penyimpanan BigQuery bawaan. Membangun analisis Anda berdasarkan jenis data ini akan memastikan integrasi yang lancar dan pemetaan jenis yang andal di seluruh data warehouse Anda.
Pemetaan jenis
Tabel berikut menunjukkan jenis data yang setara di BigQuery, BigQuery DataFrames, dan library Python lainnya beserta tingkat dukungannya:
| Jenis data | BigQuery | BigQuery DataFrames | Python bawaan | 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) |
| Angka besar | BIGNUMERIC |
pandas.ArrowDtype(pyarrow.decimal256(76, 38)) |
decimal.Decimal |
decimal256(76, 38) |
| List<T> | 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 diekspos 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, BigQuery DataFrames mengonversi jenis data ke jenis data BigQuery DataFrames yang sesuai di mana pun pemetaan jenis ditentukan, seperti yang ditunjukkan dalam contoh berikut:
PyArrow menentukan perilaku saat ada perbedaan antara jenis data yang setara. Dalam kasus yang jarang terjadi, saat jenis bawaan Python berfungsi berbeda dari PyArrow, 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) direpresentasikan oleh pandas.ArrowDtype. Jenis Arrow dasar yang tepat bergantung pada versi library Anda. Lingkungan lama biasanya menggunakan db_dtypes.JSONArrowType() untuk kompatibilitas, yang merupakan jenis ekstensi Arrow yang bertindak 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 bawaan BigQuery. Untuk mengelola data durasi,
BigQuery DataFrames menggunakan jenis INT64 sebagai format penyimpanan
yang mendasarinya dalam tabel BigQuery. Anda dapat mengharapkan hasil komputasi Anda konsisten dengan perilaku yang Anda harapkan dari operasi setara yang dilakukan dengan library pandas.
Anda dapat langsung memuat nilai timedelta ke dalam BigQuery DataFrames dan objek Series, seperti yang ditunjukkan dalam contoh berikut:
Tidak seperti pandas, BigQuery DataFrames hanya mendukung nilai timedelta dengan presisi mikrodetik. Jika data Anda menyertakan 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 di 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 menjalankan operasi pada setiap elemen daftar
menggunakan properti daftar objek Series, seperti yang ditunjukkan dalam
contoh berikut:
Pengakses struct
Objek StructAccessor dapat mengakses dan memproses kolom dalam serangkaian struct. Objek pengakses API adalah series.struct, seperti yang ditunjukkan dalam
contoh berikut:
Jika kolom struct yang ingin Anda akses tidak ambigu dari properti Series
lainnya, Anda dapat melewati pemanggilan struct, seperti yang ditunjukkan dalam contoh berikut:
Namun, praktik terbaiknya adalah menggunakan struct untuk mengakses kolom, karena
hal ini membuat kode Anda 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 BigQuery DataFrames.
- Pelajari sesi dan I/O BigQuery DataFrames.
- Pelajari cara memvisualisasikan grafik menggunakan BigQuery DataFrames.
- Pelajari referensi BigQuery DataFrames API.