Praktikumis tekkis küsimus, et miks ei saa kirjutada kohe 'SELECT order_id FROM...' ja miks seal veel peab olema ::INT. Pisut tekitab minus segadust ka sõna "rekord" kasutamine, aga proovime kuskilt pihta hakata.
.csv failis on andmed nii:
order_id, store_city,customer_city 101, Tallinn, Helmi Kasteõis
Saame eristada:
CSV rida: 101, Tallinn, Helmi Kasteõis Kirje / Rida: order_id=101 | store_city=Tallinn | customer_name=Helmi Kasteõis Veeru nimed: order_id, store_city, customer_name
read_csv
```sql
SELECT r['order_id']::INT, r['store_city']::TEXT, r['customer_name']::TEXT FROM read_csv('/data/source_sales.csv', header := true) AS r LIMIT 20 Andmete sisselugemiseks kasutame funktsiooni `read_csv` , mis tagastab rea “rekordina” või “dictionary-na", mitte klassikalise tabelina, kus veerunimed on otse kättesaadavad.
Rekord (record / struct / dict) = kirje programmeerimiskontekstis, esitatud võtme-väärtuse paaridena, näiteks:
{ "order_id": "101", "store_city": "Tallinn", "customer_name": "Helmi Kasteõis"}
::INT
Kuna .csv-s on kõik andmed tavaliselt tekstina (TEXT), siis andmetüübi muutmiseks saab kasutada ::INT. Hetkel muudab see order_id tekstist täisarvuks.
r['order_id']::INT
:: on PostgreSQL-spetsiifiline tüübi teisendus.
CSV importimine tavalise tabelina
Ka nii saab teha. Sest meie andmefailis on veerupäised olemas. Aga siis peab kasutama hoopis sellist viisi:
CREATE TABLE sales AS SELECT * FROM read_csv_auto('/data/source_sales.csv'); Edasi saab juba küsida tuttavamas SQL süntaksis. Andmetüüpide muutmine jääb ikka päevakorda, sest need on endiselt TEXT.
SELECT order_id, store_city, customer_name FROM sales LIMIT 20;
Kirjutamisel on kasutatud tehisaru abi.