Что я должен изменить, чтобы избежать ошибки Aurora MySQL 1034 при выполнении этого оператора INSERT? - PullRequest
0 голосов
/ 18 ноября 2018

Я постоянно получаю эту ошибку ( Код ошибки: 1034. Неверный файл ключа для таблицы '/ rdsdbdata / tmp / # sql_1709_0'; попытаться исправить ее ) в Amazon Web Services (AWS) Aurora MySQL 5.7когда я запускаю следующую инструкцию INSERT (или запускаю инструкцию SELECT в инструкции INSERT как отдельную инструкцию SELECT).

Что мне нужно изменить в операторе INSERT (или экземпляре AWS Aurora MySQL 5.7 или других компонентах экосистемы AWS), чтобы я не получил эту ошибку?(Меня не интересует, как восстановить временную таблицу, на которую ссылается сообщение об ошибке. Во-первых, я хочу избежать появления ошибки, поскольку этот оператор INSERT будет работать как часть более крупного сценария).

Оператор INSERT выглядит следующим образом:

INSERT INTO GEO_AREA ( Geo_Area_Nm,     Geo_Area_Abrv,      Geo_Area_Full_Qualfd_Nm,    Geo_Area_Full_Qualfd_Abrv,      
Geo_Area_Typ_CK,    Geo_Area_Prim_ID,   Last_Modfd_By_ID,   Crtd_By_ID  
)
  SELECT 
    Concat("Precinct ", S.PrecinctNumber) AS Geo_Area_Nm,  -- The plain Precinct identifier, preceded by the word "Precinct",
        -- without any county or state information added.
    S.PrecinctNumber AS Geo_Area_Abrv,  -- The plain Precinct identifier without any county or state information added.
    Concat(S.Jurisname, ", ", STATE.Geo_Area_Nm," - Precinct: ", 
        S.PrecinctNumber) AS Geo_Area_Full_Qualfd_Nm,  -- [Elector Jurisdiction name, State Name:] Precinct: [Precinct ID]      
    Concat(S.Jurisname, ", ", STATE.Geo_Area_Abrv," - Prcnct: ", 
        S.PrecinctNumber) AS Geo_Area_Full_Qualfd_Nm,  -- [Elector Jurisdiction name, State Name:] Precinct: [Precinct ID]
    @Prcnct_CK AS Geo_Area_Typ_CK, -- => Precinct
    Concat("US-", S.State, "-",S.Juriscode, "-Prcnct:", S.PrecinctNumber) AS Geo_Area_Prim_ID,
      -- Example: US-WY-5602100000-Prcnct:3 08
    Max(Concat("DTVF-", S.SourceID)) As Last_Modfd_By_ID,
    Max(Concat("DTVF-", S.SourceID)) As Crtd_By_ID
  FROM VW_STG_DATA_TRUST_VOTR_INSERT S 
    LEFT JOIN GEO_AREA STATE -- STATE is the source of the State name and abbreviation that was loaded in Initial LOAD
      ON Concat('US-',S.State) = STATE.Geo_Area_Prim_ID 
    LEFT JOIN GEO_AREA EXIST_GA  -- EXIST_GA is the set of records in GEO_AREA before this insert
      ON Concat("US-", S.State, "-",S.Juriscode, "-Prcnct:", S.PrecinctNumber) = EXIST_GA.Geo_Area_Prim_ID
  WHERE STATE.Geo_Area_Typ_CK = @State_CK -- => Connection for US State level info
    -- AND Concat(S.JurisName, ",  ", STATE.Geo_Area_Nm) = 'Abbotsford City,  Wisconsin'
    AND EXIST_GA.Geo_Area_Prim_ID IS NULL
  GROUP BY 1,2,3,4,5,6
;

Я предпринял следующие шаги, чтобы попытаться исправить проблему, ни одна из которых не сработала:

⦁ Удаление и повторное создание целевой таблицы (GEO_AREA) в том же экземпляре базы данных AWS Aurora MySQL.

⦁ Остановка и перезапуск экземпляра RDS.

⦁ Создание новогоЭкземпляр базы данных AWS Aurora MySQL 5.7 (wpai-archimedes-dev-dbi) и создание и загрузка в него довольно небольшого набора таблиц и представлений (включая те, которые необходимы для поддержки этого оператора INSERT).Поэтому я не думаю, что это проблема дискового пространства.

Справочная информация:

⦁ Этот оператор INSERT (и оператор SELECT внутри него) получают данные избольшая промежуточная таблица / представление, которое содержит одну строку на человека / избирателя и пытается загрузить одну строку на каждый [Электоральный] участок в таблицу географической области (GEO_AREA).В промежуточной таблице / представлении может быть много строк, в которых содержатся избиратели в одном избирательном участке.

⦁ У меня есть два одинаково структурированных оператора INSERT, которые загружают по одной строке для каждого округа, и систему Electoral Jurisdiction в таблицу GEO_AREA.Эти два оператора вставки работают правильно (без ошибок).Пример оператора вставки, который правильно загружает графы, находится в нижней части описания этого случая.

⦁ После получения этой ошибки я все еще могу выполнить другие запросы SQL к таблице GEO_AREA без получения ошибки, например,

SELECT * FROM GEO_AREA WHERE Geo_Area_Typ_CK in (252, 255) order by 6 desc, 4;

⦁ Строки для географических областей на уровне страны и штата / провинции загружаются в GEO_AREA из файла .csv на моем ноутбуке с помощью команды LOAD DATA LOCAL INFILE.

⦁ Я пробовалэтот оператор INSERT в двух отдельных экземплярах базы данных Aurora MySQL.Тип экземпляра в обоих случаях - db.r4.xlarge.Первый экземпляр БД (экземпляр, на который ссылается этот случай технической поддержки) был загружен из файла .csv объемом 1,002 ГБ (случайная выборка из 1 млн. Записей избирателей из всех 50 штатов США), которая в настоящее время использует 1,333 ГБ дискового пространства во всехтаблицы и показывает (в результатах снимка, сделанного сегодня утром), что экземпляр использует 1 ГБ дискового пространства.Второй экземпляр был загружен из файла CSV объемом 4,623 ГБ (записи 4M, описывающего всех избирателей в штате Теннесси), который в настоящее время использует 3,727 ГБ дискового пространства во всех таблицах, и показывает (опять же, результаты из снимка, сделанного этим утром) что экземпляр использует 7 ГБ дискового пространства.

1 Ответ

0 голосов
/ 18 ноября 2018

Я обнаружил проблему: я использовал один и тот же псевдоним (Geo_Area_Full_Qualfd_Nm) для двух отдельных столбцов в предложении SELECT. Я не знаю, почему он сгенерировал сообщение об ошибке (код 1034), в котором упоминалось исправление временной таблицы. Кажется, я помню, что делал то же самое раньше в другом контексте несколько недель назад и получал сообщение об ошибке, которое намного более четко идентифицировало проблему, и это привело меня к гораздо более быстрому решению проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...