Как в phoenix сделать upsert из select с group by и поместить значения одного столбца в столбец массива?

avatar
Don Rhummy
8 апреля 2018 в 00:55
3070
1
0

У меня есть две таблицы, одна из которых определяется как:

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;

В Phoenix возможно что-то подобное?

Источник

Ответы (1)

avatar
Ananya Antony
29 июня 2018 в 10:24
2

Вы можете выполнить upsert-select, как указано в документации Phoenix.

https://phoenix.apache.org/language/index.html#upsert_select

UPSERT INTO test.targetTable(col1, col2) SELECT col3, col4 FROM test.sourceTable WHERE col5 < 100 ВСТАВИТЬ В foo SELECT * FROM bar;

Это также можно использовать для обновления нескольких строк в таблице. В этом случае исходная и целевая таблицы будут одинаковыми.

Например, вы можете сделать что-то вроде этого

UPSERT INTO FOO(RK,AGE,CITY,NAME) SELECT RK,AGE,CITY,REGEX_REPLACE('MATT','MATT','CARTER') FOO WHERE NAME='MATT';

Это изменит имя с MATT на CARTER во всех строках, где имя человека — MATT.