Dataform에서 패키지 만들기

이 문서에서는 Dataform에서 SQL 워크플로를 개발하는 데 사용할 수 있는 커스텀 JavaScript 패키지를 만드는 방법을 보여줍니다.

여러 Dataform 저장소에서 재사용할 수 있는 패키지를 만들려면 패키지 전용 Dataform 저장소를 만들고 제3자 Git 저장소에 연결하여 다른 Dataform 저장소에서 사용할 수 있도록 해야 합니다.

그런 다음 최상위 index.js 파일을 만들고 내보낼 수 있는 패키지 콘텐츠(예: 함수 및 상수)를 파일에 추가해야 합니다. Dataform에서 만든 패키지의 예시는 GitHub의 dataform-package-base를 참조하세요.

패키지를 만들면 패키지를 다른 Dataform 저장소에 설치하고 패키지에서 내보낼 수 있는 콘텐츠(예: 상수 및 함수)를 사용하여 SQL 워크플로를 개발할 수 있습니다.

패키지를 만드는 대신 include로 단일 Dataform 저장소에서 JavaScript 함수 및 상수를 재사용할 수 있습니다. 자세한 내용은 Dataform에서 include로 변수 및 함수 재사용을 참조하세요.

시작하기 전에

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

    Dataform 페이지로 이동

  2. 패키지 전용 Dataform 저장소를 만듭니다. 저장소 이름을 패키지 이름과 일치시킵니다.

  3. 패키지를 호스팅하는 제3자 Git 저장소에 저장소를 연결합니다.

  4. Dataform 저장소에 작업공간을 만들고 초기화합니다.

필요한 역할

패키지를 만드는 데 필요한 권한을 얻으려면 관리자에게 저장소에 대한 Dataform 관리자(roles/dataform.admin) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

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

Dataform에서 패키지 만들기

Dataform에서 재사용할 수 있는 JavaScript 코드로 자체 패키지를 만들려면 작업공간에서 다음 단계를 따르세요.

  1. 파일 창에서 더보기 메뉴를 클릭합니다.

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

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

    2. 파일 경로 추가 필드에 index.js를 입력합니다.

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

  3. index.js 파일에서 패키지를 내보낼 JavaScript 코드를 입력합니다.

    1. 다음 형식으로 상수를 만듭니다.

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

      다음을 바꿉니다.

      • CONSTANT_NAME: 상수 이름
      • CONSTANT_VALUE: 상수 값
    2. 함수를 다음 형식으로 만듭니다.

    function FUNCTION_NAME(PARAMETERS) { FUNCTION_BODY }
    
    module.exports = { FUNCTION_NAME }
    

    다음을 바꿉니다.

    • FUNCTION_NAME: 함수 이름
    • PARAMETERS: 함수의 매개변수
    • FUNCTION_BODY: 함수를 실행할 코드
  4. (선택사항): 형식을 클릭합니다.

  5. (선택사항): definitions 디렉터리에 내보내지 않을 패키지 코드를 추가합니다.

  6. 변경사항을 커밋하고 푸시합니다.

다음 패키지 코드 샘플은 getDomain 함수를 내보내는 postoffice 패키지의 index.js 파일을 보여줍니다.

// filename index.js
// package name postoffice

const GENERIC_DOMAINS = "('samplemail.com','samplemail.co.uk','examplemailbox.com'";

function getDomain(email) {
  let cleanEmail = `trim(${email})`
  const domain = `substr(${cleanEmail}, strpos(${cleanEmail}, '@') + 1)`;
  return `case
            when ${domain} in ${common.GENERIC_DOMAINS} then ${cleanEmail}
            when ${domain} = "othermailbox.com" then "other.com"
            when ${domain} = "mailbox.com" then "mailbox.global"
            when ${domain} = "support.postman.com" then "postman.com"
            else ${domain}
          end`;
}

module.exports = { getDomain }

다음 단계