2014-02-07 4 views
1

Say я запускаю следующий запрос на PSQL:DISTRIBUTE уведомлений в Greenplum

> select a.c1, b.c2 into temp_table from db.A as a inner join db.B as b 
> on a.x = b.x limit 10; 

я получаю следующее сообщение:

ВНИМАНИЕ: Таблица не имеет «ДИСТРИБЬЮТОРА» п - Использование столбцов с именем 'c1' в качестве ключа распространения данных базы данных Greenplum для этой таблицы.
СОВЕТ: Предложение «РАСПРОСТРАНЕНИЕ» определяет распределение данных . Убедитесь, что выбранные столбцы являются оптимальным ключом распределения данных , чтобы свести к минимуму перекос.

  1. Что такое DISTRIBUTED BY колонка?
  2. Где: temp_table? Он хранится на моем клиенте или на сервере?
+0

База данных Greenplum - это вилка Postgres, а 'DISTRIBUTED BY' существует в Postgres. –

+0

Спасибо @IgorRomanchenko - Вы знаете, где хранится 'temp_table'? Будет ли он сохранен в моем клиенте в памяти? На сервере? Требуется ли меньше места в памяти в виде таблицы, чем в файле csv? –

+0

Я не очень хорошо знаю Greenplum, но Postgres (и все остальные базы данных, которые я знаю) хранят свои таблицы только на стороне сервера.Что касается размера стола - это зависит. Скорее всего, это займет меньше места в двоичной форме в виде таблицы Greenplum. –

ответ

3
  1. , распределяемые как Greenplum определяет, какой сегмент будет хранить каждую строку. Поскольку Greenplum является базой данных MPP в большинстве производственных баз данных, у вас будет несколько серверных серверов. Вы хотите убедиться, что столбец «Распространение» - это столбец, который вы присоедините к usaly.

  2. temp_table - таблица, которая будет создана для вас в кластере Greenplum. Если вы не задали путь search_path к чему-то еще, это будет в общедоступной схеме.

1

Для вашего первого вопроса предложение DISTRIBUTE BY используется для указания серверу базы данных, как хранить базу данных на диске. (Create Table Documentation)

Я сразу увидел одну вещь, которая может быть неправильной в синтаксисе вашего предложения Join, где вы говорите on a.x = s.x -> нет таблицы, на которую ссылаются как s. Может быть, ваша проблема так же проста, как изменить это на on a.x = b.x?

Насколько хранится таблица temp, я считаю, что она обычно хранится на сервере базы данных. Это будет вопросом для вашего администратора базы данных, поскольку это элемент настройки при установке базы данных. Вы всегда можете сбросить данные в файл на вашем компьютере и загрузить в более позднее время, если вы хотите сохранить свои результаты (без печати).

0

Как я знаю, таблица tmp хранится в памяти. Это быстрее, когда данных меньше, и рекомендуется использовать временную таблицу. В противоположность, поскольку временная таблица хранится в памяти, если имеется слишком много данных, она будет потреблять очень большую память. Рекомендуется использовать обычные таблицы с распределенным предложением. Поскольку он будет распределен по вашему кластеру.

Кроме того, таблица tmp хранится в специальной схеме, поэтому вам не нужно указывать имя схемы при создании таблицы temp и она существует только в текущем соединении после закрытия текущего соединения postgresql автоматически отменит таблицу.

Смежные вопросы