У меня есть несколько больших файлов резервных копий MySQL из разных БД с разными схемами. Я хочу загрузить резервные копии в наш EDW, но не хочу загружать пустые таблицы.
Сейчас я вырезаю пустые таблицы с помощью AWK для файлов резервных копий, но мне интересно, есть ли лучший способ сделать это.
Если кому-то интересно, это мой скрипт на AWK:
РЕДАКТИРОВАТЬ: сегодня я заметил, что этот скрипт имеет некоторые проблемы, пожалуйста, будьте осторожны, если вы действительно хотите попробовать его использовать. Ваш вывод может быть НЕПРАВИЛЬНЫМ ... Я опубликую свои изменения по мере их внесения.
# File: remove_empty_tables.awk
# Copyright (c) Northwestern University, 2010
# http://edw.northwestern.edu
/^--$/ {
i = 0;
line[++i] = $0; getline
if ($0 ~ /-- Definition/) {
inserts = 0;
while ($0 !~ / ALTER TABLE .* ENABLE KEYS /) {
# If we already have an insert:
if (inserts > 0)
print
else {
# If we found an INSERT statement, the table is NOT empty:
if ($0 ~ /^INSERT /) {
++inserts
# Dump the lines before the INSERT and then the INSERT:
for (j = 1; j <= i; ++j) print line[j]
i = 0
print $0
}
# Otherwise we may yet find an insert, so save the line:
else line[++i] = $0
}
getline # go to the next line
}
line[++i] = $0; getline
line[++i] = $0; getline
if (inserts > 0) {
for (j = 1; j <= i; ++j) print line[j]
print $0
}
next
} else {
print "--"
}
}
{
print
}