Bagaimana cara menghasilkan banyak tabel dari SQL?

Saya memiliki tabel berikut:

Nama tabel: negara bagian AS - 50 tabel dengan format berikut

  1. kolom: negara bagian, kode pos, alamat
  2. kode pos tidak unik

Saya ingin melakukan hal berikut dengan satu permintaan SQL:

  1. buat daftar kode pos unik ~40.000
  2. buat tabel dengan nama kode pos ~40.000
  3. di setiap tabel - hanya catatan dengan kode pos yang sesuai
  4. kolom: negara bagian, kode pos, alamat

Bagaimana cara membuat kueri SQL menjadi cara paling efektif dan termurah untuk membuat semua tabel ini?


person thstart    schedule 08.06.2018    source sumber
comment
How to create such a SQL query ... - Kenyataannya adalah - tidak ada cara untuk mencapai hal ini hanya dengan satu permintaan sederhana dan murah. beberapa skrip harus dilibatkan untuk mengatur semua hal di atas. Sementara itu, desain itu terdengar buruk bagi saya dari banyak calon yang berbeda. Sejujurnya saya merasa ini jalan buntu. Anda harus meninjau kembali desain Anda. Sebagian besar, apa sebenarnya yang ingin Anda capai. Mengapa Anda membutuhkan tabel 40K? dll.   -  person Mikhail Berlyant    schedule 09.06.2018
comment
desain itulah yang dibutuhkan dari saya dan tidak masalah bagi saya.   -  person thstart    schedule 15.06.2018


Jawaban (1)


Dengan fitur terkini Anda dapat melakukan beberapa "cheat":

  • Tentukan transformasi linier dari kode pos ke tanggal. Misalnya, DATE_ADD('1980-01-01', INTERVAL kode pos DAYS)
  • Buat tabel yang dipartisi - gunakan tanggal sintetis itu sebagai partisi.
  • Tulis kueri yang memasukkan semua data Anda ke dalam tabel itu SELECT *, synthetic_date(zipcode) FROM ``tables*``.
  • Sekarang Anda memiliki tabel yang dipartisi, dengan setiap partisi hanya berisi data untuk setiap kode pos! Biayanya linier, cukup satu pemindaian untuk semua data Anda.
  • Dan jika Anda mau, sekarang Anda dapat menyalin setiap partisi ke tabel baru - tanpa biaya (namun perhatikan kuota harian). Lihat https://cloud.google.com/bigquery/docs/managing-partitioned-tables#copying_a_single_partition.
person Felipe Hoffa    schedule 08.06.2018
comment
catatan: Jumlah maksimum partisi per tabel yang dipartisi — 4.000 - person Mikhail Berlyant; 08.06.2018
comment
Jadi solusi yang mungkin: 1) salin setiap partisi ke tabel baru - dengan 40.000 tabel saya harus berurusan dengan batasan harian. 2) Saya tidak dapat memiliki 40.000 partisi. Apa solusinya? Tentang batas harian: cloud.google.com/bigquery/quotas#export_jobs Saya tidak tidak melihat kuota harian apa yang terkait dengan 1). - person thstart; 08.06.2018
comment
Saya melihat solusi yang mungkin sebagai berikut: 1) menghasilkan 50 tabel untuk setiap negara bagian. 2) buat partisi di dalam masing-masing partisi untuk kode pos. 40.000/50 = 800 partisi per negara bagian dapat menangani 4.000 partisi per batas tabel. Satu-satunya masalah - kuota harian - di manakah info ini relevan dengan kasus ini? - person thstart; 08.06.2018
comment
Saya melihat batasan ini: :Jumlah maksimum modifikasi partisi per hari per tabel — 5.000 Anda dibatasi hingga total 5.000 modifikasi partisi per hari untuk tabel yang dipartisi. Jika saya membuat 800 partisi di masing-masing 50 tabel ini, saya kira akan baik-baik saja dengan batas ini? - person thstart; 08.06.2018