Big Query - int sütununu float'a dönüştürün
Ben adında bir sütun dönüştürmek istiyoruz laudergelen intetmek floatBig Query. Masam çağrıldı historical. Bu SQL sorgusunu kullanabildim
SELECT *, CAST(lauder as float64) as temp
FROM sandbox.dailydev.historical
Sorgu çalışır ancak değişiklikler tabloya kaydedilmez. Ne yapmalıyım?
Yanıtlar
Bunları daha sonra kullanmak için geçici bir tabloya kaydetmek ister misiniz?
Aşağıdaki gibi geçici bir tabloya kaydedebilir ve ardından "geçici" ye bakabilirsiniz.
with temp as
( SELECT *, CAST(lauder as float64)
FROM sandbox.dailydev.historical)
Eğer kullanırsanız SELECT *, tüm tabloyu tarayacaksınız ve böylece maliyetiniz olacaktır. Tablo küçükse bu bir sorun olmamalı, ancak maliyet konusunda endişelenecek kadar büyükse - aşağıda başka bir yaklaşım var:
gerekli veri türünün yeni sütununu eklemek için ALTER TABLE ADD COLUMN uygulayın
yeni sütun için UPDATE uygula
UPDATE tablo SET new_column = CAST (float64 olarak old_column) WHERE true
Bir tablodaki sütun veri türünü değiştiremezsiniz https://cloud.google.com/bigquery/docs/manually-changing-schemas#changing_a_columns_data_type
Yapabilecekleriniz şudur:
- Üstte oturmak ve veri türü dönüşümünü yönetmek için bir görünüm oluşturun
- Yeni bir sütun oluşturun ve veri türünü float64 olarak ayarlayın ve içine değerler ekleyin
- Tablonun üzerine yaz
Yukarıda paylaştığım bağlantıdaki artılar ve eksiler dahil olmak üzere 2. ve 3. seçenekler iyi bir şekilde özetlenmiştir.
İfadeniz doğru. Ancak Big Query'deki tablo sütunları değişmezdir. Sorgunuzu çalıştırmanız ve sonuçları değiştirilmiş sütun ile yeni bir tabloya kaydetmeniz gerekir.
"Diğer"> "Sorgu ayarları" nı tıklayın ve "Hedef" bölümünde "Sorgu sonuçları için bir hedef tablo ayarla" yı seçin ve tablo adını doldurun. Oluşturulan tablo ile mevcut tablonun üzerine yazmak isteyip istemediğinizi bile seçebilirsiniz.
Bu ayarlar yapıldıktan sonra, sorgunuzu her zamanki gibi "Çalıştırın".
Sen kullanabilirsiniz CREATE veya TABLOSU DEĞİŞTİRİN aynı tabloya verileriyle birlikte yapısal değişiklikleri yazmak için:
CREATE OR REPLACE TABLE sandbox.dailydev.historical
AS SELECT *, CAST(lauder as float64) as temp FROM sandbox.dailydev.historical;
Bu örnekte,
historicaltablo ek bir sütun ile yeniden yapılandırılacaktırtemp.