Python to Azure SQL INSERT очень медленный [дубликат]

Это фактически не имеет ничего общего с значениями по умолчанию, кроме того, что часто возникает неожиданное поведение при записи функций с изменяемыми значениями по умолчанию.

>>> def foo(a):
    a.append(5)
    print a

>>> a  = [5]
>>> foo(a)
[5, 5]
>>> foo(a)
[5, 5, 5]
>>> foo(a)
[5, 5, 5, 5]
>>> foo(a)
[5, 5, 5, 5, 5]

В этом нет значений по умолчанию код, но вы получаете точно такую ​​же проблему.

Проблема в том, что foo является изменением изменчивой переменной, переданной от вызывающего, когда вызывающий объект не ожидает этого , Код, подобный этому, был бы хорош, если бы функция была вызвана как-то вроде append_5; то вызывающий абонент будет вызывать функцию, чтобы изменить значение, которое они передают, и поведение будет ожидаться. Но такая функция вряд ли примет аргумент по умолчанию и, вероятно, не вернет список (поскольку у вызывающего уже есть ссылка на этот список, тот, который он только что передал).

Ваш оригинал foo с аргументом по умолчанию не должен изменять a, был ли он явно передан или получил значение по умолчанию. Ваш код должен оставлять изменчивые аргументы отдельно, если из контекста / имени / документации не ясно, что аргументы должны быть изменены. Использование измененных значений, передаваемых в качестве аргументов, таких как локальные временные файлы, является крайне плохой идеей, независимо от того, находимся ли мы на Python или нет, и есть ли задействованные аргументы по умолчанию.

Если вам нужно разрушить локальное временное в процессе вычисления чего-то, и вам нужно начать свою манипуляцию из значения аргумента, вам нужно сделать копию.

14
задан Snowy 15 June 2011 в 04:18
поделиться

5 ответов

BCP - это один из способов сделать это.

Это сообщение объясняет это тремя легкими шагами: Массовая вставка с Azure SQL

7
ответ дан Jeffrey Rosselle 21 August 2018 в 06:29
поделиться
  • 1
    BCP 80gb-файл для azure занимает 12 часов. Если я вкладываю в лоток, он занимает 2 часа. Есть ли какие-нибудь советы, например, bcping из локального файла в лазури? – MIKE 2 December 2017 в 00:11
  • 2
    @MIKE вы пытались запустить командную форму и Azure VM внутри одного и того же центра обработки данных? Вы можете поместить файл 80gig в папку хранения Azure File, которая сделает его доступным для виртуальной машины. – Jeffrey Rosselle 4 December 2017 в 11:09
  • 3
    Похоже на умную идею. Я попробую это. Знаете ли вы, что лазурь дросселирует bcp (замедляет вставки) на стандартном уровне против премиального уровня? При вставке я заметил, что он делает около десяти 1000 вставок, а затем задержка на 30 секунд, я не уверен, что ее дросселирует мой локальный компьютер или лазурь. (не мой локальный компьютер, это сервер) – MIKE 4 December 2017 в 19:23
  • 4
    @MIKE У меня нет опыта с этим, так что не мог сказать. Возможно, вам захочется обновить базу данных Azure SQL до более сильного уровня, так как вы хотите получить большое количество DTU. Это может замедлить его. – Jeffrey Rosselle 5 December 2017 в 09:41
  • 5
    Я переехал в vm на том же складе, и bcp очень быстро. Я не тестировал скорость bcp от стандартного до премиального, но я столкнулся с проблемой на стандарте, где tempdb забросил ошибку за слишком большую, когда я удалял дубликаты из большой таблицы, мне пришлось переключиться на премию, которая не жаловалась – MIKE 8 December 2017 в 18:06

Вы на правильном пути. API Bulk Copy будет работать. Я использую его. И это самый быстрый способ импорта данных, поскольку он использует инструкции INSERT BULK. Не путать с оператором BULK INSERT, который не поддерживается в SQL Azure. По сути, BCP и API SqlBulkCopy используют тот же метод.

3
ответ дан Herve Roggero 21 August 2018 в 06:29
поделиться

http://www.solidq.com/sqj/Pages/2011-May-Issue/Migrating-Data-into-Microsofts-Data-Platform-SQL-Azure.aspx для подробного анализ доступных вариантов

2
ответ дан paras_doshi 21 August 2018 в 06:29
поделиться

Я думаю, что важно отметить, что BCP не может обрабатывать исходные файлы, которые являются Unicode, при использовании файла формата для импорта.

1
ответ дан Reza Shirazian 21 August 2018 в 06:29
поделиться
Другие вопросы по тегам:

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