Big Query - Ubah kolom int menjadi float

Oct 21 2020

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

1 MFR Oct 21 2020 at 10:13

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)
2 MikhailBerlyant Oct 21 2020 at 15:30

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:

  1. terapkan ALTER TABLE ADD COLUMN untuk menambah kolom baru dari tipe data yang dibutuhkan

  2. terapkan UPDATE untuk kolom baru

    UPDATE table SET new_column = CAST (old_column as float64) WHERE true

1 DanielZagales Oct 21 2020 at 14:04

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:

  1. Buat tampilan untuk duduk di atas dan menangani konversi tipe data
  2. Buat kolom baru dan atur tipe data ke float64 dan masukkan nilai ke dalamnya
  3. Timpa tabel

Opsi 2 dan 3 diuraikan dengan baik termasuk pro dan kontra dalam tautan yang saya bagikan di atas.

1 DiegoQueiroz Oct 21 2020 at 13:00

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.

1 SoumendraMishra Oct 21 2020 at 14:56

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 tambahan temp.