Big Query - Ubah kolom int menjadi float
Saya ingin mengonversi kolom yang dipanggil lauderdari intmenjadi floatdi Big Query. Meja saya disebut historical. Saya telah dapat menggunakan kueri SQL ini
SELECT *, CAST(lauder as float64) as temp
FROM sandbox.dailydev.historical
Kueri berfungsi tetapi perubahan tidak disimpan ke dalam tabel. Apa yang harus saya lakukan?
Jawaban
Apakah Anda ingin menyimpannya dalam tabel sementara untuk digunakan nanti?
Anda dapat menyimpannya ke tabel sementara seperti di bawah ini dan kemudian merujuk ke "temp"
with temp as
( SELECT *, CAST(lauder as float64)
FROM sandbox.dailydev.historical)
Jika Anda menggunakan SELECT *Anda akan memindai seluruh tabel dan dengan demikian akan menjadi biayanya. Jika tabel kecil, ini seharusnya tidak menjadi masalah, tetapi jika cukup besar untuk diperhatikan tentang biaya - di bawah ini adalah pendekatan lain:
terapkan ALTER TABLE ADD COLUMN untuk menambah kolom baru dari tipe data yang dibutuhkan
terapkan UPDATE untuk kolom baru
UPDATE table SET new_column = CAST (old_column as float64) WHERE true
Anda tidak dapat mengubah tipe data kolom dalam tabel https://cloud.google.com/bigquery/docs/manually-changing-schemas#changing_a_columns_data_type
Yang dapat Anda lakukan adalah:
- Buat tampilan untuk duduk di atas dan menangani konversi tipe data
- Buat kolom baru dan atur tipe data ke float64 dan masukkan nilai ke dalamnya
- Timpa tabel
Opsi 2 dan 3 diuraikan dengan baik termasuk pro dan kontra dalam tautan yang saya bagikan di atas.
Pernyataan Anda benar. Tetapi kolom tabel di Big Query tidak dapat diubah. Anda perlu menjalankan kueri Anda dan menyimpan hasil ke tabel baru dengan kolom yang dimodifikasi.
Klik "More"> "Query settings", dan di "Destination" pilih "Set a destination table for query results" dan isi nama tabel. Anda bahkan dapat memilih jika Anda ingin menimpa tabel yang ada dengan tabel yang dibuat.
Setelah setelan ini disetel, cukup "Jalankan" kueri Anda seperti biasa.
Anda dapat menggunakan CREATE atau REPLACE TABLE untuk menulis perubahan struktural bersama dengan data ke dalam tabel yang sama:
CREATE OR REPLACE TABLE sandbox.dailydev.historical
AS SELECT *, CAST(lauder as float64) as temp FROM sandbox.dailydev.historical;
Dalam contoh ini,
historicaltabel akan disusun kembali dengan kolom tambahantemp.