Изменить табличное пространство по умолчанию с помощью dbWriteTable в R - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь записать в таблицу в DB2, используя overwrite = TRUE с dbWriteTable() из пакета DBI в R. Я хотел бы указать табличное пространство, в которое я пишу, а не в пространство по умолчанию (USERSPACE1 ). Я также предпочел бы не создавать таблицу заранее и использовать append = TRUE, потому что она, как правило, занимает НАМНОГО дольше, чем перезапись (у меня примерно 4 миллиона строк с разным количеством столбцов каждый раз, когда я пишу ее; минимум 100 столбцов). Перезапись переключает табличное пространство обратно на значение по умолчанию.

Сначала я попытался создать таблицу и определить табличное пространство, но это требует добавления, а не перезаписи. Я также попытался создать таблицу в табличном пространстве, в котором я ее хочу, и затем перезаписать, но таблица возвращается к табличному пространству по умолчанию. Аргументы для dbWriteTable не поддерживают изменение табличного пространства.

###################################
### Method One - Takes Too Long ###
###################################
# `variable_definitions` defines my variable types

query <- paste(
  '
  CREATE TABLE MYSCHEMA.TABLE_NAME
  (',variable_definitions,')
  IN "DESIRED_SPACE" DISTRIBUTE BY HASH ("FIELD_ONE")
  COMPRESS YES;
  '
  , sep = ''
) 

# This works to create the table in the desired table space
dbExecute(edw_advanl, query)
## 0

# This takes FOREVER
dbWriteTable(conn = myConn,
             name = "TABLE_NAME",
             value = myData,
             append = TRUE)


##########################################################
### Method Two - Changes the Table Space to USERSPACE1 ###
##########################################################
# `variable_definitions` defines my variable types

query <- paste(
  '
  CREATE TABLE MYSCHEMA.TABLE_NAME
  (',variable_definitions,')
  IN "DESIRED_SPACE" DISTRIBUTE BY HASH ("FIELD_ONE")
  COMPRESS YES;
  '
  , sep = ''
) 

# Again, this works to create the table in the desired table space
dbExecute(edw_advanl, query)
## 0

# This now puts the table in the default table space
dbWriteTable(conn = myConn,
             name = "TABLE_NAME",
             value = myData,
             overwrite = TRUE)

Мой желаемый результат состоит в том, чтобы myData (R dataframe) записывался в табличное пространство DESIRED_SPACE как можно быстрее. В настоящее время я использую dbWriteTable, но я открыт для других методов.

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