Используя PostgreSQL 12, я пытаюсь импортировать данные из CSV в следующем формате:
country,state,county,lat,lng,type,measure,beds,population,year,source,source_url
US,AK,ketchikan gateway,63.588753,-154.493062,ICU,1000HAB,3.928701,13745,2018,arcgis,https://services1.arcgis.com/Hp6G80Pky0om7QvQ/arcgis/rest/services/Hospitals_1/FeatureServer/0
US,AK,kodiak island,63.588753,-154.493062,ACUTE,1000HAB,,n,2018,arcgis,https://services1.arcgis.com/Hp6G80Pky0om7QvQ/arcgis/rest/services/Hospitals_1/FeatureServer/0
Обратите внимание, что в поле "заполнение" второго ряда вместо n
указано пустое значение. Моя цель состоит в том, чтобы импортировать CSV, чтобы столбец "population" был BIGINT, а "n" был заменен на NULL. Мое текущее решение:
CREATE TABLE temp_table
(
country CHAR(2),
state CHAR(2),
county VARCHAR(255),
lat DOUBLE PRECISION,
lng DOUBLE PRECISION,
type VARCHAR(11),
measure VARCHAR(255),
beds DOUBLE PRECISION,
pop VARCHAR(255),
year SMALLINT,
source VARCHAR(255),
source_url VARCHAR(255)
);
COPY temp_table
FROM 'C:\\Users\\mconr\\Downloads\\global-hospital-beds-capacity-for-covid19\\hospital_beds_USA_v1.CSV'
WITH (DELIMITER ',', FORMAT CSV, HEADER TRUE);
SELECT country, state, county, lat, lng, type, measure, beds, CAST (NULLIF (pop, 'n') AS BIGINT) AS population, year, source, source_url
INTO USA
FROM temp_table;
DROP TABLE temp_table;
Мое текущее решение состоит в том, чтобы создать временную таблицу, в которой «население» равно VARCHAR (255), импортировать данные, создать новую таблицу из инструкции SELECT, которая заменяет «n» с NULL и приводит столбец к BIGINT, затем удаляет временную таблицу. Однако это кажется немного неэффективным, так как я создаю и удаляю промежуточную таблицу. Кто-нибудь знает лучший способ сделать это?