В Фениксе, как сделать upsert из select с group by и поместить значения одного столбца в столбец массива?
У меня есть две таблицы, одна из которых определяется как:
CREATE TABLE DESTINATION_TABLE (
EFFECTIVE_DATE DATE NOT NULL,
UID UNSIGNED_LONG NOT NULL,
SOURCES VARCHAR[],
CONSTRAINT PK_DT PRIMARY KEY (EFFECTIVE_DATE,UID)
);
Я хочу добавить в это из другой таблицы что-то вроде этого (псевдокод):
UPSERT INTO DESTINATION_TABLE
SELECT
EFFECTIVE_DATE,
NEXT VALUE FOR CIBC_COPY.AUM_AGGREGATES_SEQ AS "UID",
(SELECT DISTINCT ACCOUNT_ID) AS SOURCES
FROM SOURCE_TABLE
GROUP BY EFFECTIVE_DATE;
Возможно ли что-то подобное в Фениксе?
1 ответ
Вы можете сделать upsert-select, как указано в документации по Phoenix.
https://phoenix.apache.org/language/index.html
UPSERT INTO test.targetTable(col1, col2) SELECT col3, col4 ОТ test.sourceTable ГДЕ col5 < 100 UPSERT INTO для foo SELECT * FROM bar;
Это также может быть использовано для обновления нескольких строк в вашей таблице. В этом случае ваша исходная таблица и таблица назначения будут одинаковыми.
Например, вы могли бы сделать что-то вроде этого
UPSERT INTO FOO(РК, ВОЗРАСТ, ГОРОД, ИМЯ) ВЫБЕРИТЕ РК, ВОЗРАСТ, ГОРОД,REGEX_REPLACE('MATT','MATT','CARTER') ИЗ FOO, ГДЕ ИМЯ ='MATT';
Это изменит имя с MATT на CARTER во всех строках, где имена людей - MATT.