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 | BigQuery DataFrames | 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) |
| 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 ditampilkan sebagai pandas.ArrowDtype(db_dtypes.JSONArrowType()). Fitur ini 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 BigQuery DataFrames yang sesuai jika 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 yang mendasarinya 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 jenis yang setara 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 yang setara yang dilakukan dengan library pandas.
Anda dapat langsung memuat nilai timedelta ke dalam objek BigQuery DataFrames dan 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 ke 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 melakukan 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 panggilan struct, seperti yang ditunjukkan dalam contoh berikut:
Namun, sebaiknya gunakan struct untuk mengakses kolom, karena kode Anda akan lebih mudah dipahami dan tidak rentan 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 tentang BigQuery DataFrames.
- Pelajari tentang sesi dan I/O BigQuery DataFrames.
- Pelajari cara me mvisualisasikan grafik menggunakan BigQuery DataFrames.
- Jelajahi referensi BigQuery DataFrames API.