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.