그때까지 Vignette Come, 사용자에게 발표 된 대화를 확인하십시오! 2018 회의 :
데이터베이스에 연결할 수 있으려면 연결 매개 변수를 YAML 파일로 지정합니다.
sqlite :
drv : !expr RSQLite::SQLite()
dbname : !expr tempfile()
기본적으로 dbr
현재 작업 디렉토리에서 db_config.yaml
이라는 파일을 찾아 dbr.db_config_path
Global 옵션 (예 :이 패키지의 구성)을 통해 재정의 할 수 있습니다.
options( dbr.db_config_path = system.file( ' example_db_config.yaml ' , package = ' dbr ' ))
Rstudio가 호스팅하는 데이터베이스에 대한 MySQL 연결을 설명하는 데모 YAML 파일의보다 복잡한 예 (공개 사용자 이름 및 비밀번호 포함) :
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 청크를 재사용하려면 example_sql_chunks.yaml
의 번들 예제 구성과 같이 구조화 된 YAML 파일에 SQL 쿼리 (또는 그 일부)를 나열 할 수 있습니다.
sql_chunk_files
사용하여 현재 사용되는 SQL 템플릿 Yaml 파일을 나열하거나 업데이트하십시오.
sql_chunk_files(system.file( ' example_sql_chunks.yaml ' , package = ' dbr ' ))
그런 다음 해당 정의의 키를 도트로 분리 한 계층 구조의 키로 구성된 문자열로 참조 할 수 있으므로 아래 정의 ( example_sql_chunks.yaml
의 일부)를 살펴 봅니다.
dbr :
shinydemo :
countries :
count : SELECT COUNT(*) FROM Country
dbr
의 shinydemo
섹션의 countries
항목에 대한 count
키를 얻으려면 다음과 같은 작업을 수행 할 수 있습니다.
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 청크는 sql
파일 확장자와 함께 YAML 외부의 파일에 정의 될 수 있으며 Yaml 파일에 태그를 !include
.
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
Country
관련 하위 쿼리가 dbr.shinydemo.countries.europe
키에 지정된 경우 :
SELECT Name
FROM City
WHERE CountryCode IN (
{sql_chunk( ' dbr.shinydemo.countries.europe ' , indent_after_linebreak = 2 )})
indent_after_linebreak
매개 변수는 쿼리의 화장품 업데이트에 대한 것이며 SQL 문의 동일한 문자의 FROM
와 WHERE
맞추기위한 것입니다.
더 복잡한 / 중첩 된 예 :
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')))