Я пытаюсь прочитать вывод запроса из базы данных Postgres, используя пакеты ODB C и DataFrames. Некоторые из столбцов являются типами текстовых массивов в базе данных.
Вот предварительный просмотр:
│ Row │ id │ name │ artist_ids │ available_markets │
│ │ String │ Union{Missing, String} │ Union{Missing, String} │ Union{Missing, String} │
├─────┼────────────────────────┼──────────────────────────┤──────────────────────────┤──────────────────────────┤
│ 1 │ 69uJi5QsBtqlYkGURTBli8 │ I Can't Make You Love Me │ {4KDyYWR7IpxZ7xrdYbKrqY} │ {AD,AE,AR,AT,AU,BE...} │
│ 2 │ 7ilWEHob3AYG3lAJlKEpDR │ Baby I'm A Fool │ {2P1puQXmG48EVLBrHbum1J} │ {} │
│ 3 │ 0SuG9kyzGRpDqrCWtgD6Lq │ Give Me Love │ {6eUKZXaKkcviH0Ku9w2n3V} │ {AD,AE,AR,AT,AU,BE...} │
│ 4 │ 3K9PY33TKt25UXX6YymFQq │ To Be Alone With You │ {4MXUO7sVCaFgFjoTI5ox5c} │ {} │
В таблице information_schema.columns эти столбцы помечены как тип данных ARRAY, а не text.
В Python я смог использовать пакет psycopg2 для чтения столбцов массива без проблем в кадре данных pandas. Есть ли способ читать столбцы типа массива в фреймах данных Julia без использования PyCall?
Единственное решение, которое я мог придумать, - это управлять столбцами после загрузки данных в фрейм данных.
import DataFrames, DBInterface
const jdf = DataFrames;
const dbi = DBInterface;
. . .
df = dbi.execute(conn, stmt) |> jdf.DataFrame;
df[!, "available_markets"] = split.(replace.(df[!, "available_markets"], r"[{}]" => ""), ",");
Это дает мне то, что мне нужно, но я бы предпочел, чтобы столбец уже был загружен как тип данных Array {String, 1}.