Настройка
Ubuntu 18.04 Google VM
Цель
Я пытаюсь создать для l oop, который будет импортировать различные клиентские файлы данных в соответствующая таблица клиентов.
Проверка запроса. sh
#!/bin/bash
set -eu
date=$(date "+%Y%m%d")
for f in $(find $date*.tsv); do
client=$(echo $f | sed -Ee 's/.csv.tsv//' -e 's/[0-9]+_stuff_stuff_//')
sqlite3 mydatabase.db "create table if not exists $client (Date integer, Viewability integer, id1 integer, id2 integer, id3 integer, id4 integer, id5 integer, id6 integer, id7 integer, id8 integer, id9 integer, id10 integer, id11 integer, id12 integer, id13 integer, id14 integer, id15 integer, id16 integer, id17 integer, id18 integer, id19 integer, id20 integer);"
printf ".mode tsv\n.import $f $client\n" | sqlite3 mydatabase.db
done
Обновленный тест. sh
#!/bin/bash
set -eu
date=$(date "+%Y%m%d")
for f in $date*.tsv; do
client=$(echo "$f" | sed -Ee 's/.csv.tsv//' -e 's/[0-9]+_stuff_stuff_//')
sqlite3 -batch mydatabase.db
<<EOF
"create table if not exists $client (Date integer, Viewability integer, id1 integer, id2 integer, id3 integer, id4 integer, id5 integer, id6 integer, id7 integer, id8 integer, id9 integer, id10 integer, id11 integer, id12 integer, id13 integer, id14 integer, id15 integer, id16 integer, id17 integer, id18 integer, id19 integer, id20 integer);"
.mode tabs
.import "$f" $client
EOF
done
Ошибка
expected 22 columns but found 1 - filling the rest with NULL
Из того, что я понял, sqlite3 не обрабатывает новые строки так же, как мой первоначальный запрос выглядел так, чтобы все выполнялось в одной строке с каждой командой, следующей за другой, или с ";" разделители для новых строк. Исследовав интернет-людей, мы отметили, что чтобы вывести код в одну строку, мне нужно изменить формат на что-то вроде того, что я использовал с преднамеренными перерывами \n
. Однако, когда я запускаю код, он, похоже, не читает мои файлы как файл tsv
и поэтому находит только 1 столбец. Может ли кто-нибудь подтвердить, что мне не хватает моего кода или неправильного понимания? Я могу только предположить, что это формат, поскольку я могу выполнить импорт вручную без проблем, но я изо всех сил пытаюсь понять, почему новый код не будет принят в этом формате. Любая помощь приветствуется.