В Фениксе, как сделать 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.

Другие вопросы по тегам