Vignette появится до тех пор, пожалуйста, проверьте разговор, представленные у пользователя! Конференция 2018 года:
Чтобы иметь возможность подключиться к базе данных, параметры подключения должны быть указаны в файле YAML, например, для создания базы данных SQLite в временном файле:
sqlite :
drv : !expr RSQLite::SQLite()
dbname : !expr tempfile()
По умолчанию dbr
будет искать файл с именем db_config.yaml
в текущем рабочем каталоге, который можно переопределить с помощью глобальной опции dbr.db_config_path
, например, в примере конфигурации в этом пакете:
options( dbr.db_config_path = system.file( ' example_db_config.yaml ' , package = ' dbr ' ))
Более сложный пример из демо -файла YAML, описывающего соединение MySQL с базой данных, размещенной RSTUDIO (с публичным именем пользователя и паролем):
shinydemo :
drv : !expr RMySQL::MySQL()
host : shiny-demo.csa7qlmguqrf.us-east-1.rds.amazonaws.com
username : guest
password : guest
dbname : shinydemo
Обратите внимание, что вместо простых строк вы также можете указать, как пароли, заполненные KMS, другие секреты и параметры, например:
redshift :
host : !aws_kms |
KMSencryptedciphertext...
port : 5439
dbname : dbname
user : username
drv : !expr RPostgreSQL::PostgreSQL()
password : !aws_kms |
KMSencryptedciphertext...
s3_copy_bucket : !attr |-
's3://openmail-model/temp'
s3_copy_iam_role : !attr |-
arn:aws:iam::accountid:role/redshift_role
Как только параметры подключения загружаются из файла конфигурации, внесение запросов SQL так же просто, как указание оператора SQL и имя соединения:
db_query( ' show tables ' , ' shinydemo ' )
# > INFO [2019-01-06 01:06:18] Connecting to shinydemo
# > INFO [2019-01-06 01:06:19] Executing:**********
# > INFO [2019-01-06 01:06:19] show tables
# > INFO [2019-01-06 01:06:19] ********************
# > INFO [2019-01-06 01:06:19] Finished in 0.1336 secs returning 3 rows
# > INFO [2019-01-06 01:06:19] Closing connection to shinydemo
# > Tables_in_shinydemo
# > 1 City
# > 2 Country
# > 3 CountryLanguage
Для более расширенного использования, например, подключений к базе данных к кэшированию, проверьте ?db_connect
и вышеупомянутая виньетка.
Чтобы повторно использовать куски SQL, вы можете перечислить ваши запросы SQL (или его части) в структурированном файле YAML, как в комплекте примера примера AT example_sql_chunks.yaml
Используйте sql_chunk_files
, чтобы перечислить или обновить используемый в настоящее время шаблон SQL YAML FILE (например, через
sql_chunk_files(system.file( ' example_sql_chunks.yaml ' , package = ' dbr ' ))
Затем вы можете ссылаться на любой ключ в этом определении по строке, которая состоят из ключей в иерархии, разделенных точкой, поэтому посмотрите на приведенное ниже определение (часть example_sql_chunks.yaml
):
dbr :
shinydemo :
countries :
count : SELECT COUNT(*) FROM Country
Получив ключ с count
для предмет countries
в разделе shinydemo
dbr
, вы можете сделать что -то вроде:
sql_chunk( ' dbr.shinydemo.countries.count ' )
# > SELECT COUNT(*) FROM Country
И передайте его сразу же db_query
:
countries <- db_query(sql_chunk( ' dbr.shinydemo.countries.count ' ), ' shinydemo ' )
# > INFO [2019-01-06 01:33:33] Connecting to shinydemo
# > INFO [2019-01-06 01:33:34] Executing:**********
# > INFO [2019-01-06 01:33:34] SELECT COUNT(*) FROM Country
# > INFO [2019-01-06 01:33:34] ********************
# > INFO [2019-01-06 01:33:34] Finished in 0.1291 secs returning 1 rows
# > INFO [2019-01-06 01:33:34] Closing connection to shinydemo
Куски SQL также могут быть определены в файлах за пределами YAML с расширениями файла sql
и ссылаются с помощью !include
тег в файл YAML, например:
dbr :
shinydemo :
countries :
europe : !include europe.sql
Это будет читать содержание europe.sql
и сделает его доступным как sql_chunk('dbr.shinydemo.countries.count')
.
Помимо файлов, папка с файлами sql
также может быть включена - в этом случае базовое имя файла (без расширения файла sql
) станет ключом под заданным ключом. Например, рассмотрим это определение YAML:
cities : !include cities.sql
Загрузит все файлы из папки cities.sql
и сделает их доступными в рамках europe
, поэтому приведет к промежуточному YAML как:
cities: !include cities.sql
europe: |-
SELECT Name
FROM City
WHERE CountryCode IN (
{sql_chunk('dbr.shinydemo.countries.europe', indent_after_linebreak = 2)})
europe_large: |-
SELECT Name
FROM City
WHERE
Population > 1000000 AND
Name IN (
{sql_chunk('dbr.shinydemo.cities.europe', indent_after_linebreak = 4)}))
Если ключ каталога !include
это ~!
, затем ключи становятся доступными в родительском узле, так что например
cities:
~!: !include cities.sql
На самом деле не создаст ключа cities
, а только ключи europe
и europe_large
в корневом узле.
Как вы можете видеть из вышеизложенного, основная сила этого подхода к шаблоне заключается в том, что вы можете легко использовать куски SQL, например, для списка европейских стран в:
cities <- db_query(sql_chunk( ' dbr.shinydemo.cities.europe ' ), ' shinydemo ' )
# > INFO [2019-01-06 01:32:02] Connecting to shinydemo
# > INFO [2019-01-06 01:32:02] Executing:**********
# > INFO [2019-01-06 01:32:02] SELECT Name
# > FROM City
# > WHERE CountryCode IN (
# > SELECT Code
# > FROM Country
# > WHERE Continent = 'Europe')
# > INFO [2019-01-06 01:32:02] ********************
# > INFO [2019-01-06 01:32:02] Finished in 0.1225 secs returning 643 rows
# > INFO [2019-01-06 01:32:02] Closing connection to shinydemo
Где в dbr.shinydemo.countries.europe
был указан Country
подборочка.
SELECT Name
FROM City
WHERE CountryCode IN (
{sql_chunk( ' dbr.shinydemo.countries.europe ' , indent_after_linebreak = 2 )})
Параметр indent_after_linebreak
предназначен только для косметических обновлений в запросе, чтобы выровнять FROM
и WHERE
на том же символе в операторе SQL.
Еще более сложный / вложенный пример:
sql_chunk( ' dbr.shinydemo.cities.europe_large ' )
# > SELECT Name
# > FROM City
# > WHERE
# > Population > 1000000 AND
# > Name IN (
# > SELECT Name
# > FROM City
# > WHERE CountryCode IN (
# > SELECT Code
# > FROM Country
# > WHERE Continent = 'Europe')))