@NIKA_R

PostegreSQL. Как правильно создать структурированную таблицу с select?

Есть две таблицы с данными , все данные в одну строчку не разбиты по атрибутам .
То есть
Таблица 1
101.130.92.131			20170216044929	http://news.yandex.ru/2962142	1418	405	Firefox/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112)n'

...
Таблица 2.
101.130.92.131 Воронеж

Требуется на базе этих таблиц создать новую с распарсенными данными
create table  LOG( 
DT DATE,          
LINK VARCHAR(50),  
USER_AGENT VARCHAR(200),  
REGION VARCHAR(30)  
);


Как создавать таблицы на базе других при помощи select , понимаю.
CREATE TABLE new_table AS (SELECT column_1, column2, ... column_n FROM old_table_1, old_table_2, ... old_table_n)


Создавать таблицу со структурой заранее нельзя... Вью создавать нельзя...
Как в одном запросе распарсить и сджоинить две таблицы?
===================================================
20140216044939 - как переформатировать в дату и время ?
2014 02 16 04 49 39 ?
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
CREATE TABLE log AS (
  WITH cte AS (
    SELECT STRING_TO_ARRAY(txt, ' ') parsed
    FROM t1
  )
  SELECT LEFT(parsed[2], 8) :: DATE dt,
         parsed[3] link,
         ARRAY_TO_STRING(parsed[6:100], ' ') agent,
         t2.city
  FROM cte
  LEFT JOIN t2 ON cte.parsed[1] = t2.ip
  );

fiddle

PS. Нужны конкретные типы данных в итоговой таблице - добавь соотв. приведение типов в SELECT, как сделано для поля dt.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы