Dataform에서 JavaScript 사용

이 문서는 JavaScript를 사용하여 Dataform에서 워크플로를 개발하는 방법을 이해하는 데 도움이 됩니다. 이 문서에서는 JavaScript를 사용하여 워크플로 작업을 만드는 방법과 Dataform에서 코드를 재사용하기 위해 JavaScript include를 만드는 방법도 보여줍니다.

Dataform Core를 사용하면 SQLX 및 JavaScript로 워크플로 작업을 만들 수 있습니다. 선택사항이지만 SQLX와 함께 JavaScript를 사용하여 워크플로에서 유사한 요소를 반복적으로 만듭니다. 예를 들어 JavaScript를 사용하여 특정 사용자 ID가 삭제된 워크플로에서 각 테이블의 뷰를 만들 수 있습니다. JavaScript만으로 워크플로 작업을 개발할 수도 있습니다.

시작하기 전에

  1. Google Cloud 콘솔에서 Dataform 페이지로 이동합니다.

    Dataform으로 이동

  2. 저장소를 선택하거나 만듭니다.

  3. 개발 작업공간을 선택하거나 만듭니다.

또한 JavaScript 문법과 다음 JavaScript 개념을 잘 알고 있어야 합니다.

  • 변수
  • 배열
  • 조건문
  • for 루프
  • 지도
  • 함수
  • 객체
  • 모듈 내보내기 및 가져오기

필요한 역할

JavaScript로 워크플로를 개발하고 JavaScript include로 코드를 재사용하는 데 필요한 권한을 얻으려면 관리자에게 작업공간의 Dataform 편집자 (roles/dataform.editor) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

SQLX 파일에 JavaScript 코드 추가

인라인 또는 JavaScript 블록 내부에서 두 가지 방법으로 SQLX 파일에 JavaScript 코드를 추가할 수 있습니다.

JavaScript 블록을 사용하여 SQLX 파일에 함수 또는 상수를 정의할 수 있습니다. 인라인 JavaScript를 사용하여 SQLX 또는 SQL 쿼리를 동적으로 수정할 수 있습니다.

다음 코드 샘플은 SQLX 파일의 post_operations 블록에 인라인으로 추가된 self Dataform Core 기본 제공 JavaScript 함수를 보여줍니다.

config {type: "table"}

SELECT * FROM ...

post_operations {
  GRANT `roles/bigquery.dataViewer`
  ON
  TABLE ${self()}
  TO "group:allusers@example.com", "user:otheruser@example.com"
}

다음 코드 샘플은 JavaScript 블록에서 정의되고 SQLX 파일의 쿼리 내부에서 인라인으로 사용되는 상수를 보여줍니다.

js {
  const columnName = "foo";
}

SELECT 1 AS ${columnName} FROM "..."

JavaScript 캡슐화를 통해 단일 SQLX 파일에서 코드 재사용

JavaScript 코드를 재사용하여 Dataform에서 개발을 간소화할 수 있습니다. 단일 SQLX 파일에서 JavaScript 상수 및 함수를 재사용하려면 JavaScript 블록에 캡슐화하면 됩니다. 단일 Dataform 저장소에 JavaScript 코드를 재사용하려면 include를 만들면 됩니다. 여러 Dataform 저장소에서 JavaScript 코드를 재사용하려면 패키지를 만들거나 가져오면 됩니다.

단일 SQLX 파일 내에서 재사용할 수 있는 SQL 코드의 반복 부분을 만들려면 JavaScript 블록에 함수 및 상수를 캡슐화하면 됩니다. 블록이 정의된 SQLX 파일 내에서만 JavaScript 블록에 정의된 코드를 재사용할 수 있습니다. 자세한 내용은 Dataform Core를 참고하세요.

다음 코드 샘플은 JavaScript 블록에서 정의되고 SQLX 파일의 쿼리 내부에서 인라인으로 사용되는 상수 및 함수를 보여줍니다.

js {
 const foo = 1;
 function bar(number){
     return number+1;
 }
}

select
 ${foo} as one,
 ${bar(foo)} as two

include를 사용하여 단일 저장소에서 코드 재사용

include는 저장소의 전역 JavaScript 상수 또는 함수입니다. 저장소의 includes 디렉터리에서 include를 정의합니다. 그런 다음 JavaScript 및 SQLX 파일의 저장소에서 이를 재사용할 수 있습니다.

다음 코드 샘플은 includes/constants.js 파일에 있는 launch_date 상수의 정의를 보여줍니다.

// filename is includes/constants.js
const launch_date = "11.11.2011";
module.exports = { launch_date };

다음 코드 샘플은 SQLX 파일의 테이블 정의 쿼리에서 참조되는 launch_date 상수를 보여줍니다.

config {type: "table"}

SELECT * FROM source_table WHERE date > ${constants.launch_date}

include용 JavaScript 파일 만들기

includes/ 디렉터리에 새 JavaScript 파일을 만들려면 다음 단계를 따르세요.

  1. 파일 창에서 includes/ 옆에 있는 더보기를 클릭합니다.

  2. 파일 만들기를 클릭합니다.

  3. 새 파일 만들기 창에서 다음을 수행합니다.

    1. 파일 경로 추가 필드에 includes/ 다음에 파일 이름을 입력하고 .js를 입력합니다. 예를 들면 includes/constants.js입니다.

      파일 이름에는 숫자, 문자, 하이픈, 밑줄만 포함할 수 있습니다.

    2. 파일 만들기를 클릭합니다.

JavaScript 상수 만들기

프로젝트 전체에서 재사용할 수 있는 상수를 만들려면 다음 단계를 따르세요.

  1. 개발 작업공간으로 이동합니다.

  2. 파일 창에서 includes/를 펼칩니다.

  3. .js 확장자로 JavaScript 파일을 만들거나 선택합니다.

  4. 파일에 다음 코드 스니펫을 입력합니다.

     const CONSTANT_NAME = CONSTANT_VALUE;
     module.exports = { CONSTANT_NAME };
    

    다음을 바꿉니다.

    • CONSTANT_NAME: 상수 이름
    • CONSTANT_VALUE: 상수 값
  5. (선택사항): 형식을 클릭합니다.

다음 코드 샘플은 includes/constants.js 파일에서 PROJECT_ID 상수를 정의합니다.

  // filename is includes/constants.js
  const PROJECT_ID = "my_project_name";
  module.exports = { PROJECT_ID };

다음 코드 샘플은 SQLX 파일의 테이블 정의 쿼리에서 PROJECT_ID 상수를 참조합니다.

  config { type: "table" }
  SELECT * FROM ${constants.PROJECT_ID}.my_schema_name.my_table_name

다음 코드 샘플은 SQL에 컴파일된 이전 Dataform Core 테이블 정의 쿼리를 보여줍니다.

  SELECT * FROM my_project_name.my_schema_name.my_table_name

커스텀 JavaScript 함수 만들기

프로젝트 전체에서 재사용할 수 있는 커스텀 JavaScript 함수를 만들려면 다음 단계를 따르세요.

  1. 개발 작업공간으로 이동합니다.

  2. 파일 창에서 includes/를 펼칩니다.

  3. .js 확장자로 JavaScript 파일을 만들거나 선택합니다.

  4. 파일에서 커스텀 JavaScript 함수를 작성합니다.

  5. 파일에 다음 코드 스니펫을 입력합니다.

     module.exports = { FUNCTION_NAME }
    

    FUNCTION_NAME을 함수의 이름으로 바꿉니다.

  6. (선택사항): 형식을 클릭합니다.

다음 코드 샘플은 renderScript라는 커스텀 JavaScript 함수를 보여주며, 이 함수는 includes/functions.js 파일에 저장됩니다. 이 함수는 SQL 스크립트를 생성합니다.

  function renderScript(table, dimensions, metrics) {
    return `
        select
        ${dimensions.map(field => `${field} as ${field}`).join(",")},
        ${metrics.map(field => `sum(${field}) as ${field}`).join(",\n")}