blob: bc898de44c05d3c0e920212bec391215ab85c2bf [file] [log] [blame]
<!--
Javascript to render AIRFLOW-XXX and PR references in text
as HTML links.
Overrides extrahead block from sphinx_rtd_theme
https://www.sphinx-doc.org/en/master/templating.html
-->
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>airflow.contrib.hooks.bigquery_hook &mdash; Airflow Documentation</title>
<link rel="stylesheet" href="../../../../_static/_gen/css/main.min.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../../_static/_gen/css//main-custom.min.css" />
<link rel="stylesheet" type="text/css" href="../../../../_static/graphviz.css" />
<link rel="stylesheet" type="text/css" href="../../../../_static/_gen/css//main-custom.min.css" />
<link rel="shortcut icon" href="../../../../_static/pin_32.png"/>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
<script>
</script>
<style>
</style>
</head><body class="td-section">
<header>
<nav class="js-navbar-scroll navbar">
<div class="navbar__icon-container">
<a href="/">
<svg xmlns="http://www.w3.org/2000/svg" width="155.314" height="60" viewBox="0 0 155.314 60">
<defs>
<clipPath id="clip-path">
<path id="Rectangle_1" d="M0 0h155.314v60H0z" fill="none" data-name="Rectangle 1"></path>
</clipPath>
</defs>
<g id="logo" transform="translate(-1305 -780.355)">
<g id="Group_2" clip-path="url(#clip-path)" data-name="Group 2" transform="translate(1305 780.355)">
<g id="Group_1" data-name="Group 1" transform="translate(.486 .486)">
<path id="Path_1" d="M1307.562 880.867l28.187-28.893a.521.521 0 0 0 .063-.666c-1.714-2.393-4.877-2.808-6.049-4.416-3.472-4.763-4.353-7.459-5.845-7.292a.456.456 0 0 0-.271.143l-10.182 10.438c-5.858 6-6.7 19.225-6.852 30.3a.552.552 0 0 0 .949.386z" fill="#017cee" data-name="Path 1" transform="translate(-1306.613 -822.232)"></path>
<path id="Path_2" d="M1405.512 908.489l-28.893-28.189a.521.521 0 0 0-.667-.063c-2.393 1.715-2.808 4.877-4.416 6.049-4.763 3.472-7.459 4.353-7.292 5.845a.456.456 0 0 0 .143.27l10.438 10.182c6 5.858 19.225 6.7 30.3 6.852a.552.552 0 0 0 .387-.946z" fill="#00ad46" data-name="Path 2" transform="translate(-1346.876 -850.567)"></path>
<path id="Path_3" d="M1373.909 902.252c-3.28-3.2-4.8-9.53 1.486-22.583-10.219 4.567-13.8 10.57-12.039 12.289z" fill="#04d659" data-name="Path 3" transform="translate(-1345.96 -850.233)"></path>
<path id="Path_4" d="M1433.132 782.359l-28.186 28.893a.52.52 0 0 0-.063.666c1.715 2.393 4.876 2.808 6.049 4.416 3.472 4.763 4.354 7.459 5.845 7.292a.454.454 0 0 0 .271-.143l10.182-10.438c5.858-6 6.7-19.225 6.852-30.3a.553.553 0 0 0-.95-.386z" fill="#00c7d4" data-name="Path 4" transform="translate(-1375.21 -782.123)"></path>
<path id="Path_5" d="M1426.9 881.155c-3.2 3.28-9.53 4.8-22.584-1.486 4.567 10.219 10.57 13.8 12.289 12.039z" fill="#11e1ee" data-name="Path 5" transform="translate(-1374.875 -850.233)"></path>
<path id="Path_6" d="M1307 782.919l28.893 28.186a.521.521 0 0 0 .666.063c2.393-1.715 2.808-4.877 4.416-6.049 4.763-3.472 7.459-4.353 7.292-5.845a.459.459 0 0 0-.143-.271l-10.438-10.182c-6-5.858-19.225-6.7-30.3-6.852a.552.552 0 0 0-.386.95z" fill="#e43921" data-name="Path 6" transform="translate(-1306.766 -781.97)"></path>
<path id="Path_7" d="M1405.8 804.711c3.28 3.2 4.8 9.53-1.486 22.584 10.219-4.567 13.8-10.571 12.039-12.289z" fill-rule="evenodd" fill="#ff7557" data-name="Path 7" transform="translate(-1374.875 -797.859)"></path>
<path id="Path_8" d="M1329.355 849.266c3.2-3.28 9.53-4.8 22.584 1.486-4.567-10.219-10.57-13.8-12.289-12.039z" fill="#0cb6ff" data-name="Path 8" transform="translate(-1322.503 -821.316)"></path>
<circle id="Ellipse_1" cx="1.26" cy="1.26" r="1.26" fill="#4a4848" data-name="Ellipse 1" transform="translate(28.18 28.171)"></circle>
<path id="Path_9" d="M1527.558 827.347a.229.229 0 0 1-.223-.223.458.458 0 0 1 .011-.123l2.766-7.214a.346.346 0 0 1 .357-.245h.758a.348.348 0 0 1 .357.245l2.754 7.214.022.123a.228.228 0 0 1-.223.223h-.568a.288.288 0 0 1-.19-.056.352.352 0 0 1-.089-.134l-.613-1.583h-3.657l-.613 1.583a.317.317 0 0 1-.1.134.269.269 0 0 1-.178.056zm4.795-2.732l-1.505-3.958-1.505 3.958zm3.322 4.85a.258.258 0 0 1-.189-.078.241.241 0 0 1-.067-.178v-7.4a.241.241 0 0 1 .067-.178.258.258 0 0 1 .189-.078h.513a.268.268 0 0 1 .256.256v.49a2.118 2.118 0 0 1 1.828-.858 2.092 2.092 0 0 1 1.751.736 3.135 3.135 0 0 1 .636 1.9q.011.122.011.379t-.011.379a3.168 3.168 0 0 1-.636 1.9 2.111 2.111 0 0 1-1.751.736 2.154 2.154 0 0 1-1.806-.836v2.587a.241.241 0 0 1-.067.178.223.223 0 0 1-.179.078zm2.364-2.91a1.324 1.324 0 0 0 1.149-.491 2.266 2.266 0 0 0 .4-1.293q.011-.111.011-.323 0-2.107-1.562-2.107a1.365 1.365 0 0 0-1.159.513 2.111 2.111 0 0 0-.412 1.2l-.012.424.012.435a1.862 1.862 0 0 0 .424 1.149 1.4 1.4 0 0 0 1.148.493zm5.628.9a2.329 2.329 0 0 1-1.015-.223 1.94 1.94 0 0 1-.747-.6 1.487 1.487 0 0 1-.268-.859 1.459 1.459 0 0 1 .6-1.2 3.4 3.4 0 0 1 1.65-.624l1.661-.234v-.323q0-1.137-1.3-1.137a1.4 1.4 0 0 0-.8.212 1.376 1.376 0 0 0-.468.48.305.305 0 0 1-.089.145.18.18 0 0 1-.134.045h-.48a.23.23 0 0 1-.245-.245 1.17 1.17 0 0 1 .245-.6 1.931 1.931 0 0 1 .747-.591 2.7 2.7 0 0 1 1.238-.256 2.351 2.351 0 0 1 1.8.591 2.032 2.032 0 0 1 .547 1.45v3.613a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067h-.513a.233.233 0 0 1-.257-.256v-.479a1.923 1.923 0 0 1-.714.6 2.557 2.557 0 0 1-1.203.237zm.234-.836a1.579 1.579 0 0 0 1.182-.469 1.881 1.881 0 0 0 .468-1.371v-.312l-1.293.19a2.918 2.918 0 0 0-1.193.379.761.761 0 0 0-.4.658.784.784 0 0 0 .368.691 1.585 1.585 0 0 0 .867.237zm6.643.836a2.556 2.556 0 0 1-1.873-.669 2.738 2.738 0 0 1-.714-1.9l-.011-.446.011-.446a2.7 2.7 0 0 1 .714-1.885 2.531 2.531 0 0 1 1.873-.68 2.917 2.917 0 0 1 1.36.29 2.077 2.077 0 0 1 .825.714 1.7 1.7 0 0 1 .3.848.2.2 0 0 1-.067.178.281.281 0 0 1-.19.067h-.535a.265.265 0 0 1-.168-.045.458.458 0 0 1-.111-.178 1.428 1.428 0 0 0-.535-.758 1.516 1.516 0 0 0-.87-.234 1.45 1.45 0 0 0-1.1.435 1.952 1.952 0 0 0-.435 1.3l-.011.4.011.379a1.969 1.969 0 0 0 .435 1.316 1.446 1.446 0 0 0 1.1.424 1.577 1.577 0 0 0 .87-.223 1.493 1.493 0 0 0 .535-.769.458.458 0 0 1 .111-.178.228.228 0 0 1 .168-.056h.535a.258.258 0 0 1 .19.078.2.2 0 0 1 .067.178 1.75 1.75 0 0 1-.3.847 2.078 2.078 0 0 1-.825.714 2.876 2.876 0 0 1-1.361.302zm4.078-.112a.233.233 0 0 1-.257-.256v-7.4a.241.241 0 0 1 .067-.178.259.259 0 0 1 .19-.078h.557a.267.267 0 0 1 .257.256v2.6a2.167 2.167 0 0 1 .758-.624 2.353 2.353 0 0 1 1.082-.223 2.067 2.067 0 0 1 1.661.691 2.642 2.642 0 0 1 .6 1.818v3.144a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067h-.557a.233.233 0 0 1-.256-.256V824a1.775 1.775 0 0 0-.39-1.227 1.387 1.387 0 0 0-1.1-.435 1.481 1.481 0 0 0-1.126.446 1.7 1.7 0 0 0-.412 1.215v3.088a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067zm8.846.112a2.466 2.466 0 0 1-1.84-.7 2.938 2.938 0 0 1-.747-1.94l-.011-.379.011-.368a2.953 2.953 0 0 1 .758-1.918 2.7 2.7 0 0 1 3.735.078 3.114 3.114 0 0 1 .68 2.119v.19a.257.257 0 0 1-.078.189.241.241 0 0 1-.178.067h-3.858v.1a2.11 2.11 0 0 0 .435 1.238 1.332 1.332 0 0 0 1.081.5 1.563 1.563 0 0 0 .836-.2 1.7 1.7 0 0 0 .491-.435.6.6 0 0 1 .145-.156.391.391 0 0 1 .19-.033h.547a.252.252 0 0 1 .167.056.192.192 0 0 1 .067.156.975.975 0 0 1-.312.591 2.51 2.51 0 0 1-.859.6 3.049 3.049 0 0 1-1.26.248zm1.527-3.434v-.033a1.817 1.817 0 0 0-.424-1.249 1.512 1.512 0 0 0-2.23 0 1.883 1.883 0 0 0-.4 1.249v.033z" fill="#51504f" data-name="Path 9" transform="translate(-1460.834 -808.144)"></path>
<path id="Path_10" d="M1527.2 827.081l-.061.061zm-.056-.279l-.08-.031zm2.766-7.214l.08.031zm1.472 0l-.081.029zm2.754 7.214l.084-.015a.064.064 0 0 0 0-.015zm.022.123h.086v-.015zm-.067.156l.06.061zm-.914.011l-.061.061.006.005zm-.089-.134l.081-.027zm-.613-1.583l.08-.031a.086.086 0 0 0-.08-.055zm-3.657 0v-.086a.086.086 0 0 0-.08.055zm-.613 1.583l-.08-.031zm-.1.134l.055.066zm4.047-2.676v.086a.086.086 0 0 0 .08-.116zm-1.505-3.958l.08-.03a.086.086 0 0 0-.16 0zm-1.505 3.958l-.08-.03a.086.086 0 0 0 .08.116zm-1.784 2.646a.128.128 0 0 1-.1-.042l-.122.121a.3.3 0 0 0 .217.092zm-.1-.042a.129.129 0 0 1-.042-.1h-.171a.3.3 0 0 0 .092.217zm-.042-.1a.38.38 0 0 1 .007-.1l-.163-.054a.514.514 0 0 0-.016.15zm.005-.092l2.765-7.214-.16-.061-2.765 7.214zm2.766-7.216a.283.283 0 0 1 .1-.143.3.3 0 0 1 .174-.046v-.172a.47.47 0 0 0-.271.076.453.453 0 0 0-.166.226zm.276-.189h.758v-.172h-.758zm.758 0a.3.3 0 0 1 .175.046.283.283 0 0 1 .1.143l.161-.059a.451.451 0 0 0-.166-.226.47.47 0 0 0-.272-.076zm.277.19l2.754 7.214.16-.061-2.754-7.214zm2.75 7.2l.022.123.169-.031-.022-.123zm.021.107a.13.13 0 0 1-.042.1l.121.121a.3.3 0 0 0 .092-.217zm-.042.1a.13.13 0 0 1-.1.042v.171a.3.3 0 0 0 .217-.092zm-.1.042h-.568v.171h.568zm-.568 0a.206.206 0 0 1-.135-.036l-.11.132a.373.373 0 0 0 .245.076zm-.129-.031a.262.262 0 0 1-.069-.1l-.162.054a.431.431 0 0 0 .11.167zm-.07-.1l-.613-1.584-.16.062.613 1.583zm-.693-1.638h-3.657v.171h3.657zm-3.737.055l-.614 1.584.16.062.613-1.583zm-.615 1.587a.235.235 0 0 1-.075.1l.111.13a.4.4 0 0 0 .126-.172zm-.074.1a.185.185 0 0 1-.124.036v.171a.354.354 0 0 0 .233-.076zm-.124.036h-.569v.171h.569zm4.306-2.677l-1.505-3.958-.16.061 1.505 3.958zm-1.666-3.958l-1.505 3.958.16.061 1.505-3.958zm-1.425 4.075h3.01v-.171h-3.01zm6.143 4.687l-.06.061zm0-7.761l.061.061zm.881 0l-.065.056.01.009zm.078.669h-.086a.086.086 0 0 0 .155.051zm3.579-.123l-.067.053zm.636 1.9h-.086zm0 .758l-.085-.007zm-.636 1.9l.067.054zm-3.557-.1l.068-.052a.086.086 0 0 0-.154.052zm-.067 2.765l-.061-.06zm2.787-3.323l-.069-.051zm.4-1.293l-.085-.008v.005zm-2.709-1.918l-.068-.052zm-.413 1.2h-.086zm-.011.423h-.085zm.011.435h-.086zm.424 1.149l.066-.054zm-1.216 3.315a.173.173 0 0 1-.129-.053l-.121.121a.342.342 0 0 0 .25.1zm-.129-.053a.157.157 0 0 1-.042-.118h-.172a.325.325 0 0 0 .092.239zm-.042-.118v-7.4h-.172v7.4zm0-7.4a.157.157 0 0 1 .042-.118l-.121-.121a.324.324 0 0 0-.092.239zm.042-.118a.173.173 0 0 1 .129-.053v-.172a.342.342 0 0 0-.25.1zm.129-.053h.513v-.172h-.513zm.513 0a.137.137 0 0 1 .113.048l.13-.111a.309.309 0 0 0-.244-.108zm.123.058a.137.137 0 0 1 .048.113h.171a.309.309 0 0 0-.108-.243zm.048.113v.49h.171v-.49zm.155.541a2.033 2.033 0 0 1 1.759-.823v-.171a2.2 2.2 0 0 0-1.9.894zm1.759-.823a2.007 2.007 0 0 1 1.683.7l.135-.106a2.177 2.177 0 0 0-1.818-.768zm1.683.7a3.045 3.045 0 0 1 .617 1.845l.171-.007a3.218 3.218 0 0 0-.654-1.946zm.617 1.85c.007.078.011.2.011.372h.171c0-.171 0-.3-.012-.387zm.011.372c0 .171 0 .294-.011.372l.17.015c.008-.086.012-.216.012-.387zm-.011.376a3.08 3.08 0 0 1-.617 1.846l.134.106a3.25 3.25 0 0 0 .654-1.945zm-.617 1.845a2.025 2.025 0 0 1-1.683.7v.171a2.2 2.2 0 0 0 1.817-.768zm-1.683.7a2.068 2.068 0 0 1-1.739-.8l-.136.1a2.239 2.239 0 0 0 1.874.87zm-1.892-.75v2.587h.172v-2.587zm0 2.587a.156.156 0 0 1-.042.118l.121.121a.325.325 0 0 0 .092-.239zm-.046.123a.138.138 0 0 1-.114.048v.172a.308.308 0 0 0 .244-.108zm-.114.048h-.546v.172h.546zm1.817-2.739a1.408 1.408 0 0 0 1.218-.526l-.138-.1a1.24 1.24 0 0 1-1.079.455zm1.217-.525a2.355 2.355 0 0 0 .419-1.341l-.171-.007a2.182 2.182 0 0 1-.385 1.246zm.418-1.336c.008-.079.012-.19.012-.332h-.172c0 .14 0 .245-.011.315zm.012-.332a2.726 2.726 0 0 0-.407-1.632 1.448 1.448 0 0 0-1.24-.562v.171a1.278 1.278 0 0 1 1.1.492 2.565 2.565 0 0 1 .374 1.53zm-1.647-2.193a1.452 1.452 0 0 0-1.228.547l.136.1a1.282 1.282 0 0 1 1.091-.479zm-1.228.547a2.2 2.2 0 0 0-.43 1.252l.172.008a2.028 2.028 0 0 1 .4-1.157zm-.43 1.254l-.011.424h.171l.011-.424zm-.011.428l.011.435h.172l-.011-.435zm.011.436a1.95 1.95 0 0 0 .443 1.2l.133-.109a1.776 1.776 0 0 1-.4-1.1zm.443 1.2a1.484 1.484 0 0 0 1.214.522v-.171a1.314 1.314 0 0 1-1.082-.459zm5.828 1.117l.037-.077zm-.747-.6l-.07.049zm.335-2.063l.052.068zm1.65-.624l.012.085zm1.661-.234l.012.085a.086.086 0 0 0 .074-.085zm-2.107-1.249l.046.072zm-.468.48l-.075-.042a.083.083 0 0 0-.006.015zm-.089.145l-.054-.067-.007.006zm-.792-.022l-.065.056.009.009zm-.067-.178h-.086zm.245-.6l-.07-.049zm.747-.591l.038.077zm3.033.334l-.063.058zm.468 5.252l.06.061zm-.881 0l-.065.056a.043.043 0 0 0 .009.009zm-.067-.669h.086a.086.086 0 0 0-.156-.048zm-.714.6l-.04-.076zm.223-1.059l-.062-.06zm.468-1.684h.086a.086.086 0 0 0-.1-.085zm-1.293.189l.012.085zm-1.193.379l.046.072zm-.033 1.349l-.047.071zm.635.985a2.241 2.241 0 0 1-.978-.215l-.074.155a2.412 2.412 0 0 0 1.051.231zm-.978-.215a1.859 1.859 0 0 1-.715-.576l-.138.1a2.024 2.024 0 0 0 .779.629zm-.713-.573a1.4 1.4 0 0 1-.253-.81h-.172a1.571 1.571 0 0 0 .283.907zm-.253-.81a1.374 1.374 0 0 1 .569-1.136l-.105-.135a1.544 1.544 0 0 0-.635 1.272zm.569-1.137a3.316 3.316 0 0 1 1.609-.607l-.024-.17a3.481 3.481 0 0 0-1.691.642zm1.609-.607l1.661-.234-.024-.17-1.662.234zm1.735-.319v-.323h-.171v.323zm0-.323a1.156 1.156 0 0 0-.355-.917 1.536 1.536 0 0 0-1.035-.306v.172a1.37 1.37 0 0 1 .922.263.986.986 0 0 1 .3.788zm-1.39-1.223a1.486 1.486 0 0 0-.851.227l.1.142a1.316 1.316 0 0 1 .755-.2zm-.849.226a1.452 1.452 0 0 0-.5.51l.15.084a1.286 1.286 0 0 1 .44-.449zm-.5.524a.226.226 0 0 1-.062.105l.107.134a.391.391 0 0 0 .117-.185zm-.068.112a.1.1 0 0 1-.073.019v.171a.266.266 0 0 0 .194-.07zm-.073.019h-.48v.171h.48zm-.48 0a.18.18 0 0 1-.122-.046l-.112.13a.352.352 0 0 0 .234.087zm-.113-.037a.18.18 0 0 1-.047-.123h-.171a.352.352 0 0 0 .087.234zm-.047-.119a1.1 1.1 0 0 1 .23-.557l-.14-.1a1.253 1.253 0 0 0-.261.648zm.23-.556a1.843 1.843 0 0 1 .715-.564l-.075-.154a2.018 2.018 0 0 0-.78.618zm.716-.564a2.611 2.611 0 0 1 1.2-.247v-.171a2.781 2.781 0 0 0-1.277.266zm1.2-.247a2.268 2.268 0 0 1 1.732.563l.126-.116a2.435 2.435 0 0 0-1.858-.618zm1.733.564a1.945 1.945 0 0 1 .523 1.391h.171a2.117 2.117 0 0 0-.57-1.508zm.523 1.391v3.613h.171v-3.613zm0 3.613a.172.172 0 0 1-.053.129l.121.121a.344.344 0 0 0 .1-.25zm-.053.129a.157.157 0 0 1-.118.042v.171a.326.326 0 0 0 .239-.092zm-.118.042h-.513v.171h.513zm-.513 0a.2.2 0 0 1-.134-.046l-.111.13a.367.367 0 0 0 .245.088zm-.124-.037a.194.194 0 0 1-.047-.134h-.171a.366.366 0 0 0 .087.245zm-.047-.134v-.479h-.171v.479zm-.156-.528a1.846 1.846 0 0 1-.683.575l.079.152a2.012 2.012 0 0 0 .745-.629zm-.683.575a2.476 2.476 0 0 1-1.153.236v.171a2.644 2.644 0 0 0 1.233-.255zm-.919-.429a1.666 1.666 0 0 0 1.244-.494l-.123-.12a1.493 1.493 0 0 1-1.121.442zm1.244-.494a1.969 1.969 0 0 0 .492-1.431h-.171a1.8 1.8 0 0 1-.444 1.312zm.492-1.431v-.312h-.171v.312zm-.1-.4l-1.293.189.025.17 1.293-.189zm-1.293.189a3 3 0 0 0-1.228.393l.095.143a2.837 2.837 0 0 1 1.158-.365zm-1.227.392a.845.845 0 0 0-.441.73h.172a.676.676 0 0 1 .362-.586zm-.441.73a.869.869 0 0 0 .406.762l.095-.142a.7.7 0 0 1-.33-.62zm.408.764a1.673 1.673 0 0 0 .916.247v-.171a1.5 1.5 0 0 1-.823-.221zm5.686.329l-.061.06zm-.714-1.9h-.085zm-.011-.446h-.085zm.011-.446h-.085zm.714-1.885l.061.061zm3.234-.39l-.04.076zm.825.713l-.073.046zm.3.848h-.086zm-.067.178l.056.065zm-.892.022l.054-.067zm-.112-.178l-.081.029zm-.535-.758l-.048.071zm-1.974.2l-.062-.059zm-.435 1.3h-.086zm-.011.4h-.086zm.011.379h-.086zm.435 1.316l-.062.059zm1.974.2l.046.072zm.535-.769l-.079-.033zm.112-.178l.054.067.007-.006zm.892.022l-.061.06zm.067.178l-.085-.009zm-.3.847l-.072-.046zm-.825.714l-.04-.076zm-1.36.2a2.471 2.471 0 0 1-1.814-.644l-.12.122a2.64 2.64 0 0 0 1.933.694zm-1.813-.643a2.653 2.653 0 0 1-.689-1.839l-.171.006a2.822 2.822 0 0 0 .738 1.952zm-.689-1.838l-.011-.446h-.171l.011.446zm-.011-.442l.011-.446h-.171l-.011.446zm.011-.445a2.611 2.611 0 0 1 .689-1.827l-.122-.121a2.78 2.78 0 0 0-.738 1.942zm.689-1.827a2.447 2.447 0 0 1 1.813-.655v-.171a2.617 2.617 0 0 0-1.934.705zm1.813-.655a2.836 2.836 0 0 1 1.32.28l.079-.152a3 3 0 0 0-1.4-.3zm1.32.28a1.99 1.99 0 0 1 .792.683l.145-.091a2.158 2.158 0 0 0-.858-.744zm.793.685a1.617 1.617 0 0 1 .287.8l.171-.009a1.789 1.789 0 0 0-.315-.89zm.287.809a.11.11 0 0 1-.037.1l.112.13a.281.281 0 0 0 .1-.252zm-.037.1a.2.2 0 0 1-.134.046v.171a.369.369 0 0 0 .246-.088zm-.134.046h-.535v.171h.535zm-.535 0a.184.184 0 0 1-.114-.026l-.107.134a.345.345 0 0 0 .221.064zm-.114-.026a.389.389 0 0 1-.086-.144l-.158.066a.533.533 0 0 0 .137.212zm-.084-.14a1.514 1.514 0 0 0-.57-.8l-.093.144a1.343 1.343 0 0 1 .5.715zm-.568-.8a1.6 1.6 0 0 0-.918-.249v.171a1.435 1.435 0 0 1 .822.219zm-.918-.249a1.535 1.535 0 0 0-1.166.462l.124.118a1.364 1.364 0 0 1 1.042-.408zm-1.166.462a2.036 2.036 0 0 0-.458 1.36l.171.006a1.872 1.872 0 0 1 .411-1.249zm-.458 1.361l-.011.4h.171l.011-.4zm-.011.406l.011.379.171-.005-.011-.379zm.011.38a2.052 2.052 0 0 0 .458 1.371l.124-.118a1.889 1.889 0 0 1-.411-1.26zm.458 1.371a1.533 1.533 0 0 0 1.166.451v-.172a1.363 1.363 0 0 1-1.042-.4zm1.166.451a1.661 1.661 0 0 0 .916-.237l-.093-.144a1.491 1.491 0 0 1-.823.209zm.918-.238a1.576 1.576 0 0 0 .568-.812l-.162-.057a1.409 1.409 0 0 1-.5.727zm.566-.807a.39.39 0 0 1 .086-.144l-.107-.134a.533.533 0 0 0-.137.213zm.093-.151a.144.144 0 0 1 .107-.031v-.171a.31.31 0 0 0-.228.081zm.107-.031h.535v-.171h-.535zm.535 0a.173.173 0 0 1 .129.053l.121-.121a.344.344 0 0 0-.25-.1zm.134.057a.11.11 0 0 1 .037.1l.17.017a.281.281 0 0 0-.1-.252zm.037.109a1.664 1.664 0 0 1-.288.806l.144.092a1.839 1.839 0 0 0 .315-.889zm-.288.806a1.989 1.989 0 0 1-.792.683l.079.152a2.162 2.162 0 0 0 .858-.744zm-.793.684a2.8 2.8 0 0 1-1.32.28v.171a2.96 2.96 0 0 0 1.4-.3zm2.568.187l-.065.056.01.009zm0-7.772l.061.06zm.926 0l-.065.056.009.009zm.078 2.776h-.085a.086.086 0 0 0 .153.053zm.758-.624l.038.077zm2.743.468l-.065.056zm.524 5.151l-.061-.06zm-.925 0l-.065.056.009.009zm-.457-4.5l-.065.056zm-2.23.011l-.062-.059zm-.49 4.493l-.061-.06zm-.736-.019a.2.2 0 0 1-.134-.046l-.112.13a.367.367 0 0 0 .245.088zm-.124-.037a.2.2 0 0 1-.046-.134h-.172a.367.367 0 0 0 .087.245zm-.046-.134v-7.4h-.172v7.4zm0-7.4a.156.156 0 0 1 .042-.118l-.121-.121a.326.326 0 0 0-.092.239zm.042-.118a.172.172 0 0 1 .129-.053v-.171a.343.343 0 0 0-.25.1zm.129-.053h.557v-.171h-.557zm.557 0a.137.137 0 0 1 .113.048l.13-.112a.308.308 0 0 0-.244-.108zm.122.057a.137.137 0 0 1 .048.113h.172a.309.309 0 0 0-.108-.243zm.048.113v2.6h.172v-2.6zm.153 2.651a2.076 2.076 0 0 1 .728-.6l-.075-.154a2.248 2.248 0 0 0-.788.649zm.73-.6a2.272 2.272 0 0 1 1.043-.214v-.171a2.438 2.438 0 0 0-1.121.232zm1.043-.214a1.982 1.982 0 0 1 1.6.661l.13-.112a2.152 2.152 0 0 0-1.727-.721zm1.6.663a2.557 2.557 0 0 1 .581 1.761h.171a2.727 2.727 0 0 0-.624-1.874zm.581 1.761v3.144h.171v-3.144zm0 3.144a.173.173 0 0 1-.053.129l.121.121a.345.345 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-.557v.171h.557zm-.557 0a.2.2 0 0 1-.134-.046l-.112.13a.367.367 0 0 0 .245.088zm-.124-.037a.2.2 0 0 1-.046-.134h-.172a.368.368 0 0 0 .087.245zm-.046-.134V823.8h-.172v3.088zm0-3.088a1.859 1.859 0 0 0-.412-1.284l-.128.114a1.69 1.69 0 0 1 .368 1.169zm-.411-1.283a1.471 1.471 0 0 0-1.169-.464v.171a1.3 1.3 0 0 1 1.039.406zm-1.169-.464a1.566 1.566 0 0 0-1.188.473l.124.118a1.4 1.4 0 0 1 1.064-.419zm-1.188.473a1.779 1.779 0 0 0-.436 1.275h.172a1.609 1.609 0 0 1 .389-1.156zm-.436 1.275v3.088h.172V823.8zm0 3.088a.172.172 0 0 1-.053.129l.121.121a.344.344 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-.557v.171h.557zm6.449-.505l-.062.059zm-.747-1.94h-.086zm-.012-.379h-.085v.005zm.012-.368l-.086-.006zm.758-1.918l-.061-.06zm3.735.078l-.065.056zm.6 2.5l.061.061zm-4.036.067v-.086a.086.086 0 0 0-.086.086zm0 .1h-.086zm.435 1.238l-.068.053zm1.918.3l.045.073zm.491-.435l-.069-.051zm.145-.156l.039.077h.006zm.9.022l-.055.066zm-.245.747l-.064-.057zm-.858.6l.035.078zm.267-3.189v.086a.086.086 0 0 0 .086-.086zm-.424-1.282l-.066.055zm-2.23 0l-.065-.055zm-.4 1.282h-.086a.086.086 0 0 0 .086.086zm1.528 3.349a2.38 2.38 0 0 1-1.779-.677l-.122.12a2.55 2.55 0 0 0 1.9.728zm-1.778-.676a2.86 2.86 0 0 1-.724-1.886l-.171.009a3.027 3.027 0 0 0 .771 1.995zm-.723-1.884l-.011-.379h-.171l.011.379zm-.011-.374l.011-.368-.172-.005-.011.368zm.011-.365a2.871 2.871 0 0 1 .735-1.864l-.124-.118a3.042 3.042 0 0 0-.782 1.971zm.734-1.864a2.331 2.331 0 0 1 1.756-.687v-.171a2.5 2.5 0 0 0-1.879.74zm1.756-.687a2.307 2.307 0 0 1 1.853.762l.13-.112a2.477 2.477 0 0 0-1.983-.821zm1.854.762a3.03 3.03 0 0 1 .659 2.062h.172a3.2 3.2 0 0 0-.7-2.175zm.659 2.062v.19h.172v-.19zm0 .19a.172.172 0 0 1-.053.129l.121.121a.345.345 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-3.858v.171h3.858zm-3.944.086v.1h.172v-.1zm0 .1a2.2 2.2 0 0 0 .453 1.287l.135-.106a2.027 2.027 0 0 1-.417-1.189zm.454 1.288a1.418 1.418 0 0 0 1.148.533v-.171a1.247 1.247 0 0 1-1.015-.47zm1.148.533a1.647 1.647 0 0 0 .882-.214l-.09-.146a1.481 1.481 0 0 1-.791.188zm.882-.214a1.777 1.777 0 0 0 .515-.458l-.14-.1a1.613 1.613 0 0 1-.466.412zm.513-.456a1.251 1.251 0 0 1 .081-.1.28.28 0 0 1 .026-.025l.008-.006-.077-.153a.326.326 0 0 0-.083.068 1.55 1.55 0 0 0-.092.113zm.12-.134a.328.328 0 0 1 .146-.021v-.171a.468.468 0 0 0-.234.046zm.146-.021h.547v-.171h-.547zm.547 0a.166.166 0 0 1 .112.036l.11-.132a.337.337 0 0 0-.222-.076zm.112.036a.107.107 0 0 1 .036.09h.171a.277.277 0 0 0-.1-.222zm.036.09a.9.9 0 0 1-.291.534l.128.115a1.055 1.055 0 0 0 .334-.649zm-.291.535a2.42 2.42 0 0 1-.83.581l.072.156a2.6 2.6 0 0 0 .888-.624zm-.829.58a2.964 2.964 0 0 1-1.224.238v.171a3.133 3.133 0 0 0 1.295-.253zm.389-3.111v-.033h-.171v.033zm0-.033a1.9 1.9 0 0 0-.445-1.306l-.129.114a1.731 1.731 0 0 1 .4 1.192zm-.444-1.3a1.466 1.466 0 0 0-1.181-.521v.172a1.3 1.3 0 0 1 1.049.46zm-1.181-.521a1.466 1.466 0 0 0-1.18.521l.131.11a1.3 1.3 0 0 1 1.049-.46zm-1.181.521a1.965 1.965 0 0 0-.422 1.3h.172a1.794 1.794 0 0 1 .382-1.194zm-.422 1.3v.033h.172v-.033zm.086.119h3.055v-.171h-3.055z" fill="#51504f" data-name="Path 10" transform="translate(-1460.636 -807.945)"></path>
<path id="Path_11" d="M1519.066 884.011a.581.581 0 0 1-.567-.567 1.151 1.151 0 0 1 .028-.312l7.026-18.328a.881.881 0 0 1 .906-.623h1.926a.882.882 0 0 1 .907.623l7 18.328.057.312a.583.583 0 0 1-.567.567h-1.445a.735.735 0 0 1-.482-.142.9.9 0 0 1-.226-.34l-1.558-4.023h-9.292l-1.558 4.023a.8.8 0 0 1-.255.34.688.688 0 0 1-.453.142zm12.181-6.94l-3.824-10.056-3.823 10.055zm8.184-10.538a.592.592 0 0 1-.652-.651v-1.53a.714.714 0 0 1 .17-.482.656.656 0 0 1 .482-.2h1.785a.677.677 0 0 1 .68.68v1.53a.655.655 0 0 1-.2.481.713.713 0 0 1-.481.17zm.227 17.479a.593.593 0 0 1-.652-.652v-13.428a.611.611 0 0 1 .17-.453.656.656 0 0 1 .482-.2h1.359a.679.679 0 0 1 .652.651v13.427a.655.655 0 0 1-.2.482.613.613 0 0 1-.453.17zm6.861 0a.592.592 0 0 1-.651-.652v-13.4a.715.715 0 0 1 .17-.481.656.656 0 0 1 .482-.2h1.3a.677.677 0 0 1 .68.68v1.246a4.255 4.255 0 0 1 3.966-1.926h1.1a.679.679 0 0 1 .651.651v1.161a.566.566 0 0 1-.2.453.612.612 0 0 1-.453.17h-1.7a3.2 3.2 0 0 0-2.408.907 3.253 3.253 0 0 0-.879 2.408v8.328a.656.656 0 0 1-.2.482.716.716 0 0 1-.482.17zm12.234 0a.593.593 0 0 1-.651-.652v-11.814h-2.408a.592.592 0 0 1-.651-.651v-.963a.611.611 0 0 1 .17-.453.654.654 0 0 1 .481-.2h2.408v-1.417q0-4.816 4.872-4.815h1.586a.679.679 0 0 1 .652.651v.963a.656.656 0 0 1-.2.481.613.613 0 0 1-.453.17h-1.529a2.1 2.1 0 0 0-1.785.68 3.248 3.248 0 0 0-.51 2.011v1.275h6.062V863.7a.613.613 0 0 1 .17-.453.656.656 0 0 1 .482-.2h1.3a.679.679 0 0 1 .652.651v19.659a.655.655 0 0 1-.2.482.613.613 0 0 1-.454.17h-1.3a.592.592 0 0 1-.652-.652v-11.811h-6.062v11.813a.657.657 0 0 1-.2.482.614.614 0 0 1-.454.17zm20.9.283a6.487 6.487 0 0 1-4.844-1.757 6.837 6.837 0 0 1-1.813-4.674l-.029-1.218.029-1.218a6.732 6.732 0 0 1 1.841-4.646 7.389 7.389 0 0 1 9.631 0 6.736 6.736 0 0 1 1.841 4.646q.028.311.028 1.218t-.028 1.218a6.772 6.772 0 0 1-1.841 4.674 6.391 6.391 0 0 1-4.82 1.756zm0-2.181a3.582 3.582 0 0 0 2.8-1.133 4.931 4.931 0 0 0 1.133-3.258q.028-.283.028-1.076t-.028-1.076a4.931 4.931 0 0 0-1.133-3.258 3.582 3.582 0 0 0-2.8-1.133 3.671 3.671 0 0 0-2.833 1.133 4.83 4.83 0 0 0-1.1 3.258l-.028 1.076.028 1.076a4.83 4.83 0 0 0 1.1 3.258 3.671 3.671 0 0 0 2.828 1.132zm13.755 1.9a.846.846 0 0 1-.566-.17 1.321 1.321 0 0 1-.34-.538l-4.023-13.144-.056-.283a.575.575 0 0 1 .17-.425.641.641 0 0 1 .425-.17h1.246a.612.612 0 0 1 .453.17.646.646 0 0 1 .255.312l3.145 10.679 3.371-10.566a.761.761 0 0 1 .255-.4.726.726 0 0 1 .538-.2h.963a.728.728 0 0 1 .539.2.76.76 0 0 1 .255.4l3.371 10.566 3.144-10.679a.655.655 0 0 1 .2-.312.714.714 0 0 1 .482-.17h1.275a.542.542 0 0 1 .4.17.576.576 0 0 1 .17.425l-.057.283-3.994 13.144a1.323 1.323 0 0 1-.34.538.9.9 0 0 1-.6.17h-1.1a.86.86 0 0 1-.935-.708l-3.286-10.141-3.286 10.141a.928.928 0 0 1-.963.708z" fill="#51504f" data-name="Path 11" transform="translate(-1454.66 -838.62)"></path>
</g>
</g>
</g>
</svg>
</a>
</div>
<div class="desktop-only navbar__menu-container">
<div class="navbar__menu-content" id="main_navbar">
<div class="navbar__links-container">
<a class="navbar__text-link " href="/community/">
Community
</a>
<a class="navbar__text-link " href="/meetups/">
Meetups
</a>
<a class="navbar__text-link " href="/docs/">
Documentation
</a>
<a class="navbar__text-link " href="/use-cases/">
Use cases
</a>
<a class="navbar__text-link " href="/blog/">
Blog
</a>
</div>
<a href="/docs/stable/start.html">
<button id="" class="btn-filled bodytext__medium--white ">Install</button>
</a>
</div>
</div>
<div class="mobile-only navbar__drawer-container">
<button class="navbar__toggle-button" id="navbar-toggle-button">
<div id="hamburger-icon" class="navbar__toggle-button--icon visible">
<svg xmlns="http://www.w3.org/2000/svg" width="26" height="20" viewBox="0 0 26 20">
<g id="Group_1294" data-name="Group 1294" transform="translate(-38.791 291)">
<g id="Group_1291" data-name="Group 1291" transform="translate(39 -291)">
<rect id="Rectangle_461" width="26" height="2" fill="#51504f" data-name="Rectangle 461" rx="1" transform="translate(-.209)"></rect>
</g>
<g id="Group_1292" data-name="Group 1292" transform="translate(39 -281.822)">
<rect id="Rectangle_462" width="26" height="2" fill="#51504f" data-name="Rectangle 462" rx="1" transform="translate(-.209 -.178)"></rect>
</g>
<g id="Group_1293" data-name="Group 1293" transform="translate(39 -272.644)">
<rect id="Rectangle_463" width="26" height="2" fill="#51504f" data-name="Rectangle 463" rx="1" transform="translate(-.209 -.356)"></rect>
</g>
</g>
</svg>
</div>
<div id="close-icon" class="navbar__toggle-button--icon">
<svg xmlns="http://www.w3.org/2000/svg" width="19.799" height="19.799" viewBox="0 0 19.799 19.799">
<g id="Group_1574" data-name="Group 1574" transform="translate(-41.892 290.899)">
<g id="Group_1291" data-name="Group 1291" transform="rotate(-45 -308.114 -187.077)">
<rect id="Rectangle_461" width="26" height="2" fill="#51504f" data-name="Rectangle 461" rx="1" transform="translate(-.209)"></rect>
</g>
<g id="Group_1292" data-name="Group 1292" transform="rotate(45 372.48 -93.011)">
<rect id="Rectangle_462" width="26" height="2" fill="#51504f" data-name="Rectangle 462" rx="1" transform="translate(-.209 -.178)"></rect>
</g>
</g>
</svg>
</div>
</button>
<div class="navbar__drawer" id="navbar-drawer">
<div class="navbar__menu-content" id="main_navbar">
<div class="navbar__links-container">
<a class="navbar__text-link " href="/community/">
Community
</a>
<a class="navbar__text-link " href="/meetups/">
Meetups
</a>
<a class="navbar__text-link " href="/docs/">
Documentation
</a>
<a class="navbar__text-link " href="/roadmap/">
Roadmap
</a>
<a class="navbar__text-link " href="/use-cases/">
Use cases
</a>
<a class="navbar__text-link " href="/blog/">
Blog
</a>
</div>
<a href="/install/">
<button id="" class="btn-filled bodytext__medium--white ">Install</button>
</a>
</div>
</div>
</div>
</nav>
</header>
<div class="roadmap container-fluid td-default base-layout">
<div class="content-drawer-wrapper">
<button class="content-drawer__toggle-button" id="content-open-button">
<div id="hamburger-icon" class="content-drawer__toggle-button--icon visible">
<svg xmlns="http://www.w3.org/2000/svg" width="20.005" height="13.879" viewBox="0 0 20.005 13.879">
<g id="Group_1619" data-name="Group 1619" transform="translate(271.132 -418.872)">
<g id="Group_1613" data-name="Group 1613" transform="translate(-266.229 431.045)">
<path id="Path_1337" d="M-218.5 513.215h-14.583a.259.259 0 0 1-.259-.26.259.259 0 0 1 .259-.259h14.583a.26.26 0 0 1 .259.259.259.259 0 0 1-.259.26z" fill="#51504f" data-name="Path 1337" transform="translate(233.345 -512.696)"></path>
</g>
<g id="Group_1614" data-name="Group 1614" transform="translate(-266.229 425.684)">
<path id="Path_1338" d="M-218.5 471.9h-14.583a.259.259 0 0 1-.259-.26.26.26 0 0 1 .259-.259h14.583a.26.26 0 0 1 .259.259.26.26 0 0 1-.259.26z" fill="#51504f" data-name="Path 1338" transform="translate(233.345 -471.376)"></path>
</g>
<g id="Group_1615" data-name="Group 1615" transform="translate(-266.229 420.323)">
<path id="Path_1339" d="M-218.5 430.574h-14.583a.259.259 0 0 1-.259-.259.259.259 0 0 1 .259-.259h14.583a.26.26 0 0 1 .259.259.259.259 0 0 1-.259.259z" fill="#51504f" data-name="Path 1339" transform="translate(233.345 -430.055)"></path>
</g>
<g id="Group_1616" data-name="Group 1616" transform="translate(-271.132 429.814)">
<path id="Path_1340" d="M-269.663 506.145a1.47 1.47 0 0 1-1.469-1.469 1.47 1.47 0 0 1 1.469-1.469 1.47 1.47 0 0 1 1.469 1.469 1.47 1.47 0 0 1-1.469 1.469zm0-2.418a.951.951 0 0 0-.95.95.951.951 0 0 0 .95.95.951.951 0 0 0 .95-.95.951.951 0 0 0-.95-.95z" fill="#51504f" data-name="Path 1340" transform="translate(271.132 -503.208)"></path>
</g>
<g id="Group_1617" data-name="Group 1617" transform="translate(-271.132 424.556)">
<path id="Path_1341" d="M-269.663 465.62a1.47 1.47 0 0 1-1.469-1.469 1.47 1.47 0 0 1 1.469-1.469 1.47 1.47 0 0 1 1.469 1.469 1.47 1.47 0 0 1-1.469 1.469zm0-2.418a.951.951 0 0 0-.95.95.951.951 0 0 0 .95.95.951.951 0 0 0 .95-.95.951.951 0 0 0-.95-.952z" fill="#51504f" data-name="Path 1341" transform="translate(271.132 -462.683)"></path>
</g>
<g id="Group_1618" data-name="Group 1618" transform="translate(-271.132 418.872)">
<path id="Path_1342" d="M-269.663 421.809a1.47 1.47 0 0 1-1.469-1.469 1.47 1.47 0 0 1 1.469-1.469 1.47 1.47 0 0 1 1.469 1.469 1.47 1.47 0 0 1-1.469 1.469zm0-2.418a.951.951 0 0 0-.95.95.951.951 0 0 0 .95.95.951.951 0 0 0 .95-.95.951.951 0 0 0-.95-.95z" fill="#51504f" data-name="Path 1342" transform="translate(271.132 -418.872)"></path>
</g>
</g>
</svg>
<span class="bodytext__mobile--brownish-grey">Content</span>
</div>
</button>
<nav id="content-navbar" class="navbar navbar--hidden">
<div class="navbar__icon-container">
<a href="/">
<svg xmlns="http://www.w3.org/2000/svg" width="155.314" height="60" viewBox="0 0 155.314 60">
<defs>
<clipPath id="clip-path">
<path id="Rectangle_1" d="M0 0h155.314v60H0z" fill="none" data-name="Rectangle 1"></path>
</clipPath>
</defs>
<g id="logo" transform="translate(-1305 -780.355)">
<g id="Group_2" clip-path="url(#clip-path)" data-name="Group 2" transform="translate(1305 780.355)">
<g id="Group_1" data-name="Group 1" transform="translate(.486 .486)">
<path id="Path_1" d="M1307.562 880.867l28.187-28.893a.521.521 0 0 0 .063-.666c-1.714-2.393-4.877-2.808-6.049-4.416-3.472-4.763-4.353-7.459-5.845-7.292a.456.456 0 0 0-.271.143l-10.182 10.438c-5.858 6-6.7 19.225-6.852 30.3a.552.552 0 0 0 .949.386z" fill="#017cee" data-name="Path 1" transform="translate(-1306.613 -822.232)"></path>
<path id="Path_2" d="M1405.512 908.489l-28.893-28.189a.521.521 0 0 0-.667-.063c-2.393 1.715-2.808 4.877-4.416 6.049-4.763 3.472-7.459 4.353-7.292 5.845a.456.456 0 0 0 .143.27l10.438 10.182c6 5.858 19.225 6.7 30.3 6.852a.552.552 0 0 0 .387-.946z" fill="#00ad46" data-name="Path 2" transform="translate(-1346.876 -850.567)"></path>
<path id="Path_3" d="M1373.909 902.252c-3.28-3.2-4.8-9.53 1.486-22.583-10.219 4.567-13.8 10.57-12.039 12.289z" fill="#04d659" data-name="Path 3" transform="translate(-1345.96 -850.233)"></path>
<path id="Path_4" d="M1433.132 782.359l-28.186 28.893a.52.52 0 0 0-.063.666c1.715 2.393 4.876 2.808 6.049 4.416 3.472 4.763 4.354 7.459 5.845 7.292a.454.454 0 0 0 .271-.143l10.182-10.438c5.858-6 6.7-19.225 6.852-30.3a.553.553 0 0 0-.95-.386z" fill="#00c7d4" data-name="Path 4" transform="translate(-1375.21 -782.123)"></path>
<path id="Path_5" d="M1426.9 881.155c-3.2 3.28-9.53 4.8-22.584-1.486 4.567 10.219 10.57 13.8 12.289 12.039z" fill="#11e1ee" data-name="Path 5" transform="translate(-1374.875 -850.233)"></path>
<path id="Path_6" d="M1307 782.919l28.893 28.186a.521.521 0 0 0 .666.063c2.393-1.715 2.808-4.877 4.416-6.049 4.763-3.472 7.459-4.353 7.292-5.845a.459.459 0 0 0-.143-.271l-10.438-10.182c-6-5.858-19.225-6.7-30.3-6.852a.552.552 0 0 0-.386.95z" fill="#e43921" data-name="Path 6" transform="translate(-1306.766 -781.97)"></path>
<path id="Path_7" d="M1405.8 804.711c3.28 3.2 4.8 9.53-1.486 22.584 10.219-4.567 13.8-10.571 12.039-12.289z" fill-rule="evenodd" fill="#ff7557" data-name="Path 7" transform="translate(-1374.875 -797.859)"></path>
<path id="Path_8" d="M1329.355 849.266c3.2-3.28 9.53-4.8 22.584 1.486-4.567-10.219-10.57-13.8-12.289-12.039z" fill="#0cb6ff" data-name="Path 8" transform="translate(-1322.503 -821.316)"></path>
<circle id="Ellipse_1" cx="1.26" cy="1.26" r="1.26" fill="#4a4848" data-name="Ellipse 1" transform="translate(28.18 28.171)"></circle>
<path id="Path_9" d="M1527.558 827.347a.229.229 0 0 1-.223-.223.458.458 0 0 1 .011-.123l2.766-7.214a.346.346 0 0 1 .357-.245h.758a.348.348 0 0 1 .357.245l2.754 7.214.022.123a.228.228 0 0 1-.223.223h-.568a.288.288 0 0 1-.19-.056.352.352 0 0 1-.089-.134l-.613-1.583h-3.657l-.613 1.583a.317.317 0 0 1-.1.134.269.269 0 0 1-.178.056zm4.795-2.732l-1.505-3.958-1.505 3.958zm3.322 4.85a.258.258 0 0 1-.189-.078.241.241 0 0 1-.067-.178v-7.4a.241.241 0 0 1 .067-.178.258.258 0 0 1 .189-.078h.513a.268.268 0 0 1 .256.256v.49a2.118 2.118 0 0 1 1.828-.858 2.092 2.092 0 0 1 1.751.736 3.135 3.135 0 0 1 .636 1.9q.011.122.011.379t-.011.379a3.168 3.168 0 0 1-.636 1.9 2.111 2.111 0 0 1-1.751.736 2.154 2.154 0 0 1-1.806-.836v2.587a.241.241 0 0 1-.067.178.223.223 0 0 1-.179.078zm2.364-2.91a1.324 1.324 0 0 0 1.149-.491 2.266 2.266 0 0 0 .4-1.293q.011-.111.011-.323 0-2.107-1.562-2.107a1.365 1.365 0 0 0-1.159.513 2.111 2.111 0 0 0-.412 1.2l-.012.424.012.435a1.862 1.862 0 0 0 .424 1.149 1.4 1.4 0 0 0 1.148.493zm5.628.9a2.329 2.329 0 0 1-1.015-.223 1.94 1.94 0 0 1-.747-.6 1.487 1.487 0 0 1-.268-.859 1.459 1.459 0 0 1 .6-1.2 3.4 3.4 0 0 1 1.65-.624l1.661-.234v-.323q0-1.137-1.3-1.137a1.4 1.4 0 0 0-.8.212 1.376 1.376 0 0 0-.468.48.305.305 0 0 1-.089.145.18.18 0 0 1-.134.045h-.48a.23.23 0 0 1-.245-.245 1.17 1.17 0 0 1 .245-.6 1.931 1.931 0 0 1 .747-.591 2.7 2.7 0 0 1 1.238-.256 2.351 2.351 0 0 1 1.8.591 2.032 2.032 0 0 1 .547 1.45v3.613a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067h-.513a.233.233 0 0 1-.257-.256v-.479a1.923 1.923 0 0 1-.714.6 2.557 2.557 0 0 1-1.203.237zm.234-.836a1.579 1.579 0 0 0 1.182-.469 1.881 1.881 0 0 0 .468-1.371v-.312l-1.293.19a2.918 2.918 0 0 0-1.193.379.761.761 0 0 0-.4.658.784.784 0 0 0 .368.691 1.585 1.585 0 0 0 .867.237zm6.643.836a2.556 2.556 0 0 1-1.873-.669 2.738 2.738 0 0 1-.714-1.9l-.011-.446.011-.446a2.7 2.7 0 0 1 .714-1.885 2.531 2.531 0 0 1 1.873-.68 2.917 2.917 0 0 1 1.36.29 2.077 2.077 0 0 1 .825.714 1.7 1.7 0 0 1 .3.848.2.2 0 0 1-.067.178.281.281 0 0 1-.19.067h-.535a.265.265 0 0 1-.168-.045.458.458 0 0 1-.111-.178 1.428 1.428 0 0 0-.535-.758 1.516 1.516 0 0 0-.87-.234 1.45 1.45 0 0 0-1.1.435 1.952 1.952 0 0 0-.435 1.3l-.011.4.011.379a1.969 1.969 0 0 0 .435 1.316 1.446 1.446 0 0 0 1.1.424 1.577 1.577 0 0 0 .87-.223 1.493 1.493 0 0 0 .535-.769.458.458 0 0 1 .111-.178.228.228 0 0 1 .168-.056h.535a.258.258 0 0 1 .19.078.2.2 0 0 1 .067.178 1.75 1.75 0 0 1-.3.847 2.078 2.078 0 0 1-.825.714 2.876 2.876 0 0 1-1.361.302zm4.078-.112a.233.233 0 0 1-.257-.256v-7.4a.241.241 0 0 1 .067-.178.259.259 0 0 1 .19-.078h.557a.267.267 0 0 1 .257.256v2.6a2.167 2.167 0 0 1 .758-.624 2.353 2.353 0 0 1 1.082-.223 2.067 2.067 0 0 1 1.661.691 2.642 2.642 0 0 1 .6 1.818v3.144a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067h-.557a.233.233 0 0 1-.256-.256V824a1.775 1.775 0 0 0-.39-1.227 1.387 1.387 0 0 0-1.1-.435 1.481 1.481 0 0 0-1.126.446 1.7 1.7 0 0 0-.412 1.215v3.088a.257.257 0 0 1-.078.19.24.24 0 0 1-.178.067zm8.846.112a2.466 2.466 0 0 1-1.84-.7 2.938 2.938 0 0 1-.747-1.94l-.011-.379.011-.368a2.953 2.953 0 0 1 .758-1.918 2.7 2.7 0 0 1 3.735.078 3.114 3.114 0 0 1 .68 2.119v.19a.257.257 0 0 1-.078.189.241.241 0 0 1-.178.067h-3.858v.1a2.11 2.11 0 0 0 .435 1.238 1.332 1.332 0 0 0 1.081.5 1.563 1.563 0 0 0 .836-.2 1.7 1.7 0 0 0 .491-.435.6.6 0 0 1 .145-.156.391.391 0 0 1 .19-.033h.547a.252.252 0 0 1 .167.056.192.192 0 0 1 .067.156.975.975 0 0 1-.312.591 2.51 2.51 0 0 1-.859.6 3.049 3.049 0 0 1-1.26.248zm1.527-3.434v-.033a1.817 1.817 0 0 0-.424-1.249 1.512 1.512 0 0 0-2.23 0 1.883 1.883 0 0 0-.4 1.249v.033z" fill="#51504f" data-name="Path 9" transform="translate(-1460.834 -808.144)"></path>
<path id="Path_10" d="M1527.2 827.081l-.061.061zm-.056-.279l-.08-.031zm2.766-7.214l.08.031zm1.472 0l-.081.029zm2.754 7.214l.084-.015a.064.064 0 0 0 0-.015zm.022.123h.086v-.015zm-.067.156l.06.061zm-.914.011l-.061.061.006.005zm-.089-.134l.081-.027zm-.613-1.583l.08-.031a.086.086 0 0 0-.08-.055zm-3.657 0v-.086a.086.086 0 0 0-.08.055zm-.613 1.583l-.08-.031zm-.1.134l.055.066zm4.047-2.676v.086a.086.086 0 0 0 .08-.116zm-1.505-3.958l.08-.03a.086.086 0 0 0-.16 0zm-1.505 3.958l-.08-.03a.086.086 0 0 0 .08.116zm-1.784 2.646a.128.128 0 0 1-.1-.042l-.122.121a.3.3 0 0 0 .217.092zm-.1-.042a.129.129 0 0 1-.042-.1h-.171a.3.3 0 0 0 .092.217zm-.042-.1a.38.38 0 0 1 .007-.1l-.163-.054a.514.514 0 0 0-.016.15zm.005-.092l2.765-7.214-.16-.061-2.765 7.214zm2.766-7.216a.283.283 0 0 1 .1-.143.3.3 0 0 1 .174-.046v-.172a.47.47 0 0 0-.271.076.453.453 0 0 0-.166.226zm.276-.189h.758v-.172h-.758zm.758 0a.3.3 0 0 1 .175.046.283.283 0 0 1 .1.143l.161-.059a.451.451 0 0 0-.166-.226.47.47 0 0 0-.272-.076zm.277.19l2.754 7.214.16-.061-2.754-7.214zm2.75 7.2l.022.123.169-.031-.022-.123zm.021.107a.13.13 0 0 1-.042.1l.121.121a.3.3 0 0 0 .092-.217zm-.042.1a.13.13 0 0 1-.1.042v.171a.3.3 0 0 0 .217-.092zm-.1.042h-.568v.171h.568zm-.568 0a.206.206 0 0 1-.135-.036l-.11.132a.373.373 0 0 0 .245.076zm-.129-.031a.262.262 0 0 1-.069-.1l-.162.054a.431.431 0 0 0 .11.167zm-.07-.1l-.613-1.584-.16.062.613 1.583zm-.693-1.638h-3.657v.171h3.657zm-3.737.055l-.614 1.584.16.062.613-1.583zm-.615 1.587a.235.235 0 0 1-.075.1l.111.13a.4.4 0 0 0 .126-.172zm-.074.1a.185.185 0 0 1-.124.036v.171a.354.354 0 0 0 .233-.076zm-.124.036h-.569v.171h.569zm4.306-2.677l-1.505-3.958-.16.061 1.505 3.958zm-1.666-3.958l-1.505 3.958.16.061 1.505-3.958zm-1.425 4.075h3.01v-.171h-3.01zm6.143 4.687l-.06.061zm0-7.761l.061.061zm.881 0l-.065.056.01.009zm.078.669h-.086a.086.086 0 0 0 .155.051zm3.579-.123l-.067.053zm.636 1.9h-.086zm0 .758l-.085-.007zm-.636 1.9l.067.054zm-3.557-.1l.068-.052a.086.086 0 0 0-.154.052zm-.067 2.765l-.061-.06zm2.787-3.323l-.069-.051zm.4-1.293l-.085-.008v.005zm-2.709-1.918l-.068-.052zm-.413 1.2h-.086zm-.011.423h-.085zm.011.435h-.086zm.424 1.149l.066-.054zm-1.216 3.315a.173.173 0 0 1-.129-.053l-.121.121a.342.342 0 0 0 .25.1zm-.129-.053a.157.157 0 0 1-.042-.118h-.172a.325.325 0 0 0 .092.239zm-.042-.118v-7.4h-.172v7.4zm0-7.4a.157.157 0 0 1 .042-.118l-.121-.121a.324.324 0 0 0-.092.239zm.042-.118a.173.173 0 0 1 .129-.053v-.172a.342.342 0 0 0-.25.1zm.129-.053h.513v-.172h-.513zm.513 0a.137.137 0 0 1 .113.048l.13-.111a.309.309 0 0 0-.244-.108zm.123.058a.137.137 0 0 1 .048.113h.171a.309.309 0 0 0-.108-.243zm.048.113v.49h.171v-.49zm.155.541a2.033 2.033 0 0 1 1.759-.823v-.171a2.2 2.2 0 0 0-1.9.894zm1.759-.823a2.007 2.007 0 0 1 1.683.7l.135-.106a2.177 2.177 0 0 0-1.818-.768zm1.683.7a3.045 3.045 0 0 1 .617 1.845l.171-.007a3.218 3.218 0 0 0-.654-1.946zm.617 1.85c.007.078.011.2.011.372h.171c0-.171 0-.3-.012-.387zm.011.372c0 .171 0 .294-.011.372l.17.015c.008-.086.012-.216.012-.387zm-.011.376a3.08 3.08 0 0 1-.617 1.846l.134.106a3.25 3.25 0 0 0 .654-1.945zm-.617 1.845a2.025 2.025 0 0 1-1.683.7v.171a2.2 2.2 0 0 0 1.817-.768zm-1.683.7a2.068 2.068 0 0 1-1.739-.8l-.136.1a2.239 2.239 0 0 0 1.874.87zm-1.892-.75v2.587h.172v-2.587zm0 2.587a.156.156 0 0 1-.042.118l.121.121a.325.325 0 0 0 .092-.239zm-.046.123a.138.138 0 0 1-.114.048v.172a.308.308 0 0 0 .244-.108zm-.114.048h-.546v.172h.546zm1.817-2.739a1.408 1.408 0 0 0 1.218-.526l-.138-.1a1.24 1.24 0 0 1-1.079.455zm1.217-.525a2.355 2.355 0 0 0 .419-1.341l-.171-.007a2.182 2.182 0 0 1-.385 1.246zm.418-1.336c.008-.079.012-.19.012-.332h-.172c0 .14 0 .245-.011.315zm.012-.332a2.726 2.726 0 0 0-.407-1.632 1.448 1.448 0 0 0-1.24-.562v.171a1.278 1.278 0 0 1 1.1.492 2.565 2.565 0 0 1 .374 1.53zm-1.647-2.193a1.452 1.452 0 0 0-1.228.547l.136.1a1.282 1.282 0 0 1 1.091-.479zm-1.228.547a2.2 2.2 0 0 0-.43 1.252l.172.008a2.028 2.028 0 0 1 .4-1.157zm-.43 1.254l-.011.424h.171l.011-.424zm-.011.428l.011.435h.172l-.011-.435zm.011.436a1.95 1.95 0 0 0 .443 1.2l.133-.109a1.776 1.776 0 0 1-.4-1.1zm.443 1.2a1.484 1.484 0 0 0 1.214.522v-.171a1.314 1.314 0 0 1-1.082-.459zm5.828 1.117l.037-.077zm-.747-.6l-.07.049zm.335-2.063l.052.068zm1.65-.624l.012.085zm1.661-.234l.012.085a.086.086 0 0 0 .074-.085zm-2.107-1.249l.046.072zm-.468.48l-.075-.042a.083.083 0 0 0-.006.015zm-.089.145l-.054-.067-.007.006zm-.792-.022l-.065.056.009.009zm-.067-.178h-.086zm.245-.6l-.07-.049zm.747-.591l.038.077zm3.033.334l-.063.058zm.468 5.252l.06.061zm-.881 0l-.065.056a.043.043 0 0 0 .009.009zm-.067-.669h.086a.086.086 0 0 0-.156-.048zm-.714.6l-.04-.076zm.223-1.059l-.062-.06zm.468-1.684h.086a.086.086 0 0 0-.1-.085zm-1.293.189l.012.085zm-1.193.379l.046.072zm-.033 1.349l-.047.071zm.635.985a2.241 2.241 0 0 1-.978-.215l-.074.155a2.412 2.412 0 0 0 1.051.231zm-.978-.215a1.859 1.859 0 0 1-.715-.576l-.138.1a2.024 2.024 0 0 0 .779.629zm-.713-.573a1.4 1.4 0 0 1-.253-.81h-.172a1.571 1.571 0 0 0 .283.907zm-.253-.81a1.374 1.374 0 0 1 .569-1.136l-.105-.135a1.544 1.544 0 0 0-.635 1.272zm.569-1.137a3.316 3.316 0 0 1 1.609-.607l-.024-.17a3.481 3.481 0 0 0-1.691.642zm1.609-.607l1.661-.234-.024-.17-1.662.234zm1.735-.319v-.323h-.171v.323zm0-.323a1.156 1.156 0 0 0-.355-.917 1.536 1.536 0 0 0-1.035-.306v.172a1.37 1.37 0 0 1 .922.263.986.986 0 0 1 .3.788zm-1.39-1.223a1.486 1.486 0 0 0-.851.227l.1.142a1.316 1.316 0 0 1 .755-.2zm-.849.226a1.452 1.452 0 0 0-.5.51l.15.084a1.286 1.286 0 0 1 .44-.449zm-.5.524a.226.226 0 0 1-.062.105l.107.134a.391.391 0 0 0 .117-.185zm-.068.112a.1.1 0 0 1-.073.019v.171a.266.266 0 0 0 .194-.07zm-.073.019h-.48v.171h.48zm-.48 0a.18.18 0 0 1-.122-.046l-.112.13a.352.352 0 0 0 .234.087zm-.113-.037a.18.18 0 0 1-.047-.123h-.171a.352.352 0 0 0 .087.234zm-.047-.119a1.1 1.1 0 0 1 .23-.557l-.14-.1a1.253 1.253 0 0 0-.261.648zm.23-.556a1.843 1.843 0 0 1 .715-.564l-.075-.154a2.018 2.018 0 0 0-.78.618zm.716-.564a2.611 2.611 0 0 1 1.2-.247v-.171a2.781 2.781 0 0 0-1.277.266zm1.2-.247a2.268 2.268 0 0 1 1.732.563l.126-.116a2.435 2.435 0 0 0-1.858-.618zm1.733.564a1.945 1.945 0 0 1 .523 1.391h.171a2.117 2.117 0 0 0-.57-1.508zm.523 1.391v3.613h.171v-3.613zm0 3.613a.172.172 0 0 1-.053.129l.121.121a.344.344 0 0 0 .1-.25zm-.053.129a.157.157 0 0 1-.118.042v.171a.326.326 0 0 0 .239-.092zm-.118.042h-.513v.171h.513zm-.513 0a.2.2 0 0 1-.134-.046l-.111.13a.367.367 0 0 0 .245.088zm-.124-.037a.194.194 0 0 1-.047-.134h-.171a.366.366 0 0 0 .087.245zm-.047-.134v-.479h-.171v.479zm-.156-.528a1.846 1.846 0 0 1-.683.575l.079.152a2.012 2.012 0 0 0 .745-.629zm-.683.575a2.476 2.476 0 0 1-1.153.236v.171a2.644 2.644 0 0 0 1.233-.255zm-.919-.429a1.666 1.666 0 0 0 1.244-.494l-.123-.12a1.493 1.493 0 0 1-1.121.442zm1.244-.494a1.969 1.969 0 0 0 .492-1.431h-.171a1.8 1.8 0 0 1-.444 1.312zm.492-1.431v-.312h-.171v.312zm-.1-.4l-1.293.189.025.17 1.293-.189zm-1.293.189a3 3 0 0 0-1.228.393l.095.143a2.837 2.837 0 0 1 1.158-.365zm-1.227.392a.845.845 0 0 0-.441.73h.172a.676.676 0 0 1 .362-.586zm-.441.73a.869.869 0 0 0 .406.762l.095-.142a.7.7 0 0 1-.33-.62zm.408.764a1.673 1.673 0 0 0 .916.247v-.171a1.5 1.5 0 0 1-.823-.221zm5.686.329l-.061.06zm-.714-1.9h-.085zm-.011-.446h-.085zm.011-.446h-.085zm.714-1.885l.061.061zm3.234-.39l-.04.076zm.825.713l-.073.046zm.3.848h-.086zm-.067.178l.056.065zm-.892.022l.054-.067zm-.112-.178l-.081.029zm-.535-.758l-.048.071zm-1.974.2l-.062-.059zm-.435 1.3h-.086zm-.011.4h-.086zm.011.379h-.086zm.435 1.316l-.062.059zm1.974.2l.046.072zm.535-.769l-.079-.033zm.112-.178l.054.067.007-.006zm.892.022l-.061.06zm.067.178l-.085-.009zm-.3.847l-.072-.046zm-.825.714l-.04-.076zm-1.36.2a2.471 2.471 0 0 1-1.814-.644l-.12.122a2.64 2.64 0 0 0 1.933.694zm-1.813-.643a2.653 2.653 0 0 1-.689-1.839l-.171.006a2.822 2.822 0 0 0 .738 1.952zm-.689-1.838l-.011-.446h-.171l.011.446zm-.011-.442l.011-.446h-.171l-.011.446zm.011-.445a2.611 2.611 0 0 1 .689-1.827l-.122-.121a2.78 2.78 0 0 0-.738 1.942zm.689-1.827a2.447 2.447 0 0 1 1.813-.655v-.171a2.617 2.617 0 0 0-1.934.705zm1.813-.655a2.836 2.836 0 0 1 1.32.28l.079-.152a3 3 0 0 0-1.4-.3zm1.32.28a1.99 1.99 0 0 1 .792.683l.145-.091a2.158 2.158 0 0 0-.858-.744zm.793.685a1.617 1.617 0 0 1 .287.8l.171-.009a1.789 1.789 0 0 0-.315-.89zm.287.809a.11.11 0 0 1-.037.1l.112.13a.281.281 0 0 0 .1-.252zm-.037.1a.2.2 0 0 1-.134.046v.171a.369.369 0 0 0 .246-.088zm-.134.046h-.535v.171h.535zm-.535 0a.184.184 0 0 1-.114-.026l-.107.134a.345.345 0 0 0 .221.064zm-.114-.026a.389.389 0 0 1-.086-.144l-.158.066a.533.533 0 0 0 .137.212zm-.084-.14a1.514 1.514 0 0 0-.57-.8l-.093.144a1.343 1.343 0 0 1 .5.715zm-.568-.8a1.6 1.6 0 0 0-.918-.249v.171a1.435 1.435 0 0 1 .822.219zm-.918-.249a1.535 1.535 0 0 0-1.166.462l.124.118a1.364 1.364 0 0 1 1.042-.408zm-1.166.462a2.036 2.036 0 0 0-.458 1.36l.171.006a1.872 1.872 0 0 1 .411-1.249zm-.458 1.361l-.011.4h.171l.011-.4zm-.011.406l.011.379.171-.005-.011-.379zm.011.38a2.052 2.052 0 0 0 .458 1.371l.124-.118a1.889 1.889 0 0 1-.411-1.26zm.458 1.371a1.533 1.533 0 0 0 1.166.451v-.172a1.363 1.363 0 0 1-1.042-.4zm1.166.451a1.661 1.661 0 0 0 .916-.237l-.093-.144a1.491 1.491 0 0 1-.823.209zm.918-.238a1.576 1.576 0 0 0 .568-.812l-.162-.057a1.409 1.409 0 0 1-.5.727zm.566-.807a.39.39 0 0 1 .086-.144l-.107-.134a.533.533 0 0 0-.137.213zm.093-.151a.144.144 0 0 1 .107-.031v-.171a.31.31 0 0 0-.228.081zm.107-.031h.535v-.171h-.535zm.535 0a.173.173 0 0 1 .129.053l.121-.121a.344.344 0 0 0-.25-.1zm.134.057a.11.11 0 0 1 .037.1l.17.017a.281.281 0 0 0-.1-.252zm.037.109a1.664 1.664 0 0 1-.288.806l.144.092a1.839 1.839 0 0 0 .315-.889zm-.288.806a1.989 1.989 0 0 1-.792.683l.079.152a2.162 2.162 0 0 0 .858-.744zm-.793.684a2.8 2.8 0 0 1-1.32.28v.171a2.96 2.96 0 0 0 1.4-.3zm2.568.187l-.065.056.01.009zm0-7.772l.061.06zm.926 0l-.065.056.009.009zm.078 2.776h-.085a.086.086 0 0 0 .153.053zm.758-.624l.038.077zm2.743.468l-.065.056zm.524 5.151l-.061-.06zm-.925 0l-.065.056.009.009zm-.457-4.5l-.065.056zm-2.23.011l-.062-.059zm-.49 4.493l-.061-.06zm-.736-.019a.2.2 0 0 1-.134-.046l-.112.13a.367.367 0 0 0 .245.088zm-.124-.037a.2.2 0 0 1-.046-.134h-.172a.367.367 0 0 0 .087.245zm-.046-.134v-7.4h-.172v7.4zm0-7.4a.156.156 0 0 1 .042-.118l-.121-.121a.326.326 0 0 0-.092.239zm.042-.118a.172.172 0 0 1 .129-.053v-.171a.343.343 0 0 0-.25.1zm.129-.053h.557v-.171h-.557zm.557 0a.137.137 0 0 1 .113.048l.13-.112a.308.308 0 0 0-.244-.108zm.122.057a.137.137 0 0 1 .048.113h.172a.309.309 0 0 0-.108-.243zm.048.113v2.6h.172v-2.6zm.153 2.651a2.076 2.076 0 0 1 .728-.6l-.075-.154a2.248 2.248 0 0 0-.788.649zm.73-.6a2.272 2.272 0 0 1 1.043-.214v-.171a2.438 2.438 0 0 0-1.121.232zm1.043-.214a1.982 1.982 0 0 1 1.6.661l.13-.112a2.152 2.152 0 0 0-1.727-.721zm1.6.663a2.557 2.557 0 0 1 .581 1.761h.171a2.727 2.727 0 0 0-.624-1.874zm.581 1.761v3.144h.171v-3.144zm0 3.144a.173.173 0 0 1-.053.129l.121.121a.345.345 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-.557v.171h.557zm-.557 0a.2.2 0 0 1-.134-.046l-.112.13a.367.367 0 0 0 .245.088zm-.124-.037a.2.2 0 0 1-.046-.134h-.172a.368.368 0 0 0 .087.245zm-.046-.134V823.8h-.172v3.088zm0-3.088a1.859 1.859 0 0 0-.412-1.284l-.128.114a1.69 1.69 0 0 1 .368 1.169zm-.411-1.283a1.471 1.471 0 0 0-1.169-.464v.171a1.3 1.3 0 0 1 1.039.406zm-1.169-.464a1.566 1.566 0 0 0-1.188.473l.124.118a1.4 1.4 0 0 1 1.064-.419zm-1.188.473a1.779 1.779 0 0 0-.436 1.275h.172a1.609 1.609 0 0 1 .389-1.156zm-.436 1.275v3.088h.172V823.8zm0 3.088a.172.172 0 0 1-.053.129l.121.121a.344.344 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-.557v.171h.557zm6.449-.505l-.062.059zm-.747-1.94h-.086zm-.012-.379h-.085v.005zm.012-.368l-.086-.006zm.758-1.918l-.061-.06zm3.735.078l-.065.056zm.6 2.5l.061.061zm-4.036.067v-.086a.086.086 0 0 0-.086.086zm0 .1h-.086zm.435 1.238l-.068.053zm1.918.3l.045.073zm.491-.435l-.069-.051zm.145-.156l.039.077h.006zm.9.022l-.055.066zm-.245.747l-.064-.057zm-.858.6l.035.078zm.267-3.189v.086a.086.086 0 0 0 .086-.086zm-.424-1.282l-.066.055zm-2.23 0l-.065-.055zm-.4 1.282h-.086a.086.086 0 0 0 .086.086zm1.528 3.349a2.38 2.38 0 0 1-1.779-.677l-.122.12a2.55 2.55 0 0 0 1.9.728zm-1.778-.676a2.86 2.86 0 0 1-.724-1.886l-.171.009a3.027 3.027 0 0 0 .771 1.995zm-.723-1.884l-.011-.379h-.171l.011.379zm-.011-.374l.011-.368-.172-.005-.011.368zm.011-.365a2.871 2.871 0 0 1 .735-1.864l-.124-.118a3.042 3.042 0 0 0-.782 1.971zm.734-1.864a2.331 2.331 0 0 1 1.756-.687v-.171a2.5 2.5 0 0 0-1.879.74zm1.756-.687a2.307 2.307 0 0 1 1.853.762l.13-.112a2.477 2.477 0 0 0-1.983-.821zm1.854.762a3.03 3.03 0 0 1 .659 2.062h.172a3.2 3.2 0 0 0-.7-2.175zm.659 2.062v.19h.172v-.19zm0 .19a.172.172 0 0 1-.053.129l.121.121a.345.345 0 0 0 .1-.25zm-.053.129a.156.156 0 0 1-.118.042v.171a.327.327 0 0 0 .239-.092zm-.118.042h-3.858v.171h3.858zm-3.944.086v.1h.172v-.1zm0 .1a2.2 2.2 0 0 0 .453 1.287l.135-.106a2.027 2.027 0 0 1-.417-1.189zm.454 1.288a1.418 1.418 0 0 0 1.148.533v-.171a1.247 1.247 0 0 1-1.015-.47zm1.148.533a1.647 1.647 0 0 0 .882-.214l-.09-.146a1.481 1.481 0 0 1-.791.188zm.882-.214a1.777 1.777 0 0 0 .515-.458l-.14-.1a1.613 1.613 0 0 1-.466.412zm.513-.456a1.251 1.251 0 0 1 .081-.1.28.28 0 0 1 .026-.025l.008-.006-.077-.153a.326.326 0 0 0-.083.068 1.55 1.55 0 0 0-.092.113zm.12-.134a.328.328 0 0 1 .146-.021v-.171a.468.468 0 0 0-.234.046zm.146-.021h.547v-.171h-.547zm.547 0a.166.166 0 0 1 .112.036l.11-.132a.337.337 0 0 0-.222-.076zm.112.036a.107.107 0 0 1 .036.09h.171a.277.277 0 0 0-.1-.222zm.036.09a.9.9 0 0 1-.291.534l.128.115a1.055 1.055 0 0 0 .334-.649zm-.291.535a2.42 2.42 0 0 1-.83.581l.072.156a2.6 2.6 0 0 0 .888-.624zm-.829.58a2.964 2.964 0 0 1-1.224.238v.171a3.133 3.133 0 0 0 1.295-.253zm.389-3.111v-.033h-.171v.033zm0-.033a1.9 1.9 0 0 0-.445-1.306l-.129.114a1.731 1.731 0 0 1 .4 1.192zm-.444-1.3a1.466 1.466 0 0 0-1.181-.521v.172a1.3 1.3 0 0 1 1.049.46zm-1.181-.521a1.466 1.466 0 0 0-1.18.521l.131.11a1.3 1.3 0 0 1 1.049-.46zm-1.181.521a1.965 1.965 0 0 0-.422 1.3h.172a1.794 1.794 0 0 1 .382-1.194zm-.422 1.3v.033h.172v-.033zm.086.119h3.055v-.171h-3.055z" fill="#51504f" data-name="Path 10" transform="translate(-1460.636 -807.945)"></path>
<path id="Path_11" d="M1519.066 884.011a.581.581 0 0 1-.567-.567 1.151 1.151 0 0 1 .028-.312l7.026-18.328a.881.881 0 0 1 .906-.623h1.926a.882.882 0 0 1 .907.623l7 18.328.057.312a.583.583 0 0 1-.567.567h-1.445a.735.735 0 0 1-.482-.142.9.9 0 0 1-.226-.34l-1.558-4.023h-9.292l-1.558 4.023a.8.8 0 0 1-.255.34.688.688 0 0 1-.453.142zm12.181-6.94l-3.824-10.056-3.823 10.055zm8.184-10.538a.592.592 0 0 1-.652-.651v-1.53a.714.714 0 0 1 .17-.482.656.656 0 0 1 .482-.2h1.785a.677.677 0 0 1 .68.68v1.53a.655.655 0 0 1-.2.481.713.713 0 0 1-.481.17zm.227 17.479a.593.593 0 0 1-.652-.652v-13.428a.611.611 0 0 1 .17-.453.656.656 0 0 1 .482-.2h1.359a.679.679 0 0 1 .652.651v13.427a.655.655 0 0 1-.2.482.613.613 0 0 1-.453.17zm6.861 0a.592.592 0 0 1-.651-.652v-13.4a.715.715 0 0 1 .17-.481.656.656 0 0 1 .482-.2h1.3a.677.677 0 0 1 .68.68v1.246a4.255 4.255 0 0 1 3.966-1.926h1.1a.679.679 0 0 1 .651.651v1.161a.566.566 0 0 1-.2.453.612.612 0 0 1-.453.17h-1.7a3.2 3.2 0 0 0-2.408.907 3.253 3.253 0 0 0-.879 2.408v8.328a.656.656 0 0 1-.2.482.716.716 0 0 1-.482.17zm12.234 0a.593.593 0 0 1-.651-.652v-11.814h-2.408a.592.592 0 0 1-.651-.651v-.963a.611.611 0 0 1 .17-.453.654.654 0 0 1 .481-.2h2.408v-1.417q0-4.816 4.872-4.815h1.586a.679.679 0 0 1 .652.651v.963a.656.656 0 0 1-.2.481.613.613 0 0 1-.453.17h-1.529a2.1 2.1 0 0 0-1.785.68 3.248 3.248 0 0 0-.51 2.011v1.275h6.062V863.7a.613.613 0 0 1 .17-.453.656.656 0 0 1 .482-.2h1.3a.679.679 0 0 1 .652.651v19.659a.655.655 0 0 1-.2.482.613.613 0 0 1-.454.17h-1.3a.592.592 0 0 1-.652-.652v-11.811h-6.062v11.813a.657.657 0 0 1-.2.482.614.614 0 0 1-.454.17zm20.9.283a6.487 6.487 0 0 1-4.844-1.757 6.837 6.837 0 0 1-1.813-4.674l-.029-1.218.029-1.218a6.732 6.732 0 0 1 1.841-4.646 7.389 7.389 0 0 1 9.631 0 6.736 6.736 0 0 1 1.841 4.646q.028.311.028 1.218t-.028 1.218a6.772 6.772 0 0 1-1.841 4.674 6.391 6.391 0 0 1-4.82 1.756zm0-2.181a3.582 3.582 0 0 0 2.8-1.133 4.931 4.931 0 0 0 1.133-3.258q.028-.283.028-1.076t-.028-1.076a4.931 4.931 0 0 0-1.133-3.258 3.582 3.582 0 0 0-2.8-1.133 3.671 3.671 0 0 0-2.833 1.133 4.83 4.83 0 0 0-1.1 3.258l-.028 1.076.028 1.076a4.83 4.83 0 0 0 1.1 3.258 3.671 3.671 0 0 0 2.828 1.132zm13.755 1.9a.846.846 0 0 1-.566-.17 1.321 1.321 0 0 1-.34-.538l-4.023-13.144-.056-.283a.575.575 0 0 1 .17-.425.641.641 0 0 1 .425-.17h1.246a.612.612 0 0 1 .453.17.646.646 0 0 1 .255.312l3.145 10.679 3.371-10.566a.761.761 0 0 1 .255-.4.726.726 0 0 1 .538-.2h.963a.728.728 0 0 1 .539.2.76.76 0 0 1 .255.4l3.371 10.566 3.144-10.679a.655.655 0 0 1 .2-.312.714.714 0 0 1 .482-.17h1.275a.542.542 0 0 1 .4.17.576.576 0 0 1 .17.425l-.057.283-3.994 13.144a1.323 1.323 0 0 1-.34.538.9.9 0 0 1-.6.17h-1.1a.86.86 0 0 1-.935-.708l-3.286-10.141-3.286 10.141a.928.928 0 0 1-.963.708z" fill="#51504f" data-name="Path 11" transform="translate(-1454.66 -838.62)"></path>
</g>
</g>
</g>
</svg>
</a>
</div>
<div id="content-close-button">
<svg xmlns="http://www.w3.org/2000/svg" width="19.799" height="19.799" viewBox="0 0 19.799 19.799">
<g id="Group_1574" data-name="Group 1574" transform="translate(-41.892 290.899)">
<g id="Group_1291" data-name="Group 1291" transform="rotate(-45 -308.114 -187.077)">
<rect id="Rectangle_461" width="26" height="2" fill="#51504f" data-name="Rectangle 461" rx="1" transform="translate(-.209)"></rect>
</g>
<g id="Group_1292" data-name="Group 1292" transform="rotate(45 372.48 -93.011)">
<rect id="Rectangle_462" width="26" height="2" fill="#51504f" data-name="Rectangle 462" rx="1" transform="translate(-.209 -.178)"></rect>
</g>
</g>
</svg>
</div>
</nav>
<div class="content-drawer-container" id="content-drawer">
<div class="content-drawer">
<div class="td-sidebar">
<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
<a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
<span class="bodytext__medium--greyish-brown">Version: </span><span class="version">1.10.8</span>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
</div>
<script type="application/x-template" id="version-item-template">
<a class="dropdown-item"></a>
</script>
</div>
<div class="searchb-box">
<form class="search-form" action="../../../../search.html" method="get">
<input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
<button class="search-form__button" type="submit">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<g id="Group_1579" data-name="Group 1579" transform="translate(-41.001 -41)">
<path id="Path_169" d="M71.415 64.687a7.215 7.215 0 1 0-6.729 6.728 7.222 7.222 0 0 0 6.729-6.728z" fill="none" data-name="Path 169" transform="translate(-14.277 -14.276)"></path>
<path id="Path_170" d="M60.863 59.8l-6.093-6.09a7.78 7.78 0 1 0-1.06 1.06l6.09 6.093a.468.468 0 0 0 .662 0l.4-.4a.468.468 0 0 0 .001-.663zM42.512 49.183a6.274 6.274 0 1 1 5.851 5.85 6.28 6.28 0 0 1-5.851-5.85z" fill="#51504f" data-name="Path 170"></path>
</g>
</svg>
</button>
</form>
</div>
<style>
.searchb-box {
margin-bottom: 26px;
}
.searchb-box .search-form {
width: 100%;
margin-top: 20px;
}
</style>
<div class="toctree" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../../project.html">Project</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../license.html">License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../start.html">Quick Start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../tutorial.html">Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../howto/index.html">How-to Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../ui.html">UI / Screenshots</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../concepts.html">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../profiling.html">Data Profiling</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../cli.html">Command Line Interface Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../scheduler.html">Scheduling &amp; Triggers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../executor/index.html">Executor</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../plugins.html">Plugins</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../security.html">Security</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../timezone.html">Time zones</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../api.html">REST API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../integration.html">Integration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../metrics.html">Metrics</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../errors.html">Error Tracking</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../kubernetes.html">Kubernetes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../lineage.html">Lineage</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../dag-serialization.html">DAG Serialization</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../changelog.html">Changelog</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../best-practices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../faq.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../macros.html">Macros reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../privacy_notice.html">Privacy Notice</a></li>
</ul>
<p class="caption"><span class="caption-text">References</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../../_api/index.html">Python API</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../configurations-ref.html">Configurations</a></li>
</ul>
</div>
<style type="text/css">
.toctree {
}
.toctree li {
list-style: none;
}
.toctree .caption {
font-family: Roboto;
font-size: 18px;
font-weight: bold;
font-stretch: normal;
font-style: normal;
line-height: 1.33;
letter-spacing: normal;
color: #51504f;
padding-bottom: 13px;
text-transform: uppercase;
margin-bottom: 0;
}
.toctree .current > a:not([href="#"]) {
color: #017cee;
}
.toctree > ul {
padding-left: 0;
}
.toctree ul {
padding-left: 15px;
display: none;
}
.toctree > ul,
.toctree li.current > ul {
display: block;
}
.toctree a .toctree-expand {
display: inline-block;
position: relative;
height: 1em;
}
.toctree a .toctree-expand:before {
position: absolute;
top: 6px;
left: -12px;
content: '►';
font-size: 7px;
}
.toctree .current > a > .toctree-expand:before {
content: '▼';
}
.toctree .current {
color: #017cee;
}
.toctree li {
font-family: Roboto;
font-size: 16px;
font-weight: normal;
font-stretch: normal;
font-style: normal;
line-height: 1.63;
letter-spacing: normal;
color: #707070;
}
</style>
</div>
</div>
</div>
</div>
<div class="d-flex">
<div class="td-sidebar desktop-only d-print-none">
<div id="docs-version-selector" class="docs-version-selector sidebar__version-selector">
<a class="dropdown-toggle" href="#" id="versionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
<span class="bodytext__medium--greyish-brown">Version: </span><span class="version">1.10.8</span>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
</div>
<script type="application/x-template" id="version-item-template">
<a class="dropdown-item"></a>
</script>
</div>
<div class="searchb-box">
<form class="search-form" action="../../../../search.html" method="get">
<input class="search-form__input" type="text" name="q" placeholder="Search docs" size="16">
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
<button class="search-form__button" type="submit">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<g id="Group_1579" data-name="Group 1579" transform="translate(-41.001 -41)">
<path id="Path_169" d="M71.415 64.687a7.215 7.215 0 1 0-6.729 6.728 7.222 7.222 0 0 0 6.729-6.728z" fill="none" data-name="Path 169" transform="translate(-14.277 -14.276)"></path>
<path id="Path_170" d="M60.863 59.8l-6.093-6.09a7.78 7.78 0 1 0-1.06 1.06l6.09 6.093a.468.468 0 0 0 .662 0l.4-.4a.468.468 0 0 0 .001-.663zM42.512 49.183a6.274 6.274 0 1 1 5.851 5.85 6.28 6.28 0 0 1-5.851-5.85z" fill="#51504f" data-name="Path 170"></path>
</g>
</svg>
</button>
</form>
</div>
<style>
.searchb-box {
margin-bottom: 26px;
}
.searchb-box .search-form {
width: 100%;
margin-top: 20px;
}
</style>
<div class="toctree" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../../project.html">Project</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../license.html">License</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../start.html">Quick Start</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../tutorial.html">Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../howto/index.html">How-to Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../ui.html">UI / Screenshots</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../concepts.html">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../profiling.html">Data Profiling</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../cli.html">Command Line Interface Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../scheduler.html">Scheduling &amp; Triggers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../executor/index.html">Executor</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../plugins.html">Plugins</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../security.html">Security</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../timezone.html">Time zones</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../api.html">REST API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../integration.html">Integration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../metrics.html">Metrics</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../errors.html">Error Tracking</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../kubernetes.html">Kubernetes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../lineage.html">Lineage</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../dag-serialization.html">DAG Serialization</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../changelog.html">Changelog</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../best-practices.html">Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../faq.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../macros.html">Macros reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../privacy_notice.html">Privacy Notice</a></li>
</ul>
<p class="caption"><span class="caption-text">References</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../../_api/index.html">Python API</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../configurations-ref.html">Configurations</a></li>
</ul>
</div>
<style type="text/css">
.toctree {
}
.toctree li {
list-style: none;
}
.toctree .caption {
font-family: Roboto;
font-size: 18px;
font-weight: bold;
font-stretch: normal;
font-style: normal;
line-height: 1.33;
letter-spacing: normal;
color: #51504f;
padding-bottom: 13px;
text-transform: uppercase;
margin-bottom: 0;
}
.toctree .current > a:not([href="#"]) {
color: #017cee;
}
.toctree > ul {
padding-left: 0;
}
.toctree ul {
padding-left: 15px;
display: none;
}
.toctree > ul,
.toctree li.current > ul {
display: block;
}
.toctree a .toctree-expand {
display: inline-block;
position: relative;
height: 1em;
}
.toctree a .toctree-expand:before {
position: absolute;
top: 6px;
left: -12px;
content: '►';
font-size: 7px;
}
.toctree .current > a > .toctree-expand:before {
content: '▼';
}
.toctree .current {
color: #017cee;
}
.toctree li {
font-family: Roboto;
font-size: 16px;
font-weight: normal;
font-stretch: normal;
font-style: normal;
line-height: 1.63;
letter-spacing: normal;
color: #707070;
}
</style>
</div>
<main class="col-12 col-md-9 col-xl-8" role="main">
<div role="navigation" aria-label="breadcrumbs navigation" class="d-none d-md-block d-print-none">
<ul class="breadcrumb">
<li class="breadcrumb-item"><a href="../../../../index.html" class="icon icon-home"> Home</a></li>
<li class="breadcrumb-item"><a href="../../../index.html">Module code</a></li>
<li class="breadcrumb-item"><a href="../hooks.html">airflow.contrib.hooks</a></li>
<li class="breadcrumb-item"><a href="_modules/airflow/contrib/hooks/bigquery_hook.html"> airflow.contrib.hooks.bigquery_hook</li>
</ul>
</div>
<div class="rst-content">
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for airflow.contrib.hooks.bigquery_hook</h1><div class="highlight"><pre>
<span></span><span class="c1"># -*- coding: utf-8 -*- # pylint: disable=too-many-lines</span>
<span class="c1">#</span>
<span class="c1"># Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="c1"># or more contributor license agreements. See the NOTICE file</span>
<span class="c1"># distributed with this work for additional information</span>
<span class="c1"># regarding copyright ownership. The ASF licenses this file</span>
<span class="c1"># to you under the Apache License, Version 2.0 (the</span>
<span class="c1"># &quot;License&quot;); you may not use this file except in compliance</span>
<span class="c1"># with the License. You may obtain a copy of the License at</span>
<span class="c1">#</span>
<span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="c1">#</span>
<span class="c1"># Unless required by applicable law or agreed to in writing,</span>
<span class="c1"># software distributed under the License is distributed on an</span>
<span class="c1"># &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
<span class="c1"># KIND, either express or implied. See the License for the</span>
<span class="c1"># specific language governing permissions and limitations</span>
<span class="c1"># under the License.</span>
<span class="c1">#</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">This module contains a BigQuery Hook, as well as a very basic PEP 249</span>
<span class="sd">implementation for BigQuery.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">six</span>
<span class="kn">from</span> <span class="nn">builtins</span> <span class="k">import</span> <span class="nb">range</span>
<span class="kn">from</span> <span class="nn">copy</span> <span class="k">import</span> <span class="n">deepcopy</span>
<span class="kn">from</span> <span class="nn">six</span> <span class="k">import</span> <span class="n">iteritems</span>
<span class="kn">from</span> <span class="nn">past.builtins</span> <span class="k">import</span> <span class="n">basestring</span>
<span class="kn">from</span> <span class="nn">airflow</span> <span class="k">import</span> <span class="n">AirflowException</span>
<span class="kn">from</span> <span class="nn">airflow.contrib.hooks.gcp_api_base_hook</span> <span class="k">import</span> <span class="n">GoogleCloudBaseHook</span>
<span class="kn">from</span> <span class="nn">airflow.hooks.dbapi_hook</span> <span class="k">import</span> <span class="n">DbApiHook</span>
<span class="kn">from</span> <span class="nn">airflow.utils.log.logging_mixin</span> <span class="k">import</span> <span class="n">LoggingMixin</span>
<span class="kn">from</span> <span class="nn">googleapiclient.discovery</span> <span class="k">import</span> <span class="n">build</span>
<span class="kn">from</span> <span class="nn">googleapiclient.errors</span> <span class="k">import</span> <span class="n">HttpError</span>
<span class="kn">from</span> <span class="nn">pandas_gbq.gbq</span> <span class="k">import</span> \
<span class="n">_check_google_client_version</span> <span class="k">as</span> <span class="n">gbq_check_google_client_version</span>
<span class="kn">from</span> <span class="nn">pandas_gbq</span> <span class="k">import</span> <span class="n">read_gbq</span>
<span class="kn">from</span> <span class="nn">pandas_gbq.gbq</span> <span class="k">import</span> \
<span class="n">_test_google_api_imports</span> <span class="k">as</span> <span class="n">gbq_test_google_api_imports</span>
<span class="kn">from</span> <span class="nn">pandas_gbq.gbq</span> <span class="k">import</span> <span class="n">GbqConnector</span>
<div class="viewcode-block" id="BigQueryHook"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryHook">[docs]</a><span class="k">class</span> <span class="nc">BigQueryHook</span><span class="p">(</span><span class="n">GoogleCloudBaseHook</span><span class="p">,</span> <span class="n">DbApiHook</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Interact with BigQuery. This hook uses the Google Cloud Platform</span>
<span class="sd"> connection.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="BigQueryHook.conn_name_attr"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryHook.conn_name_attr">[docs]</a> <span class="n">conn_name_attr</span> <span class="o">=</span> <span class="s1">&#39;bigquery_conn_id&#39;</span></div>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
<span class="n">bigquery_conn_id</span><span class="o">=</span><span class="s1">&#39;bigquery_default&#39;</span><span class="p">,</span>
<span class="n">delegate_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">use_legacy_sql</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">BigQueryHook</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
<span class="n">gcp_conn_id</span><span class="o">=</span><span class="n">bigquery_conn_id</span><span class="p">,</span> <span class="n">delegate_to</span><span class="o">=</span><span class="n">delegate_to</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">use_legacy_sql</span> <span class="o">=</span> <span class="n">use_legacy_sql</span>
<span class="bp">self</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="n">location</span>
<div class="viewcode-block" id="BigQueryHook.get_conn"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryHook.get_conn">[docs]</a> <span class="k">def</span> <span class="nf">get_conn</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a BigQuery PEP 249 connection object.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">service</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_service</span><span class="p">()</span>
<span class="n">project</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_field</span><span class="p">(</span><span class="s1">&#39;project&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">BigQueryConnection</span><span class="p">(</span>
<span class="n">service</span><span class="o">=</span><span class="n">service</span><span class="p">,</span>
<span class="n">project_id</span><span class="o">=</span><span class="n">project</span><span class="p">,</span>
<span class="n">use_legacy_sql</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">use_legacy_sql</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">,</span>
<span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span></div>
<span class="p">)</span>
<div class="viewcode-block" id="BigQueryHook.get_service"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryHook.get_service">[docs]</a> <span class="k">def</span> <span class="nf">get_service</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a BigQuery service object.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">http_authorized</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_authorize</span><span class="p">()</span>
<span class="k">return</span> <span class="n">build</span><span class="p">(</span>
<span class="s1">&#39;bigquery&#39;</span><span class="p">,</span> <span class="s1">&#39;v2&#39;</span><span class="p">,</span> <span class="n">http</span><span class="o">=</span><span class="n">http_authorized</span><span class="p">,</span> <span class="n">cache_discovery</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryHook.insert_rows"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryHook.insert_rows">[docs]</a> <span class="k">def</span> <span class="nf">insert_rows</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">rows</span><span class="p">,</span> <span class="n">target_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">commit_every</span><span class="o">=</span><span class="mi">1000</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Insertion is currently unsupported. Theoretically, you could use</span>
<span class="sd"> BigQuery&#39;s streaming API to insert rows into a table, but this hasn&#39;t</span>
<span class="sd"> been implemented.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span></div>
<div class="viewcode-block" id="BigQueryHook.get_pandas_df"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryHook.get_pandas_df">[docs]</a> <span class="k">def</span> <span class="nf">get_pandas_df</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sql</span><span class="p">,</span> <span class="n">parameters</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a Pandas DataFrame for the results produced by a BigQuery</span>
<span class="sd"> query. The DbApiHook method must be overridden because Pandas</span>
<span class="sd"> doesn&#39;t support PEP 249 connections, except for SQLite. See:</span>
<span class="sd"> https://github.com/pydata/pandas/blob/master/pandas/io/sql.py#L447</span>
<span class="sd"> https://github.com/pydata/pandas/issues/6900</span>
<span class="sd"> :param sql: The BigQuery SQL to execute.</span>
<span class="sd"> :type sql: str</span>
<span class="sd"> :param parameters: The parameters to render the SQL query with (not</span>
<span class="sd"> used, leave to override superclass method)</span>
<span class="sd"> :type parameters: mapping or iterable</span>
<span class="sd"> :param dialect: Dialect of BigQuery SQL – legacy SQL or standard SQL</span>
<span class="sd"> defaults to use `self.use_legacy_sql` if not specified</span>
<span class="sd"> :type dialect: str in {&#39;legacy&#39;, &#39;standard&#39;}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">private_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_field</span><span class="p">(</span><span class="s1">&#39;key_path&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_field</span><span class="p">(</span><span class="s1">&#39;keyfile_dict&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dialect</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">dialect</span> <span class="o">=</span> <span class="s1">&#39;legacy&#39;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_legacy_sql</span> <span class="k">else</span> <span class="s1">&#39;standard&#39;</span>
<span class="k">return</span> <span class="n">read_gbq</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span>
<span class="n">project_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_field</span><span class="p">(</span><span class="s1">&#39;project&#39;</span><span class="p">),</span>
<span class="n">dialect</span><span class="o">=</span><span class="n">dialect</span><span class="p">,</span>
<span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">private_key</span><span class="o">=</span><span class="n">private_key</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryHook.table_exists"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryHook.table_exists">[docs]</a> <span class="k">def</span> <span class="nf">table_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Checks for the existence of a table in Google BigQuery.</span>
<span class="sd"> :param project_id: The Google cloud project in which to look for the</span>
<span class="sd"> table. The connection supplied to the hook must provide access to</span>
<span class="sd"> the specified project.</span>
<span class="sd"> :type project_id: str</span>
<span class="sd"> :param dataset_id: The name of the dataset in which to look for the</span>
<span class="sd"> table.</span>
<span class="sd"> :type dataset_id: str</span>
<span class="sd"> :param table_id: The name of the table to check the existence of.</span>
<span class="sd"> :type table_id: str</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">service</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_service</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">service</span><span class="o">.</span><span class="n">tables</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span> <span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">tableId</span><span class="o">=</span><span class="n">table_id</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">resp</span><span class="p">[</span><span class="s1">&#39;status&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;404&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">raise</span></div></div>
<div class="viewcode-block" id="BigQueryPandasConnector"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryPandasConnector">[docs]</a><span class="k">class</span> <span class="nc">BigQueryPandasConnector</span><span class="p">(</span><span class="n">GbqConnector</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This connector behaves identically to GbqConnector (from Pandas), except</span>
<span class="sd"> that it allows the service to be injected, and disables a call to</span>
<span class="sd"> self.get_credentials(). This allows Airflow to use BigQuery with Pandas</span>
<span class="sd"> without forcing a three legged OAuth connection. Instead, we can inject</span>
<span class="sd"> service account credentials into the binding.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
<span class="n">project_id</span><span class="p">,</span>
<span class="n">service</span><span class="p">,</span>
<span class="n">reauth</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">dialect</span><span class="o">=</span><span class="s1">&#39;legacy&#39;</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">BigQueryPandasConnector</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">project_id</span><span class="p">)</span>
<span class="n">gbq_check_google_client_version</span><span class="p">()</span>
<span class="n">gbq_test_google_api_imports</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">project_id</span> <span class="o">=</span> <span class="n">project_id</span>
<span class="bp">self</span><span class="o">.</span><span class="n">reauth</span> <span class="o">=</span> <span class="n">reauth</span>
<span class="bp">self</span><span class="o">.</span><span class="n">service</span> <span class="o">=</span> <span class="n">service</span>
<span class="bp">self</span><span class="o">.</span><span class="n">verbose</span> <span class="o">=</span> <span class="n">verbose</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dialect</span> <span class="o">=</span> <span class="n">dialect</span></div>
<div class="viewcode-block" id="BigQueryConnection"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryConnection">[docs]</a><span class="k">class</span> <span class="nc">BigQueryConnection</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> BigQuery does not have a notion of a persistent connection. Thus, these</span>
<span class="sd"> objects are small stateless factories for cursors, which do all the real</span>
<span class="sd"> work.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_args</span> <span class="o">=</span> <span class="n">args</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_kwargs</span> <span class="o">=</span> <span class="n">kwargs</span>
<div class="viewcode-block" id="BigQueryConnection.close"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryConnection.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
<span class="sd">&quot;&quot;&quot; BigQueryConnection does not have anything to close. &quot;&quot;&quot;</span>
<div class="viewcode-block" id="BigQueryConnection.commit"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryConnection.commit">[docs]</a> <span class="k">def</span> <span class="nf">commit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
<span class="sd">&quot;&quot;&quot; BigQueryConnection does not support transactions. &quot;&quot;&quot;</span>
<div class="viewcode-block" id="BigQueryConnection.cursor"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryConnection.cursor">[docs]</a> <span class="k">def</span> <span class="nf">cursor</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; Return a new :py:class:`Cursor` object using the connection. &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">BigQueryCursor</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_args</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">_kwargs</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryConnection.rollback"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryConnection.rollback">[docs]</a> <span class="k">def</span> <span class="nf">rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span>
<span class="s2">&quot;BigQueryConnection does not have transactions&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="BigQueryBaseCursor"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor">[docs]</a><span class="k">class</span> <span class="nc">BigQueryBaseCursor</span><span class="p">(</span><span class="n">LoggingMixin</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> The BigQuery base cursor contains helper methods to execute queries against</span>
<span class="sd"> BigQuery. The methods can be used directly by operators, in cases where a</span>
<span class="sd"> PEP 249 cursor isn&#39;t needed.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
<span class="n">service</span><span class="p">,</span>
<span class="n">project_id</span><span class="p">,</span>
<span class="n">use_legacy_sql</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">api_resource_configs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">num_retries</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">service</span> <span class="o">=</span> <span class="n">service</span>
<span class="bp">self</span><span class="o">.</span><span class="n">project_id</span> <span class="o">=</span> <span class="n">project_id</span>
<span class="bp">self</span><span class="o">.</span><span class="n">use_legacy_sql</span> <span class="o">=</span> <span class="n">use_legacy_sql</span>
<span class="k">if</span> <span class="n">api_resource_configs</span><span class="p">:</span>
<span class="n">_validate_value</span><span class="p">(</span><span class="s2">&quot;api_resource_configs&quot;</span><span class="p">,</span> <span class="n">api_resource_configs</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">api_resource_configs</span> <span class="o">=</span> <span class="n">api_resource_configs</span> \
<span class="k">if</span> <span class="n">api_resource_configs</span> <span class="k">else</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="n">location</span>
<span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span> <span class="o">=</span> <span class="n">num_retries</span>
<span class="c1"># pylint: disable=too-many-arguments</span>
<div class="viewcode-block" id="BigQueryBaseCursor.create_empty_table"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.create_empty_table">[docs]</a> <span class="k">def</span> <span class="nf">create_empty_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
<span class="n">project_id</span><span class="p">,</span>
<span class="n">dataset_id</span><span class="p">,</span>
<span class="n">table_id</span><span class="p">,</span>
<span class="n">schema_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">time_partitioning</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">cluster_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">labels</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">view</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">encryption_configuration</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">num_retries</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Creates a new, empty table in the dataset.</span>
<span class="sd"> To create a view, which is defined by a SQL query, parse a dictionary to &#39;view&#39; kwarg</span>
<span class="sd"> :param project_id: The project to create the table into.</span>
<span class="sd"> :type project_id: str</span>
<span class="sd"> :param dataset_id: The dataset to create the table into.</span>
<span class="sd"> :type dataset_id: str</span>
<span class="sd"> :param table_id: The Name of the table to be created.</span>
<span class="sd"> :type table_id: str</span>
<span class="sd"> :param schema_fields: If set, the schema field list as defined here:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load.schema</span>
<span class="sd"> :type schema_fields: list</span>
<span class="sd"> :param labels: a dictionary containing labels for the table, passed to BigQuery</span>
<span class="sd"> :type labels: dict</span>
<span class="sd"> **Example**: ::</span>
<span class="sd"> schema_fields=[{&quot;name&quot;: &quot;emp_name&quot;, &quot;type&quot;: &quot;STRING&quot;, &quot;mode&quot;: &quot;REQUIRED&quot;},</span>
<span class="sd"> {&quot;name&quot;: &quot;salary&quot;, &quot;type&quot;: &quot;INTEGER&quot;, &quot;mode&quot;: &quot;NULLABLE&quot;}]</span>
<span class="sd"> :param time_partitioning: configure optional time partitioning fields i.e.</span>
<span class="sd"> partition by field, type and expiration as per API specifications.</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#timePartitioning</span>
<span class="sd"> :type time_partitioning: dict</span>
<span class="sd"> :param cluster_fields: [Optional] The fields used for clustering.</span>
<span class="sd"> Must be specified with time_partitioning, data in the table will be first</span>
<span class="sd"> partitioned and subsequently clustered.</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#clustering.fields</span>
<span class="sd"> :type cluster_fields: list</span>
<span class="sd"> :param view: [Optional] A dictionary containing definition for the view.</span>
<span class="sd"> If set, it will create a view instead of a table:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#view</span>
<span class="sd"> :type view: dict</span>
<span class="sd"> **Example**: ::</span>
<span class="sd"> view = {</span>
<span class="sd"> &quot;query&quot;: &quot;SELECT * FROM `test-project-id.test_dataset_id.test_table_prefix*` LIMIT 1000&quot;,</span>
<span class="sd"> &quot;useLegacySql&quot;: False</span>
<span class="sd"> }</span>
<span class="sd"> :param encryption_configuration: [Optional] Custom encryption configuration (e.g., Cloud KMS keys).</span>
<span class="sd"> **Example**: ::</span>
<span class="sd"> encryption_configuration = {</span>
<span class="sd"> &quot;kmsKeyName&quot;: &quot;projects/testp/locations/us/keyRings/test-kr/cryptoKeys/test-key&quot;</span>
<span class="sd"> }</span>
<span class="sd"> :type encryption_configuration: dict</span>
<span class="sd"> :return: None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">project_id</span> <span class="o">=</span> <span class="n">project_id</span> <span class="k">if</span> <span class="n">project_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span>
<span class="n">table_resource</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;tableReference&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;tableId&#39;</span><span class="p">:</span> <span class="n">table_id</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">schema_fields</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;schema&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;fields&#39;</span><span class="p">:</span> <span class="n">schema_fields</span><span class="p">}</span>
<span class="k">if</span> <span class="n">time_partitioning</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;timePartitioning&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">time_partitioning</span>
<span class="k">if</span> <span class="n">cluster_fields</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;clustering&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;fields&#39;</span><span class="p">:</span> <span class="n">cluster_fields</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">labels</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;labels&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">labels</span>
<span class="k">if</span> <span class="n">view</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;view&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">view</span>
<span class="k">if</span> <span class="n">encryption_configuration</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s2">&quot;encryptionConfiguration&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">encryption_configuration</span>
<span class="n">num_retries</span> <span class="o">=</span> <span class="n">num_retries</span> <span class="k">if</span> <span class="n">num_retries</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Creating Table </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">tables</span><span class="p">()</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">body</span><span class="o">=</span><span class="n">table_resource</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="n">num_retries</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Table created successfully: </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job failed. Error was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">content</span><span class="p">)</span></div>
<span class="p">)</span>
<div class="viewcode-block" id="BigQueryBaseCursor.create_external_table"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.create_external_table">[docs]</a> <span class="k">def</span> <span class="nf">create_external_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
<span class="n">external_project_dataset_table</span><span class="p">,</span>
<span class="n">schema_fields</span><span class="p">,</span>
<span class="n">source_uris</span><span class="p">,</span>
<span class="n">source_format</span><span class="o">=</span><span class="s1">&#39;CSV&#39;</span><span class="p">,</span>
<span class="n">autodetect</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">compression</span><span class="o">=</span><span class="s1">&#39;NONE&#39;</span><span class="p">,</span>
<span class="n">ignore_unknown_values</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">max_bad_records</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">skip_leading_rows</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">field_delimiter</span><span class="o">=</span><span class="s1">&#39;,&#39;</span><span class="p">,</span>
<span class="n">quote_character</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">allow_quoted_newlines</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">allow_jagged_rows</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;UTF-8&quot;</span><span class="p">,</span>
<span class="n">src_fmt_configs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">labels</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">encryption_configuration</span><span class="o">=</span><span class="kc">None</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Creates a new external table in the dataset with the data in Google</span>
<span class="sd"> Cloud Storage. See here:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#resource</span>
<span class="sd"> for more details about these parameters.</span>
<span class="sd"> :param external_project_dataset_table:</span>
<span class="sd"> The dotted ``(&lt;project&gt;.|&lt;project&gt;:)&lt;dataset&gt;.&lt;table&gt;($&lt;partition&gt;)`` BigQuery</span>
<span class="sd"> table name to create external table.</span>
<span class="sd"> If ``&lt;project&gt;`` is not included, project will be the</span>
<span class="sd"> project defined in the connection json.</span>
<span class="sd"> :type external_project_dataset_table: str</span>
<span class="sd"> :param schema_fields: The schema field list as defined here:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#resource</span>
<span class="sd"> :type schema_fields: list</span>
<span class="sd"> :param source_uris: The source Google Cloud</span>
<span class="sd"> Storage URI (e.g. gs://some-bucket/some-file.txt). A single wild</span>
<span class="sd"> per-object name can be used.</span>
<span class="sd"> :type source_uris: list</span>
<span class="sd"> :param source_format: File format to export.</span>
<span class="sd"> :type source_format: str</span>
<span class="sd"> :param autodetect: Try to detect schema and format options automatically.</span>
<span class="sd"> Any option specified explicitly will be honored.</span>
<span class="sd"> :type autodetect: bool</span>
<span class="sd"> :param compression: [Optional] The compression type of the data source.</span>
<span class="sd"> Possible values include GZIP and NONE.</span>
<span class="sd"> The default value is NONE.</span>
<span class="sd"> This setting is ignored for Google Cloud Bigtable,</span>
<span class="sd"> Google Cloud Datastore backups and Avro formats.</span>
<span class="sd"> :type compression: str</span>
<span class="sd"> :param ignore_unknown_values: [Optional] Indicates if BigQuery should allow</span>
<span class="sd"> extra values that are not represented in the table schema.</span>
<span class="sd"> If true, the extra values are ignored. If false, records with extra columns</span>
<span class="sd"> are treated as bad records, and if there are too many bad records, an</span>
<span class="sd"> invalid error is returned in the job result.</span>
<span class="sd"> :type ignore_unknown_values: bool</span>
<span class="sd"> :param max_bad_records: The maximum number of bad records that BigQuery can</span>
<span class="sd"> ignore when running the job.</span>
<span class="sd"> :type max_bad_records: int</span>
<span class="sd"> :param skip_leading_rows: Number of rows to skip when loading from a CSV.</span>
<span class="sd"> :type skip_leading_rows: int</span>
<span class="sd"> :param field_delimiter: The delimiter to use when loading from a CSV.</span>
<span class="sd"> :type field_delimiter: str</span>
<span class="sd"> :param quote_character: The value that is used to quote data sections in a CSV</span>
<span class="sd"> file.</span>
<span class="sd"> :type quote_character: str</span>
<span class="sd"> :param allow_quoted_newlines: Whether to allow quoted newlines (true) or not</span>
<span class="sd"> (false).</span>
<span class="sd"> :type allow_quoted_newlines: bool</span>
<span class="sd"> :param allow_jagged_rows: Accept rows that are missing trailing optional columns.</span>
<span class="sd"> The missing values are treated as nulls. If false, records with missing</span>
<span class="sd"> trailing columns are treated as bad records, and if there are too many bad</span>
<span class="sd"> records, an invalid error is returned in the job result. Only applicable when</span>
<span class="sd"> soure_format is CSV.</span>
<span class="sd"> :type allow_jagged_rows: bool</span>
<span class="sd"> :param encoding: The character encoding of the data. See:</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#externalDataConfiguration.csvOptions.encoding</span>
<span class="sd"> :type encoding: str</span>
<span class="sd"> :param src_fmt_configs: configure optional fields specific to the source format</span>
<span class="sd"> :type src_fmt_configs: dict</span>
<span class="sd"> :param labels: a dictionary containing labels for the table, passed to BigQuery</span>
<span class="sd"> :type labels: dict</span>
<span class="sd"> :param encryption_configuration: [Optional] Custom encryption configuration (e.g., Cloud KMS keys).</span>
<span class="sd"> **Example**: ::</span>
<span class="sd"> encryption_configuration = {</span>
<span class="sd"> &quot;kmsKeyName&quot;: &quot;projects/testp/locations/us/keyRings/test-kr/cryptoKeys/test-key&quot;</span>
<span class="sd"> }</span>
<span class="sd"> :type encryption_configuration: dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">src_fmt_configs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">src_fmt_configs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">external_table_id</span> <span class="o">=</span> \
<span class="n">_split_tablename</span><span class="p">(</span><span class="n">table_input</span><span class="o">=</span><span class="n">external_project_dataset_table</span><span class="p">,</span>
<span class="n">default_project_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">var_name</span><span class="o">=</span><span class="s1">&#39;external_project_dataset_table&#39;</span><span class="p">)</span>
<span class="c1"># bigquery only allows certain source formats</span>
<span class="c1"># we check to make sure the passed source format is valid</span>
<span class="c1"># if it&#39;s not, we raise a ValueError</span>
<span class="c1"># Refer to this link for more details:</span>
<span class="c1"># https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#externalDataConfiguration.sourceFormat</span>
<span class="n">source_format</span> <span class="o">=</span> <span class="n">source_format</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<span class="n">allowed_formats</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;CSV&quot;</span><span class="p">,</span> <span class="s2">&quot;NEWLINE_DELIMITED_JSON&quot;</span><span class="p">,</span> <span class="s2">&quot;AVRO&quot;</span><span class="p">,</span> <span class="s2">&quot;GOOGLE_SHEETS&quot;</span><span class="p">,</span>
<span class="s2">&quot;DATASTORE_BACKUP&quot;</span><span class="p">,</span> <span class="s2">&quot;PARQUET&quot;</span>
<span class="p">]</span>
<span class="k">if</span> <span class="n">source_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">allowed_formats</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{0}</span><span class="s2"> is not a valid source format. &quot;</span>
<span class="s2">&quot;Please use one of the following types: </span><span class="si">{1}</span><span class="s2">&quot;</span>
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">source_format</span><span class="p">,</span> <span class="n">allowed_formats</span><span class="p">))</span>
<span class="n">compression</span> <span class="o">=</span> <span class="n">compression</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<span class="n">allowed_compressions</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;NONE&#39;</span><span class="p">,</span> <span class="s1">&#39;GZIP&#39;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">compression</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">allowed_compressions</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{0}</span><span class="s2"> is not a valid compression format. &quot;</span>
<span class="s2">&quot;Please use one of the following types: </span><span class="si">{1}</span><span class="s2">&quot;</span>
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">compression</span><span class="p">,</span> <span class="n">allowed_compressions</span><span class="p">))</span>
<span class="n">table_resource</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;externalDataConfiguration&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;autodetect&#39;</span><span class="p">:</span> <span class="n">autodetect</span><span class="p">,</span>
<span class="s1">&#39;sourceFormat&#39;</span><span class="p">:</span> <span class="n">source_format</span><span class="p">,</span>
<span class="s1">&#39;sourceUris&#39;</span><span class="p">:</span> <span class="n">source_uris</span><span class="p">,</span>
<span class="s1">&#39;compression&#39;</span><span class="p">:</span> <span class="n">compression</span><span class="p">,</span>
<span class="s1">&#39;ignoreUnknownValues&#39;</span><span class="p">:</span> <span class="n">ignore_unknown_values</span>
<span class="p">},</span>
<span class="s1">&#39;tableReference&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;projectId&#39;</span><span class="p">:</span> <span class="n">project_id</span><span class="p">,</span>
<span class="s1">&#39;datasetId&#39;</span><span class="p">:</span> <span class="n">dataset_id</span><span class="p">,</span>
<span class="s1">&#39;tableId&#39;</span><span class="p">:</span> <span class="n">external_table_id</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">schema_fields</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;externalDataConfiguration&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
<span class="s1">&#39;schema&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;fields&#39;</span><span class="p">:</span> <span class="n">schema_fields</span>
<span class="p">}</span>
<span class="p">})</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Creating external table: </span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span> <span class="n">external_project_dataset_table</span><span class="p">)</span>
<span class="k">if</span> <span class="n">max_bad_records</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;externalDataConfiguration&#39;</span><span class="p">][</span><span class="s1">&#39;maxBadRecords&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">max_bad_records</span>
<span class="c1"># if following fields are not specified in src_fmt_configs,</span>
<span class="c1"># honor the top-level params for backward-compatibility</span>
<span class="n">backward_compatibility_configs</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;skipLeadingRows&#39;</span><span class="p">:</span> <span class="n">skip_leading_rows</span><span class="p">,</span>
<span class="s1">&#39;fieldDelimiter&#39;</span><span class="p">:</span> <span class="n">field_delimiter</span><span class="p">,</span>
<span class="s1">&#39;quote&#39;</span><span class="p">:</span> <span class="n">quote_character</span><span class="p">,</span>
<span class="s1">&#39;allowQuotedNewlines&#39;</span><span class="p">:</span> <span class="n">allow_quoted_newlines</span><span class="p">,</span>
<span class="s1">&#39;allowJaggedRows&#39;</span><span class="p">:</span> <span class="n">allow_jagged_rows</span><span class="p">,</span>
<span class="s1">&#39;encoding&#39;</span><span class="p">:</span> <span class="n">encoding</span><span class="p">}</span>
<span class="n">src_fmt_to_param_mapping</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;CSV&#39;</span><span class="p">:</span> <span class="s1">&#39;csvOptions&#39;</span><span class="p">,</span>
<span class="s1">&#39;GOOGLE_SHEETS&#39;</span><span class="p">:</span> <span class="s1">&#39;googleSheetsOptions&#39;</span>
<span class="p">}</span>
<span class="n">src_fmt_to_configs_mapping</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;csvOptions&#39;</span><span class="p">:</span> <span class="p">[</span>
<span class="s1">&#39;allowJaggedRows&#39;</span><span class="p">,</span> <span class="s1">&#39;allowQuotedNewlines&#39;</span><span class="p">,</span>
<span class="s1">&#39;fieldDelimiter&#39;</span><span class="p">,</span> <span class="s1">&#39;skipLeadingRows&#39;</span><span class="p">,</span>
<span class="s1">&#39;quote&#39;</span><span class="p">,</span> <span class="s1">&#39;encoding&#39;</span>
<span class="p">],</span>
<span class="s1">&#39;googleSheetsOptions&#39;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;skipLeadingRows&#39;</span><span class="p">]</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">source_format</span> <span class="ow">in</span> <span class="n">src_fmt_to_param_mapping</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="n">valid_configs</span> <span class="o">=</span> <span class="n">src_fmt_to_configs_mapping</span><span class="p">[</span>
<span class="n">src_fmt_to_param_mapping</span><span class="p">[</span><span class="n">source_format</span><span class="p">]</span>
<span class="p">]</span>
<span class="n">src_fmt_configs</span> <span class="o">=</span> <span class="n">_validate_src_fmt_configs</span><span class="p">(</span><span class="n">source_format</span><span class="p">,</span> <span class="n">src_fmt_configs</span><span class="p">,</span> <span class="n">valid_configs</span><span class="p">,</span>
<span class="n">backward_compatibility_configs</span><span class="p">)</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;externalDataConfiguration&#39;</span><span class="p">][</span><span class="n">src_fmt_to_param_mapping</span><span class="p">[</span>
<span class="n">source_format</span><span class="p">]]</span> <span class="o">=</span> <span class="n">src_fmt_configs</span>
<span class="k">if</span> <span class="n">labels</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;labels&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">labels</span>
<span class="k">if</span> <span class="n">encryption_configuration</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s2">&quot;encryptionConfiguration&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">encryption_configuration</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">tables</span><span class="p">()</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">body</span><span class="o">=</span><span class="n">table_resource</span>
<span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;External table created successfully: </span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">external_project_dataset_table</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job failed. Error was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">content</span><span class="p">)</span></div>
<span class="p">)</span>
<div class="viewcode-block" id="BigQueryBaseCursor.patch_table"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.patch_table">[docs]</a> <span class="k">def</span> <span class="nf">patch_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
<span class="n">dataset_id</span><span class="p">,</span>
<span class="n">table_id</span><span class="p">,</span>
<span class="n">project_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">description</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">expiration_time</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">external_data_configuration</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">friendly_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">labels</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">schema</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">time_partitioning</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">view</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">require_partition_filter</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">encryption_configuration</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Patch information in an existing table.</span>
<span class="sd"> It only updates fileds that are provided in the request object.</span>
<span class="sd"> Reference: https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/patch</span>
<span class="sd"> :param dataset_id: The dataset containing the table to be patched.</span>
<span class="sd"> :type dataset_id: str</span>
<span class="sd"> :param table_id: The Name of the table to be patched.</span>
<span class="sd"> :type table_id: str</span>
<span class="sd"> :param project_id: The project containing the table to be patched.</span>
<span class="sd"> :type project_id: str</span>
<span class="sd"> :param description: [Optional] A user-friendly description of this table.</span>
<span class="sd"> :type description: str</span>
<span class="sd"> :param expiration_time: [Optional] The time when this table expires,</span>
<span class="sd"> in milliseconds since the epoch.</span>
<span class="sd"> :type expiration_time: int</span>
<span class="sd"> :param external_data_configuration: [Optional] A dictionary containing</span>
<span class="sd"> properties of a table stored outside of BigQuery.</span>
<span class="sd"> :type external_data_configuration: dict</span>
<span class="sd"> :param friendly_name: [Optional] A descriptive name for this table.</span>
<span class="sd"> :type friendly_name: str</span>
<span class="sd"> :param labels: [Optional] A dictionary containing labels associated with this table.</span>
<span class="sd"> :type labels: dict</span>
<span class="sd"> :param schema: [Optional] If set, the schema field list as defined here:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load.schema</span>
<span class="sd"> The supported schema modifications and unsupported schema modification are listed here:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/managing-table-schemas</span>
<span class="sd"> **Example**: ::</span>
<span class="sd"> schema=[{&quot;name&quot;: &quot;emp_name&quot;, &quot;type&quot;: &quot;STRING&quot;, &quot;mode&quot;: &quot;REQUIRED&quot;},</span>
<span class="sd"> {&quot;name&quot;: &quot;salary&quot;, &quot;type&quot;: &quot;INTEGER&quot;, &quot;mode&quot;: &quot;NULLABLE&quot;}]</span>
<span class="sd"> :type schema: list</span>
<span class="sd"> :param time_partitioning: [Optional] A dictionary containing time-based partitioning</span>
<span class="sd"> definition for the table.</span>
<span class="sd"> :type time_partitioning: dict</span>
<span class="sd"> :param view: [Optional] A dictionary containing definition for the view.</span>
<span class="sd"> If set, it will patch a view instead of a table:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#view</span>
<span class="sd"> **Example**: ::</span>
<span class="sd"> view = {</span>
<span class="sd"> &quot;query&quot;: &quot;SELECT * FROM `test-project-id.test_dataset_id.test_table_prefix*` LIMIT 500&quot;,</span>
<span class="sd"> &quot;useLegacySql&quot;: False</span>
<span class="sd"> }</span>
<span class="sd"> :type view: dict</span>
<span class="sd"> :param require_partition_filter: [Optional] If true, queries over the this table require a</span>
<span class="sd"> partition filter. If false, queries over the table</span>
<span class="sd"> :type require_partition_filter: bool</span>
<span class="sd"> :param encryption_configuration: [Optional] Custom encryption configuration (e.g., Cloud KMS keys).</span>
<span class="sd"> **Example**: ::</span>
<span class="sd"> encryption_configuration = {</span>
<span class="sd"> &quot;kmsKeyName&quot;: &quot;projects/testp/locations/us/keyRings/test-kr/cryptoKeys/test-key&quot;</span>
<span class="sd"> }</span>
<span class="sd"> :type encryption_configuration: dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">project_id</span> <span class="o">=</span> <span class="n">project_id</span> <span class="k">if</span> <span class="n">project_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span>
<span class="n">table_resource</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="n">description</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;description&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">description</span>
<span class="k">if</span> <span class="n">expiration_time</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;expirationTime&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expiration_time</span>
<span class="k">if</span> <span class="n">external_data_configuration</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;externalDataConfiguration&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">external_data_configuration</span>
<span class="k">if</span> <span class="n">friendly_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;friendlyName&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">friendly_name</span>
<span class="k">if</span> <span class="n">labels</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;labels&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">labels</span>
<span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;schema&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;fields&#39;</span><span class="p">:</span> <span class="n">schema</span><span class="p">}</span>
<span class="k">if</span> <span class="n">time_partitioning</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;timePartitioning&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">time_partitioning</span>
<span class="k">if</span> <span class="n">view</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;view&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">view</span>
<span class="k">if</span> <span class="n">require_partition_filter</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;requirePartitionFilter&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">require_partition_filter</span>
<span class="k">if</span> <span class="n">encryption_configuration</span><span class="p">:</span>
<span class="n">table_resource</span><span class="p">[</span><span class="s2">&quot;encryptionConfiguration&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">encryption_configuration</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Patching Table </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">tables</span><span class="p">()</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">tableId</span><span class="o">=</span><span class="n">table_id</span><span class="p">,</span>
<span class="n">body</span><span class="o">=</span><span class="n">table_resource</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Table patched successfully: </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job failed. Error was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">content</span><span class="p">)</span></div>
<span class="p">)</span>
<div class="viewcode-block" id="BigQueryBaseCursor.run_query"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.run_query">[docs]</a> <span class="k">def</span> <span class="nf">run_query</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="c1"># pylint: disable=too-many-locals,too-many-arguments</span>
<span class="n">bql</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">sql</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">destination_dataset_table</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">write_disposition</span><span class="o">=</span><span class="s1">&#39;WRITE_EMPTY&#39;</span><span class="p">,</span>
<span class="n">allow_large_results</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">flatten_results</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">udf_config</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">use_legacy_sql</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">maximum_billing_tier</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">maximum_bytes_billed</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">create_disposition</span><span class="o">=</span><span class="s1">&#39;CREATE_IF_NEEDED&#39;</span><span class="p">,</span>
<span class="n">query_params</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">labels</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">schema_update_options</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">priority</span><span class="o">=</span><span class="s1">&#39;INTERACTIVE&#39;</span><span class="p">,</span>
<span class="n">time_partitioning</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">api_resource_configs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">cluster_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">encryption_configuration</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Executes a BigQuery SQL query. Optionally persists results in a BigQuery</span>
<span class="sd"> table. See here:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/v2/jobs</span>
<span class="sd"> For more details about these parameters.</span>
<span class="sd"> :param bql: (Deprecated. Use `sql` parameter instead) The BigQuery SQL</span>
<span class="sd"> to execute.</span>
<span class="sd"> :type bql: str</span>
<span class="sd"> :param sql: The BigQuery SQL to execute.</span>
<span class="sd"> :type sql: str</span>
<span class="sd"> :param destination_dataset_table: The dotted ``&lt;dataset&gt;.&lt;table&gt;``</span>
<span class="sd"> BigQuery table to save the query results.</span>
<span class="sd"> :type destination_dataset_table: str</span>
<span class="sd"> :param write_disposition: What to do if the table already exists in</span>
<span class="sd"> BigQuery.</span>
<span class="sd"> :type write_disposition: str</span>
<span class="sd"> :param allow_large_results: Whether to allow large results.</span>
<span class="sd"> :type allow_large_results: bool</span>
<span class="sd"> :param flatten_results: If true and query uses legacy SQL dialect, flattens</span>
<span class="sd"> all nested and repeated fields in the query results. ``allowLargeResults``</span>
<span class="sd"> must be true if this is set to false. For standard SQL queries, this</span>
<span class="sd"> flag is ignored and results are never flattened.</span>
<span class="sd"> :type flatten_results: bool</span>
<span class="sd"> :param udf_config: The User Defined Function configuration for the query.</span>
<span class="sd"> See https://cloud.google.com/bigquery/user-defined-functions for details.</span>
<span class="sd"> :type udf_config: list</span>
<span class="sd"> :param use_legacy_sql: Whether to use legacy SQL (true) or standard SQL (false).</span>
<span class="sd"> If `None`, defaults to `self.use_legacy_sql`.</span>
<span class="sd"> :type use_legacy_sql: bool</span>
<span class="sd"> :param api_resource_configs: a dictionary that contain params</span>
<span class="sd"> &#39;configuration&#39; applied for Google BigQuery Jobs API:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs</span>
<span class="sd"> for example, {&#39;query&#39;: {&#39;useQueryCache&#39;: False}}. You could use it</span>
<span class="sd"> if you need to provide some params that are not supported by the</span>
<span class="sd"> BigQueryHook like args.</span>
<span class="sd"> :type api_resource_configs: dict</span>
<span class="sd"> :param maximum_billing_tier: Positive integer that serves as a</span>
<span class="sd"> multiplier of the basic price.</span>
<span class="sd"> :type maximum_billing_tier: int</span>
<span class="sd"> :param maximum_bytes_billed: Limits the bytes billed for this job.</span>
<span class="sd"> Queries that will have bytes billed beyond this limit will fail</span>
<span class="sd"> (without incurring a charge). If unspecified, this will be</span>
<span class="sd"> set to your project default.</span>
<span class="sd"> :type maximum_bytes_billed: float</span>
<span class="sd"> :param create_disposition: Specifies whether the job is allowed to</span>
<span class="sd"> create new tables.</span>
<span class="sd"> :type create_disposition: str</span>
<span class="sd"> :param query_params: a list of dictionary containing query parameter types and</span>
<span class="sd"> values, passed to BigQuery</span>
<span class="sd"> :type query_params: list</span>
<span class="sd"> :param labels: a dictionary containing labels for the job/query,</span>
<span class="sd"> passed to BigQuery</span>
<span class="sd"> :type labels: dict</span>
<span class="sd"> :param schema_update_options: Allows the schema of the destination</span>
<span class="sd"> table to be updated as a side effect of the query job.</span>
<span class="sd"> :type schema_update_options: Union[list, tuple, set]</span>
<span class="sd"> :param priority: Specifies a priority for the query.</span>
<span class="sd"> Possible values include INTERACTIVE and BATCH.</span>
<span class="sd"> The default value is INTERACTIVE.</span>
<span class="sd"> :type priority: str</span>
<span class="sd"> :param time_partitioning: configure optional time partitioning fields i.e.</span>
<span class="sd"> partition by field, type and expiration as per API specifications.</span>
<span class="sd"> :type time_partitioning: dict</span>
<span class="sd"> :param cluster_fields: Request that the result of this query be stored sorted</span>
<span class="sd"> by one or more columns. This is only available in combination with</span>
<span class="sd"> time_partitioning. The order of columns given determines the sort order.</span>
<span class="sd"> :type cluster_fields: list[str]</span>
<span class="sd"> :param location: The geographic location of the job. Required except for</span>
<span class="sd"> US and EU. See details at</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/locations#specifying_your_location</span>
<span class="sd"> :type location: str</span>
<span class="sd"> :param encryption_configuration: [Optional] Custom encryption configuration (e.g., Cloud KMS keys).</span>
<span class="sd"> **Example**: ::</span>
<span class="sd"> encryption_configuration = {</span>
<span class="sd"> &quot;kmsKeyName&quot;: &quot;projects/testp/locations/us/keyRings/test-kr/cryptoKeys/test-key&quot;</span>
<span class="sd"> }</span>
<span class="sd"> :type encryption_configuration: dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">schema_update_options</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">schema_update_options</span> <span class="ow">or</span> <span class="p">[])</span>
<span class="k">if</span> <span class="n">time_partitioning</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">time_partitioning</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="n">location</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="n">location</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">api_resource_configs</span><span class="p">:</span>
<span class="n">api_resource_configs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">api_resource_configs</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">_validate_value</span><span class="p">(</span><span class="s1">&#39;api_resource_configs&#39;</span><span class="p">,</span>
<span class="n">api_resource_configs</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span>
<span class="n">configuration</span> <span class="o">=</span> <span class="n">deepcopy</span><span class="p">(</span><span class="n">api_resource_configs</span><span class="p">)</span>
<span class="k">if</span> <span class="s1">&#39;query&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">configuration</span><span class="p">:</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">_validate_value</span><span class="p">(</span><span class="s2">&quot;api_resource_configs[&#39;query&#39;]&quot;</span><span class="p">,</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">],</span> <span class="nb">dict</span><span class="p">)</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">bql</span> <span class="k">if</span> <span class="n">sql</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">sql</span>
<span class="c1"># TODO remove `bql` in Airflow 2.0 - Jira: [AIRFLOW-2513]</span>
<span class="k">if</span> <span class="n">bql</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">warnings</span>
<span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s1">&#39;Deprecated parameter `bql` used in &#39;</span>
<span class="s1">&#39;`BigQueryBaseCursor.run_query` &#39;</span>
<span class="s1">&#39;Use `sql` parameter instead to pass the sql to be &#39;</span>
<span class="s1">&#39;executed. `bql` parameter is deprecated and &#39;</span>
<span class="s1">&#39;will be removed in a future version of &#39;</span>
<span class="s1">&#39;Airflow.&#39;</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="ne">DeprecationWarning</span><span class="p">)</span>
<span class="k">if</span> <span class="n">sql</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;query&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s1">&#39;`BigQueryBaseCursor.run_query` &#39;</span>
<span class="s1">&#39;missing 1 required positional argument: `sql`&#39;</span><span class="p">)</span>
<span class="c1"># BigQuery also allows you to define how you want a table&#39;s schema to change</span>
<span class="c1"># as a side effect of a query job</span>
<span class="c1"># for more details:</span>
<span class="c1"># https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.query.schemaUpdateOptions</span>
<span class="n">allowed_schema_update_options</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;ALLOW_FIELD_ADDITION&#39;</span><span class="p">,</span> <span class="s2">&quot;ALLOW_FIELD_RELAXATION&quot;</span>
<span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">set</span><span class="p">(</span><span class="n">allowed_schema_update_options</span>
<span class="p">)</span><span class="o">.</span><span class="n">issuperset</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">schema_update_options</span><span class="p">)):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{0}</span><span class="s2"> contains invalid schema update options. &quot;</span>
<span class="s2">&quot;Please only use one or more of the following &quot;</span>
<span class="s2">&quot;options: </span><span class="si">{1}</span><span class="s2">&quot;</span>
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">schema_update_options</span><span class="p">,</span>
<span class="n">allowed_schema_update_options</span><span class="p">))</span>
<span class="k">if</span> <span class="n">schema_update_options</span><span class="p">:</span>
<span class="k">if</span> <span class="n">write_disposition</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;WRITE_APPEND&quot;</span><span class="p">,</span> <span class="s2">&quot;WRITE_TRUNCATE&quot;</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;schema_update_options is only &quot;</span>
<span class="s2">&quot;allowed if write_disposition is &quot;</span>
<span class="s2">&quot;&#39;WRITE_APPEND&#39; or &#39;WRITE_TRUNCATE&#39;.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">destination_dataset_table</span><span class="p">:</span>
<span class="n">destination_project</span><span class="p">,</span> <span class="n">destination_dataset</span><span class="p">,</span> <span class="n">destination_table</span> <span class="o">=</span> \
<span class="n">_split_tablename</span><span class="p">(</span><span class="n">table_input</span><span class="o">=</span><span class="n">destination_dataset_table</span><span class="p">,</span>
<span class="n">default_project_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">)</span>
<span class="n">destination_dataset_table</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;projectId&#39;</span><span class="p">:</span> <span class="n">destination_project</span><span class="p">,</span>
<span class="s1">&#39;datasetId&#39;</span><span class="p">:</span> <span class="n">destination_dataset</span><span class="p">,</span>
<span class="s1">&#39;tableId&#39;</span><span class="p">:</span> <span class="n">destination_table</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">cluster_fields</span><span class="p">:</span>
<span class="n">cluster_fields</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;fields&#39;</span><span class="p">:</span> <span class="n">cluster_fields</span><span class="p">}</span>
<span class="n">query_param_list</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="s1">&#39;query&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">six</span><span class="o">.</span><span class="n">string_types</span><span class="p">),</span>
<span class="p">(</span><span class="n">priority</span><span class="p">,</span> <span class="s1">&#39;priority&#39;</span><span class="p">,</span> <span class="s1">&#39;INTERACTIVE&#39;</span><span class="p">,</span> <span class="n">six</span><span class="o">.</span><span class="n">string_types</span><span class="p">),</span>
<span class="p">(</span><span class="n">use_legacy_sql</span><span class="p">,</span> <span class="s1">&#39;useLegacySql&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_legacy_sql</span><span class="p">,</span> <span class="nb">bool</span><span class="p">),</span>
<span class="p">(</span><span class="n">query_params</span><span class="p">,</span> <span class="s1">&#39;queryParameters&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">list</span><span class="p">),</span>
<span class="p">(</span><span class="n">udf_config</span><span class="p">,</span> <span class="s1">&#39;userDefinedFunctionResources&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">list</span><span class="p">),</span>
<span class="p">(</span><span class="n">maximum_billing_tier</span><span class="p">,</span> <span class="s1">&#39;maximumBillingTier&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">int</span><span class="p">),</span>
<span class="p">(</span><span class="n">maximum_bytes_billed</span><span class="p">,</span> <span class="s1">&#39;maximumBytesBilled&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">float</span><span class="p">),</span>
<span class="p">(</span><span class="n">time_partitioning</span><span class="p">,</span> <span class="s1">&#39;timePartitioning&#39;</span><span class="p">,</span> <span class="p">{},</span> <span class="nb">dict</span><span class="p">),</span>
<span class="p">(</span><span class="n">schema_update_options</span><span class="p">,</span> <span class="s1">&#39;schemaUpdateOptions&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">list</span><span class="p">),</span>
<span class="p">(</span><span class="n">destination_dataset_table</span><span class="p">,</span> <span class="s1">&#39;destinationTable&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">dict</span><span class="p">),</span>
<span class="p">(</span><span class="n">cluster_fields</span><span class="p">,</span> <span class="s1">&#39;clustering&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">dict</span><span class="p">),</span>
<span class="p">]</span>
<span class="k">for</span> <span class="n">param</span><span class="p">,</span> <span class="n">param_name</span><span class="p">,</span> <span class="n">param_default</span><span class="p">,</span> <span class="n">param_type</span> <span class="ow">in</span> <span class="n">query_param_list</span><span class="p">:</span>
<span class="k">if</span> <span class="n">param_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="n">param</span> <span class="ow">in</span> <span class="p">[</span><span class="kc">None</span><span class="p">,</span> <span class="p">{},</span> <span class="p">()]:</span>
<span class="k">if</span> <span class="n">param_name</span> <span class="o">==</span> <span class="s1">&#39;timePartitioning&#39;</span><span class="p">:</span>
<span class="n">param_default</span> <span class="o">=</span> <span class="n">_cleanse_time_partitioning</span><span class="p">(</span>
<span class="n">destination_dataset_table</span><span class="p">,</span> <span class="n">time_partitioning</span><span class="p">)</span>
<span class="n">param</span> <span class="o">=</span> <span class="n">param_default</span>
<span class="k">if</span> <span class="n">param</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="kc">None</span><span class="p">,</span> <span class="p">{},</span> <span class="p">()]:</span>
<span class="n">_api_resource_configs_duplication_check</span><span class="p">(</span>
<span class="n">param_name</span><span class="p">,</span> <span class="n">param</span><span class="p">,</span> <span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">])</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">][</span><span class="n">param_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">param</span>
<span class="c1"># check valid type of provided param,</span>
<span class="c1"># it last step because we can get param from 2 sources,</span>
<span class="c1"># and first of all need to find it</span>
<span class="n">_validate_value</span><span class="p">(</span><span class="n">param_name</span><span class="p">,</span> <span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">][</span><span class="n">param_name</span><span class="p">],</span>
<span class="n">param_type</span><span class="p">)</span>
<span class="k">if</span> <span class="n">param_name</span> <span class="o">==</span> <span class="s1">&#39;schemaUpdateOptions&#39;</span> <span class="ow">and</span> <span class="n">param</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Adding experimental &#39;schemaUpdateOptions&#39;: &quot;</span>
<span class="s2">&quot;</span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">schema_update_options</span><span class="p">)</span>
<span class="k">if</span> <span class="n">param_name</span> <span class="o">==</span> <span class="s1">&#39;destinationTable&#39;</span><span class="p">:</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;projectId&#39;</span><span class="p">,</span> <span class="s1">&#39;datasetId&#39;</span><span class="p">,</span> <span class="s1">&#39;tableId&#39;</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">][</span><span class="s1">&#39;destinationTable&#39;</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;Not correct &#39;destinationTable&#39; in &quot;</span>
<span class="s2">&quot;api_resource_configs. &#39;destinationTable&#39; &quot;</span>
<span class="s2">&quot;must be a dict with {&#39;projectId&#39;:&#39;&#39;, &quot;</span>
<span class="s2">&quot;&#39;datasetId&#39;:&#39;&#39;, &#39;tableId&#39;:&#39;&#39;}&quot;</span><span class="p">)</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
<span class="s1">&#39;allowLargeResults&#39;</span><span class="p">:</span> <span class="n">allow_large_results</span><span class="p">,</span>
<span class="s1">&#39;flattenResults&#39;</span><span class="p">:</span> <span class="n">flatten_results</span><span class="p">,</span>
<span class="s1">&#39;writeDisposition&#39;</span><span class="p">:</span> <span class="n">write_disposition</span><span class="p">,</span>
<span class="s1">&#39;createDisposition&#39;</span><span class="p">:</span> <span class="n">create_disposition</span><span class="p">,</span>
<span class="p">})</span>
<span class="k">if</span> <span class="s1">&#39;useLegacySql&#39;</span> <span class="ow">in</span> <span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">][</span><span class="s1">&#39;useLegacySql&#39;</span><span class="p">]</span> <span class="ow">and</span>\
<span class="s1">&#39;queryParameters&#39;</span> <span class="ow">in</span> <span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;query&#39;</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Query parameters are not allowed &quot;</span>
<span class="s2">&quot;when using legacy SQL&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">labels</span><span class="p">:</span>
<span class="n">_api_resource_configs_duplication_check</span><span class="p">(</span>
<span class="s1">&#39;labels&#39;</span><span class="p">,</span> <span class="n">labels</span><span class="p">,</span> <span class="n">configuration</span><span class="p">)</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;labels&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">labels</span>
<span class="k">if</span> <span class="n">encryption_configuration</span><span class="p">:</span>
<span class="n">configuration</span><span class="p">[</span><span class="s2">&quot;query&quot;</span><span class="p">][</span>
<span class="s2">&quot;destinationEncryptionConfiguration&quot;</span>
<span class="p">]</span> <span class="o">=</span> <span class="n">encryption_configuration</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_with_configuration</span><span class="p">(</span><span class="n">configuration</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.run_extract"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.run_extract">[docs]</a> <span class="k">def</span> <span class="nf">run_extract</span><span class="p">(</span> <span class="c1"># noqa</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">source_project_dataset_table</span><span class="p">,</span>
<span class="n">destination_cloud_storage_uris</span><span class="p">,</span>
<span class="n">compression</span><span class="o">=</span><span class="s1">&#39;NONE&#39;</span><span class="p">,</span>
<span class="n">export_format</span><span class="o">=</span><span class="s1">&#39;CSV&#39;</span><span class="p">,</span>
<span class="n">field_delimiter</span><span class="o">=</span><span class="s1">&#39;,&#39;</span><span class="p">,</span>
<span class="n">print_header</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">labels</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Executes a BigQuery extract command to copy data from BigQuery to</span>
<span class="sd"> Google Cloud Storage. See here:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/v2/jobs</span>
<span class="sd"> For more details about these parameters.</span>
<span class="sd"> :param source_project_dataset_table: The dotted ``&lt;dataset&gt;.&lt;table&gt;``</span>
<span class="sd"> BigQuery table to use as the source data.</span>
<span class="sd"> :type source_project_dataset_table: str</span>
<span class="sd"> :param destination_cloud_storage_uris: The destination Google Cloud</span>
<span class="sd"> Storage URI (e.g. gs://some-bucket/some-file.txt). Follows</span>
<span class="sd"> convention defined here:</span>
<span class="sd"> https://cloud.google.com/bigquery/exporting-data-from-bigquery#exportingmultiple</span>
<span class="sd"> :type destination_cloud_storage_uris: list</span>
<span class="sd"> :param compression: Type of compression to use.</span>
<span class="sd"> :type compression: str</span>
<span class="sd"> :param export_format: File format to export.</span>
<span class="sd"> :type export_format: str</span>
<span class="sd"> :param field_delimiter: The delimiter to use when extracting to a CSV.</span>
<span class="sd"> :type field_delimiter: str</span>
<span class="sd"> :param print_header: Whether to print a header for a CSV file extract.</span>
<span class="sd"> :type print_header: bool</span>
<span class="sd"> :param labels: a dictionary containing labels for the job/query,</span>
<span class="sd"> passed to BigQuery</span>
<span class="sd"> :type labels: dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">source_project</span><span class="p">,</span> <span class="n">source_dataset</span><span class="p">,</span> <span class="n">source_table</span> <span class="o">=</span> \
<span class="n">_split_tablename</span><span class="p">(</span><span class="n">table_input</span><span class="o">=</span><span class="n">source_project_dataset_table</span><span class="p">,</span>
<span class="n">default_project_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">var_name</span><span class="o">=</span><span class="s1">&#39;source_project_dataset_table&#39;</span><span class="p">)</span>
<span class="n">configuration</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;extract&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;sourceTable&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;projectId&#39;</span><span class="p">:</span> <span class="n">source_project</span><span class="p">,</span>
<span class="s1">&#39;datasetId&#39;</span><span class="p">:</span> <span class="n">source_dataset</span><span class="p">,</span>
<span class="s1">&#39;tableId&#39;</span><span class="p">:</span> <span class="n">source_table</span><span class="p">,</span>
<span class="p">},</span>
<span class="s1">&#39;compression&#39;</span><span class="p">:</span> <span class="n">compression</span><span class="p">,</span>
<span class="s1">&#39;destinationUris&#39;</span><span class="p">:</span> <span class="n">destination_cloud_storage_uris</span><span class="p">,</span>
<span class="s1">&#39;destinationFormat&#39;</span><span class="p">:</span> <span class="n">export_format</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">labels</span><span class="p">:</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;labels&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">labels</span>
<span class="k">if</span> <span class="n">export_format</span> <span class="o">==</span> <span class="s1">&#39;CSV&#39;</span><span class="p">:</span>
<span class="c1"># Only set fieldDelimiter and printHeader fields if using CSV.</span>
<span class="c1"># Google does not like it if you set these fields for other export</span>
<span class="c1"># formats.</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;extract&#39;</span><span class="p">][</span><span class="s1">&#39;fieldDelimiter&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">field_delimiter</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;extract&#39;</span><span class="p">][</span><span class="s1">&#39;printHeader&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">print_header</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_with_configuration</span><span class="p">(</span><span class="n">configuration</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.run_copy"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.run_copy">[docs]</a> <span class="k">def</span> <span class="nf">run_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
<span class="n">source_project_dataset_tables</span><span class="p">,</span>
<span class="n">destination_project_dataset_table</span><span class="p">,</span>
<span class="n">write_disposition</span><span class="o">=</span><span class="s1">&#39;WRITE_EMPTY&#39;</span><span class="p">,</span>
<span class="n">create_disposition</span><span class="o">=</span><span class="s1">&#39;CREATE_IF_NEEDED&#39;</span><span class="p">,</span>
<span class="n">labels</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">encryption_configuration</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Executes a BigQuery copy command to copy data from one BigQuery table</span>
<span class="sd"> to another. See here:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.copy</span>
<span class="sd"> For more details about these parameters.</span>
<span class="sd"> :param source_project_dataset_tables: One or more dotted</span>
<span class="sd"> ``(project:|project.)&lt;dataset&gt;.&lt;table&gt;``</span>
<span class="sd"> BigQuery tables to use as the source data. Use a list if there are</span>
<span class="sd"> multiple source tables.</span>
<span class="sd"> If ``&lt;project&gt;`` is not included, project will be the project defined</span>
<span class="sd"> in the connection json.</span>
<span class="sd"> :type source_project_dataset_tables: list|string</span>
<span class="sd"> :param destination_project_dataset_table: The destination BigQuery</span>
<span class="sd"> table. Format is: ``(project:|project.)&lt;dataset&gt;.&lt;table&gt;``</span>
<span class="sd"> :type destination_project_dataset_table: str</span>
<span class="sd"> :param write_disposition: The write disposition if the table already exists.</span>
<span class="sd"> :type write_disposition: str</span>
<span class="sd"> :param create_disposition: The create disposition if the table doesn&#39;t exist.</span>
<span class="sd"> :type create_disposition: str</span>
<span class="sd"> :param labels: a dictionary containing labels for the job/query,</span>
<span class="sd"> passed to BigQuery</span>
<span class="sd"> :type labels: dict</span>
<span class="sd"> :param encryption_configuration: [Optional] Custom encryption configuration (e.g., Cloud KMS keys).</span>
<span class="sd"> **Example**: ::</span>
<span class="sd"> encryption_configuration = {</span>
<span class="sd"> &quot;kmsKeyName&quot;: &quot;projects/testp/locations/us/keyRings/test-kr/cryptoKeys/test-key&quot;</span>
<span class="sd"> }</span>
<span class="sd"> :type encryption_configuration: dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">source_project_dataset_tables</span> <span class="o">=</span> <span class="p">([</span>
<span class="n">source_project_dataset_tables</span>
<span class="p">]</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source_project_dataset_tables</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span>
<span class="n">source_project_dataset_tables</span><span class="p">)</span>
<span class="n">source_project_dataset_tables_fixup</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">source_project_dataset_table</span> <span class="ow">in</span> <span class="n">source_project_dataset_tables</span><span class="p">:</span>
<span class="n">source_project</span><span class="p">,</span> <span class="n">source_dataset</span><span class="p">,</span> <span class="n">source_table</span> <span class="o">=</span> \
<span class="n">_split_tablename</span><span class="p">(</span><span class="n">table_input</span><span class="o">=</span><span class="n">source_project_dataset_table</span><span class="p">,</span>
<span class="n">default_project_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">var_name</span><span class="o">=</span><span class="s1">&#39;source_project_dataset_table&#39;</span><span class="p">)</span>
<span class="n">source_project_dataset_tables_fixup</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
<span class="s1">&#39;projectId&#39;</span><span class="p">:</span>
<span class="n">source_project</span><span class="p">,</span>
<span class="s1">&#39;datasetId&#39;</span><span class="p">:</span>
<span class="n">source_dataset</span><span class="p">,</span>
<span class="s1">&#39;tableId&#39;</span><span class="p">:</span>
<span class="n">source_table</span>
<span class="p">})</span>
<span class="n">destination_project</span><span class="p">,</span> <span class="n">destination_dataset</span><span class="p">,</span> <span class="n">destination_table</span> <span class="o">=</span> \
<span class="n">_split_tablename</span><span class="p">(</span><span class="n">table_input</span><span class="o">=</span><span class="n">destination_project_dataset_table</span><span class="p">,</span>
<span class="n">default_project_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">)</span>
<span class="n">configuration</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;copy&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;createDisposition&#39;</span><span class="p">:</span> <span class="n">create_disposition</span><span class="p">,</span>
<span class="s1">&#39;writeDisposition&#39;</span><span class="p">:</span> <span class="n">write_disposition</span><span class="p">,</span>
<span class="s1">&#39;sourceTables&#39;</span><span class="p">:</span> <span class="n">source_project_dataset_tables_fixup</span><span class="p">,</span>
<span class="s1">&#39;destinationTable&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;projectId&#39;</span><span class="p">:</span> <span class="n">destination_project</span><span class="p">,</span>
<span class="s1">&#39;datasetId&#39;</span><span class="p">:</span> <span class="n">destination_dataset</span><span class="p">,</span>
<span class="s1">&#39;tableId&#39;</span><span class="p">:</span> <span class="n">destination_table</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">labels</span><span class="p">:</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;labels&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">labels</span>
<span class="k">if</span> <span class="n">encryption_configuration</span><span class="p">:</span>
<span class="n">configuration</span><span class="p">[</span><span class="s2">&quot;copy&quot;</span><span class="p">][</span>
<span class="s2">&quot;destinationEncryptionConfiguration&quot;</span>
<span class="p">]</span> <span class="o">=</span> <span class="n">encryption_configuration</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_with_configuration</span><span class="p">(</span><span class="n">configuration</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.run_load"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.run_load">[docs]</a> <span class="k">def</span> <span class="nf">run_load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
<span class="n">destination_project_dataset_table</span><span class="p">,</span>
<span class="n">source_uris</span><span class="p">,</span>
<span class="n">schema_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">source_format</span><span class="o">=</span><span class="s1">&#39;CSV&#39;</span><span class="p">,</span>
<span class="n">create_disposition</span><span class="o">=</span><span class="s1">&#39;CREATE_IF_NEEDED&#39;</span><span class="p">,</span>
<span class="n">skip_leading_rows</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">write_disposition</span><span class="o">=</span><span class="s1">&#39;WRITE_EMPTY&#39;</span><span class="p">,</span>
<span class="n">field_delimiter</span><span class="o">=</span><span class="s1">&#39;,&#39;</span><span class="p">,</span>
<span class="n">max_bad_records</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">quote_character</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">ignore_unknown_values</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">allow_quoted_newlines</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">allow_jagged_rows</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;UTF-8&quot;</span><span class="p">,</span>
<span class="n">schema_update_options</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">src_fmt_configs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">time_partitioning</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">cluster_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">autodetect</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">encryption_configuration</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Executes a BigQuery load command to load data from Google Cloud Storage</span>
<span class="sd"> to BigQuery. See here:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/v2/jobs</span>
<span class="sd"> For more details about these parameters.</span>
<span class="sd"> :param destination_project_dataset_table:</span>
<span class="sd"> The dotted ``(&lt;project&gt;.|&lt;project&gt;:)&lt;dataset&gt;.&lt;table&gt;($&lt;partition&gt;)`` BigQuery</span>
<span class="sd"> table to load data into. If ``&lt;project&gt;`` is not included, project will be the</span>
<span class="sd"> project defined in the connection json. If a partition is specified the</span>
<span class="sd"> operator will automatically append the data, create a new partition or create</span>
<span class="sd"> a new DAY partitioned table.</span>
<span class="sd"> :type destination_project_dataset_table: str</span>
<span class="sd"> :param schema_fields: The schema field list as defined here:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.load</span>
<span class="sd"> Required if autodetect=False; optional if autodetect=True.</span>
<span class="sd"> :type schema_fields: list</span>
<span class="sd"> :param autodetect: Attempt to autodetect the schema for CSV and JSON</span>
<span class="sd"> source files.</span>
<span class="sd"> :type autodetect: bool</span>
<span class="sd"> :param source_uris: The source Google Cloud</span>
<span class="sd"> Storage URI (e.g. gs://some-bucket/some-file.txt). A single wild</span>
<span class="sd"> per-object name can be used.</span>
<span class="sd"> :type source_uris: list</span>
<span class="sd"> :param source_format: File format to export.</span>
<span class="sd"> :type source_format: str</span>
<span class="sd"> :param create_disposition: The create disposition if the table doesn&#39;t exist.</span>
<span class="sd"> :type create_disposition: str</span>
<span class="sd"> :param skip_leading_rows: Number of rows to skip when loading from a CSV.</span>
<span class="sd"> :type skip_leading_rows: int</span>
<span class="sd"> :param write_disposition: The write disposition if the table already exists.</span>
<span class="sd"> :type write_disposition: str</span>
<span class="sd"> :param field_delimiter: The delimiter to use when loading from a CSV.</span>
<span class="sd"> :type field_delimiter: str</span>
<span class="sd"> :param max_bad_records: The maximum number of bad records that BigQuery can</span>
<span class="sd"> ignore when running the job.</span>
<span class="sd"> :type max_bad_records: int</span>
<span class="sd"> :param quote_character: The value that is used to quote data sections in a CSV</span>
<span class="sd"> file.</span>
<span class="sd"> :type quote_character: str</span>
<span class="sd"> :param ignore_unknown_values: [Optional] Indicates if BigQuery should allow</span>
<span class="sd"> extra values that are not represented in the table schema.</span>
<span class="sd"> If true, the extra values are ignored. If false, records with extra columns</span>
<span class="sd"> are treated as bad records, and if there are too many bad records, an</span>
<span class="sd"> invalid error is returned in the job result.</span>
<span class="sd"> :type ignore_unknown_values: bool</span>
<span class="sd"> :param allow_quoted_newlines: Whether to allow quoted newlines (true) or not</span>
<span class="sd"> (false).</span>
<span class="sd"> :type allow_quoted_newlines: bool</span>
<span class="sd"> :param allow_jagged_rows: Accept rows that are missing trailing optional columns.</span>
<span class="sd"> The missing values are treated as nulls. If false, records with missing</span>
<span class="sd"> trailing columns are treated as bad records, and if there are too many bad</span>
<span class="sd"> records, an invalid error is returned in the job result. Only applicable when</span>
<span class="sd"> soure_format is CSV.</span>
<span class="sd"> :type allow_jagged_rows: bool</span>
<span class="sd"> :param encoding: The character encoding of the data.</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#externalDataConfiguration.csvOptions.encoding</span>
<span class="sd"> :type encoding: str</span>
<span class="sd"> :param schema_update_options: Allows the schema of the destination</span>
<span class="sd"> table to be updated as a side effect of the load job.</span>
<span class="sd"> :type schema_update_options: Union[list, tuple, set]</span>
<span class="sd"> :param src_fmt_configs: configure optional fields specific to the source format</span>
<span class="sd"> :type src_fmt_configs: dict</span>
<span class="sd"> :param time_partitioning: configure optional time partitioning fields i.e.</span>
<span class="sd"> partition by field, type and expiration as per API specifications.</span>
<span class="sd"> :type time_partitioning: dict</span>
<span class="sd"> :param cluster_fields: Request that the result of this load be stored sorted</span>
<span class="sd"> by one or more columns. This is only available in combination with</span>
<span class="sd"> time_partitioning. The order of columns given determines the sort order.</span>
<span class="sd"> :type cluster_fields: list[str]</span>
<span class="sd"> :param encryption_configuration: [Optional] Custom encryption configuration (e.g., Cloud KMS keys).</span>
<span class="sd"> **Example**: ::</span>
<span class="sd"> encryption_configuration = {</span>
<span class="sd"> &quot;kmsKeyName&quot;: &quot;projects/testp/locations/us/keyRings/test-kr/cryptoKeys/test-key&quot;</span>
<span class="sd"> }</span>
<span class="sd"> :type encryption_configuration: dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># To provide backward compatibility</span>
<span class="n">schema_update_options</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">schema_update_options</span> <span class="ow">or</span> <span class="p">[])</span>
<span class="c1"># bigquery only allows certain source formats</span>
<span class="c1"># we check to make sure the passed source format is valid</span>
<span class="c1"># if it&#39;s not, we raise a ValueError</span>
<span class="c1"># Refer to this link for more details:</span>
<span class="c1"># https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.query.tableDefinitions.(key).sourceFormat</span>
<span class="k">if</span> <span class="n">schema_fields</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">autodetect</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s1">&#39;You must either pass a schema or autodetect=True.&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">src_fmt_configs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">src_fmt_configs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">source_format</span> <span class="o">=</span> <span class="n">source_format</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<span class="n">allowed_formats</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;CSV&quot;</span><span class="p">,</span> <span class="s2">&quot;NEWLINE_DELIMITED_JSON&quot;</span><span class="p">,</span> <span class="s2">&quot;AVRO&quot;</span><span class="p">,</span> <span class="s2">&quot;GOOGLE_SHEETS&quot;</span><span class="p">,</span>
<span class="s2">&quot;DATASTORE_BACKUP&quot;</span><span class="p">,</span> <span class="s2">&quot;PARQUET&quot;</span>
<span class="p">]</span>
<span class="k">if</span> <span class="n">source_format</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">allowed_formats</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{0}</span><span class="s2"> is not a valid source format. &quot;</span>
<span class="s2">&quot;Please use one of the following types: </span><span class="si">{1}</span><span class="s2">&quot;</span>
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">source_format</span><span class="p">,</span> <span class="n">allowed_formats</span><span class="p">))</span>
<span class="c1"># bigquery also allows you to define how you want a table&#39;s schema to change</span>
<span class="c1"># as a side effect of a load</span>
<span class="c1"># for more details:</span>
<span class="c1"># https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load.schemaUpdateOptions</span>
<span class="n">allowed_schema_update_options</span> <span class="o">=</span> <span class="p">[</span>
<span class="s1">&#39;ALLOW_FIELD_ADDITION&#39;</span><span class="p">,</span> <span class="s2">&quot;ALLOW_FIELD_RELAXATION&quot;</span>
<span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">set</span><span class="p">(</span><span class="n">allowed_schema_update_options</span><span class="p">)</span><span class="o">.</span><span class="n">issuperset</span><span class="p">(</span>
<span class="nb">set</span><span class="p">(</span><span class="n">schema_update_options</span><span class="p">)):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">{0}</span><span class="s2"> contains invalid schema update options.&quot;</span>
<span class="s2">&quot;Please only use one or more of the following options: </span><span class="si">{1}</span><span class="s2">&quot;</span>
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">schema_update_options</span><span class="p">,</span> <span class="n">allowed_schema_update_options</span><span class="p">))</span>
<span class="n">destination_project</span><span class="p">,</span> <span class="n">destination_dataset</span><span class="p">,</span> <span class="n">destination_table</span> <span class="o">=</span> \
<span class="n">_split_tablename</span><span class="p">(</span><span class="n">table_input</span><span class="o">=</span><span class="n">destination_project_dataset_table</span><span class="p">,</span>
<span class="n">default_project_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">var_name</span><span class="o">=</span><span class="s1">&#39;destination_project_dataset_table&#39;</span><span class="p">)</span>
<span class="n">configuration</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;load&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;autodetect&#39;</span><span class="p">:</span> <span class="n">autodetect</span><span class="p">,</span>
<span class="s1">&#39;createDisposition&#39;</span><span class="p">:</span> <span class="n">create_disposition</span><span class="p">,</span>
<span class="s1">&#39;destinationTable&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;projectId&#39;</span><span class="p">:</span> <span class="n">destination_project</span><span class="p">,</span>
<span class="s1">&#39;datasetId&#39;</span><span class="p">:</span> <span class="n">destination_dataset</span><span class="p">,</span>
<span class="s1">&#39;tableId&#39;</span><span class="p">:</span> <span class="n">destination_table</span><span class="p">,</span>
<span class="p">},</span>
<span class="s1">&#39;sourceFormat&#39;</span><span class="p">:</span> <span class="n">source_format</span><span class="p">,</span>
<span class="s1">&#39;sourceUris&#39;</span><span class="p">:</span> <span class="n">source_uris</span><span class="p">,</span>
<span class="s1">&#39;writeDisposition&#39;</span><span class="p">:</span> <span class="n">write_disposition</span><span class="p">,</span>
<span class="s1">&#39;ignoreUnknownValues&#39;</span><span class="p">:</span> <span class="n">ignore_unknown_values</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">time_partitioning</span> <span class="o">=</span> <span class="n">_cleanse_time_partitioning</span><span class="p">(</span>
<span class="n">destination_project_dataset_table</span><span class="p">,</span>
<span class="n">time_partitioning</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">time_partitioning</span><span class="p">:</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;load&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
<span class="s1">&#39;timePartitioning&#39;</span><span class="p">:</span> <span class="n">time_partitioning</span>
<span class="p">})</span>
<span class="k">if</span> <span class="n">cluster_fields</span><span class="p">:</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;load&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s1">&#39;clustering&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;fields&#39;</span><span class="p">:</span> <span class="n">cluster_fields</span><span class="p">}})</span>
<span class="k">if</span> <span class="n">schema_fields</span><span class="p">:</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;load&#39;</span><span class="p">][</span><span class="s1">&#39;schema&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;fields&#39;</span><span class="p">:</span> <span class="n">schema_fields</span><span class="p">}</span>
<span class="k">if</span> <span class="n">schema_update_options</span><span class="p">:</span>
<span class="k">if</span> <span class="n">write_disposition</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;WRITE_APPEND&quot;</span><span class="p">,</span> <span class="s2">&quot;WRITE_TRUNCATE&quot;</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;schema_update_options is only &quot;</span>
<span class="s2">&quot;allowed if write_disposition is &quot;</span>
<span class="s2">&quot;&#39;WRITE_APPEND&#39; or &#39;WRITE_TRUNCATE&#39;.&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="s2">&quot;Adding experimental &#39;schemaUpdateOptions&#39;: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span>
<span class="n">schema_update_options</span>
<span class="p">)</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;load&#39;</span><span class="p">][</span>
<span class="s1">&#39;schemaUpdateOptions&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">schema_update_options</span>
<span class="k">if</span> <span class="n">max_bad_records</span><span class="p">:</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;load&#39;</span><span class="p">][</span><span class="s1">&#39;maxBadRecords&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">max_bad_records</span>
<span class="k">if</span> <span class="n">encryption_configuration</span><span class="p">:</span>
<span class="n">configuration</span><span class="p">[</span><span class="s2">&quot;load&quot;</span><span class="p">][</span>
<span class="s2">&quot;destinationEncryptionConfiguration&quot;</span>
<span class="p">]</span> <span class="o">=</span> <span class="n">encryption_configuration</span>
<span class="n">src_fmt_to_configs_mapping</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;CSV&#39;</span><span class="p">:</span> <span class="p">[</span>
<span class="s1">&#39;allowJaggedRows&#39;</span><span class="p">,</span> <span class="s1">&#39;allowQuotedNewlines&#39;</span><span class="p">,</span> <span class="s1">&#39;autodetect&#39;</span><span class="p">,</span>
<span class="s1">&#39;fieldDelimiter&#39;</span><span class="p">,</span> <span class="s1">&#39;skipLeadingRows&#39;</span><span class="p">,</span> <span class="s1">&#39;ignoreUnknownValues&#39;</span><span class="p">,</span>
<span class="s1">&#39;nullMarker&#39;</span><span class="p">,</span> <span class="s1">&#39;quote&#39;</span><span class="p">,</span> <span class="s1">&#39;encoding&#39;</span>
<span class="p">],</span>
<span class="s1">&#39;DATASTORE_BACKUP&#39;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;projectionFields&#39;</span><span class="p">],</span>
<span class="s1">&#39;NEWLINE_DELIMITED_JSON&#39;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;autodetect&#39;</span><span class="p">,</span> <span class="s1">&#39;ignoreUnknownValues&#39;</span><span class="p">],</span>
<span class="s1">&#39;PARQUET&#39;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;autodetect&#39;</span><span class="p">,</span> <span class="s1">&#39;ignoreUnknownValues&#39;</span><span class="p">],</span>
<span class="s1">&#39;AVRO&#39;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;useAvroLogicalTypes&#39;</span><span class="p">],</span>
<span class="p">}</span>
<span class="n">valid_configs</span> <span class="o">=</span> <span class="n">src_fmt_to_configs_mapping</span><span class="p">[</span><span class="n">source_format</span><span class="p">]</span>
<span class="c1"># if following fields are not specified in src_fmt_configs,</span>
<span class="c1"># honor the top-level params for backward-compatibility</span>
<span class="n">backward_compatibility_configs</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;skipLeadingRows&#39;</span><span class="p">:</span> <span class="n">skip_leading_rows</span><span class="p">,</span>
<span class="s1">&#39;fieldDelimiter&#39;</span><span class="p">:</span> <span class="n">field_delimiter</span><span class="p">,</span>
<span class="s1">&#39;ignoreUnknownValues&#39;</span><span class="p">:</span> <span class="n">ignore_unknown_values</span><span class="p">,</span>
<span class="s1">&#39;quote&#39;</span><span class="p">:</span> <span class="n">quote_character</span><span class="p">,</span>
<span class="s1">&#39;allowQuotedNewlines&#39;</span><span class="p">:</span> <span class="n">allow_quoted_newlines</span><span class="p">,</span>
<span class="s1">&#39;encoding&#39;</span><span class="p">:</span> <span class="n">encoding</span><span class="p">}</span>
<span class="n">src_fmt_configs</span> <span class="o">=</span> <span class="n">_validate_src_fmt_configs</span><span class="p">(</span><span class="n">source_format</span><span class="p">,</span> <span class="n">src_fmt_configs</span><span class="p">,</span> <span class="n">valid_configs</span><span class="p">,</span>
<span class="n">backward_compatibility_configs</span><span class="p">)</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;load&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">src_fmt_configs</span><span class="p">)</span>
<span class="k">if</span> <span class="n">allow_jagged_rows</span><span class="p">:</span>
<span class="n">configuration</span><span class="p">[</span><span class="s1">&#39;load&#39;</span><span class="p">][</span><span class="s1">&#39;allowJaggedRows&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">allow_jagged_rows</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_with_configuration</span><span class="p">(</span><span class="n">configuration</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.run_with_configuration"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.run_with_configuration">[docs]</a> <span class="k">def</span> <span class="nf">run_with_configuration</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">configuration</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Executes a BigQuery SQL query. See here:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/v2/jobs</span>
<span class="sd"> For more details about the configuration parameter.</span>
<span class="sd"> :param configuration: The configuration parameter maps directly to</span>
<span class="sd"> BigQuery&#39;s configuration field in the job object. See</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/v2/jobs for</span>
<span class="sd"> details.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">jobs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">jobs</span><span class="p">()</span>
<span class="n">job_data</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;configuration&#39;</span><span class="p">:</span> <span class="n">configuration</span><span class="p">}</span>
<span class="c1"># Send query and wait for reply.</span>
<span class="n">query_reply</span> <span class="o">=</span> <span class="n">jobs</span> \
<span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">projectId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">job_data</span><span class="p">)</span> \
<span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span> <span class="o">=</span> <span class="n">query_reply</span><span class="p">[</span><span class="s1">&#39;jobReference&#39;</span><span class="p">][</span><span class="s1">&#39;jobId&#39;</span><span class="p">]</span>
<span class="k">if</span> <span class="s1">&#39;location&#39;</span> <span class="ow">in</span> <span class="n">query_reply</span><span class="p">[</span><span class="s1">&#39;jobReference&#39;</span><span class="p">]:</span>
<span class="n">location</span> <span class="o">=</span> <span class="n">query_reply</span><span class="p">[</span><span class="s1">&#39;jobReference&#39;</span><span class="p">][</span><span class="s1">&#39;location&#39;</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">location</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span>
<span class="c1"># Wait for query to finish.</span>
<span class="n">keep_polling_job</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">while</span> <span class="n">keep_polling_job</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">location</span><span class="p">:</span>
<span class="n">job</span> <span class="o">=</span> <span class="n">jobs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">jobId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="n">location</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">job</span> <span class="o">=</span> <span class="n">jobs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">jobId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="k">if</span> <span class="n">job</span><span class="p">[</span><span class="s1">&#39;status&#39;</span><span class="p">][</span><span class="s1">&#39;state&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;DONE&#39;</span><span class="p">:</span>
<span class="n">keep_polling_job</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># Check if job had errors.</span>
<span class="k">if</span> <span class="s1">&#39;errorResult&#39;</span> <span class="ow">in</span> <span class="n">job</span><span class="p">[</span><span class="s1">&#39;status&#39;</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job failed. Final error was: </span><span class="si">{}</span><span class="s1">. The job was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span>
<span class="nb">format</span><span class="p">(</span><span class="n">job</span><span class="p">[</span><span class="s1">&#39;status&#39;</span><span class="p">][</span><span class="s1">&#39;errorResult&#39;</span><span class="p">],</span> <span class="n">job</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Waiting for job to complete : </span><span class="si">%s</span><span class="s1">, </span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">if</span> <span class="n">err</span><span class="o">.</span><span class="n">resp</span><span class="o">.</span><span class="n">status</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">500</span><span class="p">,</span> <span class="mi">503</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="s1">&#39;</span><span class="si">%s</span><span class="s1">: Retryable error, waiting for job to complete: </span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">err</span><span class="o">.</span><span class="n">resp</span><span class="o">.</span><span class="n">status</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job status check failed. Final error was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span>
<span class="nb">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">resp</span><span class="o">.</span><span class="n">status</span><span class="p">))</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.poll_job_complete"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.poll_job_complete">[docs]</a> <span class="k">def</span> <span class="nf">poll_job_complete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">job_id</span><span class="p">):</span>
<span class="n">jobs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">jobs</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
<span class="n">job</span> <span class="o">=</span> <span class="n">jobs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">projectId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">jobId</span><span class="o">=</span><span class="n">job_id</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">job</span> <span class="o">=</span> <span class="n">jobs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">projectId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">jobId</span><span class="o">=</span><span class="n">job_id</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="k">if</span> <span class="n">job</span><span class="p">[</span><span class="s1">&#39;status&#39;</span><span class="p">][</span><span class="s1">&#39;state&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;DONE&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">if</span> <span class="n">err</span><span class="o">.</span><span class="n">resp</span><span class="o">.</span><span class="n">status</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">500</span><span class="p">,</span> <span class="mi">503</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="s1">&#39;</span><span class="si">%s</span><span class="s1">: Retryable error while polling job with id </span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">err</span><span class="o">.</span><span class="n">resp</span><span class="o">.</span><span class="n">status</span><span class="p">,</span> <span class="n">job_id</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job status check failed. Final error was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span>
<span class="nb">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">resp</span><span class="o">.</span><span class="n">status</span><span class="p">))</span>
<span class="k">return</span> <span class="kc">False</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.cancel_query"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.cancel_query">[docs]</a> <span class="k">def</span> <span class="nf">cancel_query</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Cancel all started queries that have not yet completed</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">jobs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">jobs</span><span class="p">()</span>
<span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span> <span class="ow">and</span>
<span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">poll_job_complete</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">)):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Attempting to cancel job : </span><span class="si">%s</span><span class="s1">, </span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
<span class="n">jobs</span><span class="o">.</span><span class="n">cancel</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">jobId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">jobs</span><span class="o">.</span><span class="n">cancel</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">jobId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;No running BigQuery jobs to cancel.&#39;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># Wait for all the calls to cancel to finish</span>
<span class="n">max_polling_attempts</span> <span class="o">=</span> <span class="mi">12</span>
<span class="n">polling_attempts</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">job_complete</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">while</span> <span class="n">polling_attempts</span> <span class="o">&lt;</span> <span class="n">max_polling_attempts</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">job_complete</span><span class="p">:</span>
<span class="n">polling_attempts</span> <span class="o">=</span> <span class="n">polling_attempts</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">job_complete</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">poll_job_complete</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">)</span>
<span class="k">if</span> <span class="n">job_complete</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Job successfully canceled: </span><span class="si">%s</span><span class="s1">, </span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">polling_attempts</span> <span class="o">==</span> <span class="n">max_polling_attempts</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="s2">&quot;Stopping polling due to timeout. Job with id </span><span class="si">%s</span><span class="s2"> &quot;</span>
<span class="s2">&quot;has not completed cancel and may or may not finish.&quot;</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Waiting for canceled job with id </span><span class="si">%s</span><span class="s1"> to finish.&#39;</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">running_job_id</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.get_schema"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.get_schema">[docs]</a> <span class="k">def</span> <span class="nf">get_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get the schema for a given datset.table.</span>
<span class="sd"> see https://cloud.google.com/bigquery/docs/reference/v2/tables#resource</span>
<span class="sd"> :param dataset_id: the dataset ID of the requested table</span>
<span class="sd"> :param table_id: the table ID of the requested table</span>
<span class="sd"> :return: a table schema</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">tables_resource</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">tables</span><span class="p">()</span> \
<span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">projectId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span> <span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span> <span class="n">tableId</span><span class="o">=</span><span class="n">table_id</span><span class="p">)</span> \
<span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="k">return</span> <span class="n">tables_resource</span><span class="p">[</span><span class="s1">&#39;schema&#39;</span><span class="p">]</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.get_tabledata"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.get_tabledata">[docs]</a> <span class="k">def</span> <span class="nf">get_tabledata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span><span class="p">,</span>
<span class="n">max_results</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">selected_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">page_token</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">start_index</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get the data of a given dataset.table and optionally with selected columns.</span>
<span class="sd"> see https://cloud.google.com/bigquery/docs/reference/v2/tabledata/list</span>
<span class="sd"> :param dataset_id: the dataset ID of the requested table.</span>
<span class="sd"> :param table_id: the table ID of the requested table.</span>
<span class="sd"> :param max_results: the maximum results to return.</span>
<span class="sd"> :param selected_fields: List of fields to return (comma-separated). If</span>
<span class="sd"> unspecified, all fields are returned.</span>
<span class="sd"> :param page_token: page token, returned from a previous call,</span>
<span class="sd"> identifying the result set.</span>
<span class="sd"> :param start_index: zero based index of the starting row to read.</span>
<span class="sd"> :return: map containing the requested rows.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">optional_params</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="n">max_results</span><span class="p">:</span>
<span class="n">optional_params</span><span class="p">[</span><span class="s1">&#39;maxResults&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">max_results</span>
<span class="k">if</span> <span class="n">selected_fields</span><span class="p">:</span>
<span class="n">optional_params</span><span class="p">[</span><span class="s1">&#39;selectedFields&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">selected_fields</span>
<span class="k">if</span> <span class="n">page_token</span><span class="p">:</span>
<span class="n">optional_params</span><span class="p">[</span><span class="s1">&#39;pageToken&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">page_token</span>
<span class="k">if</span> <span class="n">start_index</span><span class="p">:</span>
<span class="n">optional_params</span><span class="p">[</span><span class="s1">&#39;startIndex&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">start_index</span>
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">tabledata</span><span class="p">()</span><span class="o">.</span><span class="n">list</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">tableId</span><span class="o">=</span><span class="n">table_id</span><span class="p">,</span>
<span class="o">**</span><span class="n">optional_params</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">))</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.run_table_delete"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.run_table_delete">[docs]</a> <span class="k">def</span> <span class="nf">run_table_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">deletion_dataset_table</span><span class="p">,</span>
<span class="n">ignore_if_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Delete an existing table from the dataset;</span>
<span class="sd"> If the table does not exist, return an error unless ignore_if_missing</span>
<span class="sd"> is set to True.</span>
<span class="sd"> :param deletion_dataset_table: A dotted</span>
<span class="sd"> ``(&lt;project&gt;.|&lt;project&gt;:)&lt;dataset&gt;.&lt;table&gt;`` that indicates which table</span>
<span class="sd"> will be deleted.</span>
<span class="sd"> :type deletion_dataset_table: str</span>
<span class="sd"> :param ignore_if_missing: if True, then return success even if the</span>
<span class="sd"> requested table does not exist.</span>
<span class="sd"> :type ignore_if_missing: bool</span>
<span class="sd"> :return:</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">deletion_project</span><span class="p">,</span> <span class="n">deletion_dataset</span><span class="p">,</span> <span class="n">deletion_table</span> <span class="o">=</span> \
<span class="n">_split_tablename</span><span class="p">(</span><span class="n">table_input</span><span class="o">=</span><span class="n">deletion_dataset_table</span><span class="p">,</span>
<span class="n">default_project_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">tables</span><span class="p">()</span> \
<span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">projectId</span><span class="o">=</span><span class="n">deletion_project</span><span class="p">,</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">deletion_dataset</span><span class="p">,</span>
<span class="n">tableId</span><span class="o">=</span><span class="n">deletion_table</span><span class="p">)</span> \
<span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Deleted table </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1">.&#39;</span><span class="p">,</span> <span class="n">deletion_project</span><span class="p">,</span>
<span class="n">deletion_dataset</span><span class="p">,</span> <span class="n">deletion_table</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">ignore_if_missing</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s1">&#39;Table deletion failed. Table does not exist.&#39;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Table does not exist. Skipping.&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.run_table_upsert"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.run_table_upsert">[docs]</a> <span class="k">def</span> <span class="nf">run_table_upsert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_resource</span><span class="p">,</span> <span class="n">project_id</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> creates a new, empty table in the dataset;</span>
<span class="sd"> If the table already exists, update the existing table.</span>
<span class="sd"> Since BigQuery does not natively allow table upserts, this is not an</span>
<span class="sd"> atomic operation.</span>
<span class="sd"> :param dataset_id: the dataset to upsert the table into.</span>
<span class="sd"> :type dataset_id: str</span>
<span class="sd"> :param table_resource: a table resource. see</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/v2/tables#resource</span>
<span class="sd"> :type table_resource: dict</span>
<span class="sd"> :param project_id: the project to upsert the table into. If None,</span>
<span class="sd"> project will be self.project_id.</span>
<span class="sd"> :return:</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># check to see if the table exists</span>
<span class="n">table_id</span> <span class="o">=</span> <span class="n">table_resource</span><span class="p">[</span><span class="s1">&#39;tableReference&#39;</span><span class="p">][</span><span class="s1">&#39;tableId&#39;</span><span class="p">]</span>
<span class="n">project_id</span> <span class="o">=</span> <span class="n">project_id</span> <span class="k">if</span> <span class="n">project_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span>
<span class="n">tables_list_resp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">tables</span><span class="p">()</span><span class="o">.</span><span class="n">list</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span> <span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables_list_resp</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;tables&#39;</span><span class="p">,</span> <span class="p">[]):</span>
<span class="k">if</span> <span class="n">table</span><span class="p">[</span><span class="s1">&#39;tableReference&#39;</span><span class="p">][</span><span class="s1">&#39;tableId&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="n">table_id</span><span class="p">:</span>
<span class="c1"># found the table, do update</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Table </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1"> exists, updating.&#39;</span><span class="p">,</span>
<span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">tables</span><span class="p">()</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">tableId</span><span class="o">=</span><span class="n">table_id</span><span class="p">,</span>
<span class="n">body</span><span class="o">=</span><span class="n">table_resource</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="c1"># If there is a next page, we need to check the next page.</span>
<span class="k">if</span> <span class="s1">&#39;nextPageToken&#39;</span> <span class="ow">in</span> <span class="n">tables_list_resp</span><span class="p">:</span>
<span class="n">tables_list_resp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">tables</span><span class="p">()</span>\
<span class="o">.</span><span class="n">list</span><span class="p">(</span><span class="n">projectId</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">pageToken</span><span class="o">=</span><span class="n">tables_list_resp</span><span class="p">[</span><span class="s1">&#39;nextPageToken&#39;</span><span class="p">])</span>\
<span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="c1"># If there is no next page, then the table doesn&#39;t exist.</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># do insert</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Table </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1"> does not exist. creating.&#39;</span><span class="p">,</span>
<span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">tables</span><span class="p">()</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">body</span><span class="o">=</span><span class="n">table_resource</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.run_grant_dataset_view_access"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.run_grant_dataset_view_access">[docs]</a> <span class="k">def</span> <span class="nf">run_grant_dataset_view_access</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
<span class="n">source_dataset</span><span class="p">,</span>
<span class="n">view_dataset</span><span class="p">,</span>
<span class="n">view_table</span><span class="p">,</span>
<span class="n">source_project</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">view_project</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Grant authorized view access of a dataset to a view table.</span>
<span class="sd"> If this view has already been granted access to the dataset, do nothing.</span>
<span class="sd"> This method is not atomic. Running it may clobber a simultaneous update.</span>
<span class="sd"> :param source_dataset: the source dataset</span>
<span class="sd"> :type source_dataset: str</span>
<span class="sd"> :param view_dataset: the dataset that the view is in</span>
<span class="sd"> :type view_dataset: str</span>
<span class="sd"> :param view_table: the table of the view</span>
<span class="sd"> :type view_table: str</span>
<span class="sd"> :param source_project: the project of the source dataset. If None,</span>
<span class="sd"> self.project_id will be used.</span>
<span class="sd"> :type source_project: str</span>
<span class="sd"> :param view_project: the project that the view is in. If None,</span>
<span class="sd"> self.project_id will be used.</span>
<span class="sd"> :type view_project: str</span>
<span class="sd"> :return: the datasets resource of the source dataset.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Apply default values to projects</span>
<span class="n">source_project</span> <span class="o">=</span> <span class="n">source_project</span> <span class="k">if</span> <span class="n">source_project</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span>
<span class="n">view_project</span> <span class="o">=</span> <span class="n">view_project</span> <span class="k">if</span> <span class="n">view_project</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span>
<span class="c1"># we don&#39;t want to clobber any existing accesses, so we have to get</span>
<span class="c1"># info on the dataset before we can add view access</span>
<span class="n">source_dataset_resource</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">datasets</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">source_project</span><span class="p">,</span> <span class="n">datasetId</span><span class="o">=</span><span class="n">source_dataset</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="n">access</span> <span class="o">=</span> <span class="n">source_dataset_resource</span><span class="p">[</span>
<span class="s1">&#39;access&#39;</span><span class="p">]</span> <span class="k">if</span> <span class="s1">&#39;access&#39;</span> <span class="ow">in</span> <span class="n">source_dataset_resource</span> <span class="k">else</span> <span class="p">[]</span>
<span class="n">view_access</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;view&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;projectId&#39;</span><span class="p">:</span> <span class="n">view_project</span><span class="p">,</span>
<span class="s1">&#39;datasetId&#39;</span><span class="p">:</span> <span class="n">view_dataset</span><span class="p">,</span>
<span class="s1">&#39;tableId&#39;</span><span class="p">:</span> <span class="n">view_table</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="c1"># check to see if the view we want to add already exists.</span>
<span class="k">if</span> <span class="n">view_access</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">access</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="s1">&#39;Granting table </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1"> authorized view access to </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1"> dataset.&#39;</span><span class="p">,</span>
<span class="n">view_project</span><span class="p">,</span> <span class="n">view_dataset</span><span class="p">,</span> <span class="n">view_table</span><span class="p">,</span> <span class="n">source_project</span><span class="p">,</span>
<span class="n">source_dataset</span><span class="p">)</span>
<span class="n">access</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">view_access</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">datasets</span><span class="p">()</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">source_project</span><span class="p">,</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">source_dataset</span><span class="p">,</span>
<span class="n">body</span><span class="o">=</span><span class="p">{</span>
<span class="s1">&#39;access&#39;</span><span class="p">:</span> <span class="n">access</span>
<span class="p">})</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># if view is already in access, do nothing.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="s1">&#39;Table </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1"> already has authorized view access to </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1"> dataset.&#39;</span><span class="p">,</span>
<span class="n">view_project</span><span class="p">,</span> <span class="n">view_dataset</span><span class="p">,</span> <span class="n">view_table</span><span class="p">,</span> <span class="n">source_project</span><span class="p">,</span> <span class="n">source_dataset</span><span class="p">)</span>
<span class="k">return</span> <span class="n">source_dataset_resource</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.create_empty_dataset"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.create_empty_dataset">[docs]</a> <span class="k">def</span> <span class="nf">create_empty_dataset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataset_id</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">project_id</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">dataset_reference</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new empty dataset:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets/insert</span>
<span class="sd"> :param project_id: The name of the project where we want to create</span>
<span class="sd"> an empty a dataset. Don&#39;t need to provide, if projectId in dataset_reference.</span>
<span class="sd"> :type project_id: str</span>
<span class="sd"> :param dataset_id: The id of dataset. Don&#39;t need to provide,</span>
<span class="sd"> if datasetId in dataset_reference.</span>
<span class="sd"> :type dataset_id: str</span>
<span class="sd"> :param dataset_reference: Dataset reference that could be provided</span>
<span class="sd"> with request body. More info:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#resource</span>
<span class="sd"> :type dataset_reference: dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">dataset_reference</span><span class="p">:</span>
<span class="n">_validate_value</span><span class="p">(</span><span class="s1">&#39;dataset_reference&#39;</span><span class="p">,</span> <span class="n">dataset_reference</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">dataset_reference</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="s2">&quot;datasetReference&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">dataset_reference</span><span class="p">:</span>
<span class="n">dataset_reference</span><span class="p">[</span><span class="s2">&quot;datasetReference&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">dataset_reference</span><span class="p">[</span><span class="s2">&quot;datasetReference&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;datasetId&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">dataset_id</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">{}</span><span class="s2"> not provided datasetId. Impossible to create dataset&quot;</span><span class="p">)</span>
<span class="n">dataset_required_params</span> <span class="o">=</span> <span class="p">[(</span><span class="n">dataset_id</span><span class="p">,</span> <span class="s2">&quot;datasetId&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="n">project_id</span><span class="p">,</span> <span class="s2">&quot;projectId&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">)]</span>
<span class="k">for</span> <span class="n">param_tuple</span> <span class="ow">in</span> <span class="n">dataset_required_params</span><span class="p">:</span>
<span class="n">param</span><span class="p">,</span> <span class="n">param_name</span><span class="p">,</span> <span class="n">param_default</span> <span class="o">=</span> <span class="n">param_tuple</span>
<span class="k">if</span> <span class="n">param_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">dataset_reference</span><span class="p">[</span><span class="s1">&#39;datasetReference&#39;</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">param_default</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">param</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">%s</span><span class="s2"> was not specified. Will be used default value </span><span class="si">%s</span><span class="s2">.&quot;</span><span class="p">,</span>
<span class="n">param_name</span><span class="p">,</span> <span class="n">param_default</span>
<span class="p">)</span>
<span class="n">param</span> <span class="o">=</span> <span class="n">param_default</span>
<span class="n">dataset_reference</span><span class="p">[</span><span class="s1">&#39;datasetReference&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
<span class="p">{</span><span class="n">param_name</span><span class="p">:</span> <span class="n">param</span><span class="p">})</span>
<span class="k">elif</span> <span class="n">param</span><span class="p">:</span>
<span class="n">_api_resource_configs_duplication_check</span><span class="p">(</span>
<span class="n">param_name</span><span class="p">,</span> <span class="n">param</span><span class="p">,</span>
<span class="n">dataset_reference</span><span class="p">[</span><span class="s1">&#39;datasetReference&#39;</span><span class="p">],</span> <span class="s1">&#39;dataset_reference&#39;</span><span class="p">)</span>
<span class="n">dataset_id</span> <span class="o">=</span> <span class="n">dataset_reference</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;datasetReference&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;datasetId&quot;</span><span class="p">)</span>
<span class="n">dataset_project_id</span> <span class="o">=</span> <span class="n">dataset_reference</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;datasetReference&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="s2">&quot;projectId&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Creating Dataset: </span><span class="si">%s</span><span class="s1"> in project: </span><span class="si">%s</span><span class="s1"> &#39;</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span>
<span class="n">dataset_project_id</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">datasets</span><span class="p">()</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">dataset_project_id</span><span class="p">,</span>
<span class="n">body</span><span class="o">=</span><span class="n">dataset_reference</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Dataset created successfully: In project </span><span class="si">%s</span><span class="s1"> &#39;</span>
<span class="s1">&#39;Dataset </span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span> <span class="n">dataset_project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job failed. Error was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">content</span><span class="p">)</span></div>
<span class="p">)</span>
<div class="viewcode-block" id="BigQueryBaseCursor.delete_dataset"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.delete_dataset">[docs]</a> <span class="k">def</span> <span class="nf">delete_dataset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">delete_contents</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Delete a dataset of Big query in your project.</span>
<span class="sd"> :param project_id: The name of the project where we have the dataset .</span>
<span class="sd"> :type project_id: str</span>
<span class="sd"> :param dataset_id: The dataset to be delete.</span>
<span class="sd"> :type dataset_id: str</span>
<span class="sd"> :param delete_contents: [Optional] Whether to force the deletion even if the dataset is not empty.</span>
<span class="sd"> Will delete all tables (if any) in the dataset if set to True.</span>
<span class="sd"> Will raise HttpError 400: &quot;{dataset_id} is still in use&quot; if set to False and dataset is not empty.</span>
<span class="sd"> The default value is False.</span>
<span class="sd"> :type delete_contents: bool</span>
<span class="sd"> :return:</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">project_id</span> <span class="o">=</span> <span class="n">project_id</span> <span class="k">if</span> <span class="n">project_id</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Deleting from project: </span><span class="si">%s</span><span class="s1"> Dataset:</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">datasets</span><span class="p">()</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">deleteContents</span><span class="o">=</span><span class="n">delete_contents</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">&#39;Dataset deleted successfully: In project </span><span class="si">%s</span><span class="s1"> &#39;</span>
<span class="s1">&#39;Dataset </span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span> <span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job failed. Error was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">content</span><span class="p">)</span></div>
<span class="p">)</span>
<div class="viewcode-block" id="BigQueryBaseCursor.get_dataset"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.get_dataset">[docs]</a> <span class="k">def</span> <span class="nf">get_dataset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">project_id</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Method returns dataset_resource if dataset exist</span>
<span class="sd"> and raised 404 error if dataset does not exist</span>
<span class="sd"> :param dataset_id: The BigQuery Dataset ID</span>
<span class="sd"> :type dataset_id: str</span>
<span class="sd"> :param project_id: The GCP Project ID</span>
<span class="sd"> :type project_id: str</span>
<span class="sd"> :return: dataset_resource</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> For more information, see Dataset Resource content:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#resource</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">dataset_id</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dataset_id</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;dataset_id argument must be provided and has &quot;</span>
<span class="s2">&quot;a type &#39;str&#39;. You provided: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">dataset_id</span><span class="p">))</span>
<span class="n">dataset_project_id</span> <span class="o">=</span> <span class="n">project_id</span> <span class="k">if</span> <span class="n">project_id</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">dataset_resource</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">datasets</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span> <span class="n">projectId</span><span class="o">=</span><span class="n">dataset_project_id</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Dataset Resource: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dataset_resource</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job failed. Error was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">content</span><span class="p">))</span>
<span class="k">return</span> <span class="n">dataset_resource</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.get_datasets_list"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.get_datasets_list">[docs]</a> <span class="k">def</span> <span class="nf">get_datasets_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">project_id</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Method returns full list of BigQuery datasets in the current project</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> For more information, see:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets/list</span>
<span class="sd"> :param project_id: Google Cloud Project for which you</span>
<span class="sd"> try to get all datasets</span>
<span class="sd"> :type project_id: str</span>
<span class="sd"> :return: datasets_list</span>
<span class="sd"> Example of returned datasets_list: ::</span>
<span class="sd"> {</span>
<span class="sd"> &quot;kind&quot;:&quot;bigquery#dataset&quot;,</span>
<span class="sd"> &quot;location&quot;:&quot;US&quot;,</span>
<span class="sd"> &quot;id&quot;:&quot;your-project:dataset_2_test&quot;,</span>
<span class="sd"> &quot;datasetReference&quot;:{</span>
<span class="sd"> &quot;projectId&quot;:&quot;your-project&quot;,</span>
<span class="sd"> &quot;datasetId&quot;:&quot;dataset_2_test&quot;</span>
<span class="sd"> }</span>
<span class="sd"> },</span>
<span class="sd"> {</span>
<span class="sd"> &quot;kind&quot;:&quot;bigquery#dataset&quot;,</span>
<span class="sd"> &quot;location&quot;:&quot;US&quot;,</span>
<span class="sd"> &quot;id&quot;:&quot;your-project:dataset_1_test&quot;,</span>
<span class="sd"> &quot;datasetReference&quot;:{</span>
<span class="sd"> &quot;projectId&quot;:&quot;your-project&quot;,</span>
<span class="sd"> &quot;datasetId&quot;:&quot;dataset_1_test&quot;</span>
<span class="sd"> }</span>
<span class="sd"> }</span>
<span class="sd"> ]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dataset_project_id</span> <span class="o">=</span> <span class="n">project_id</span> <span class="k">if</span> <span class="n">project_id</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">datasets_list</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">datasets</span><span class="p">()</span><span class="o">.</span><span class="n">list</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">dataset_project_id</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)[</span><span class="s1">&#39;datasets&#39;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Datasets List: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">datasets_list</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job failed. Error was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">content</span><span class="p">))</span>
<span class="k">return</span> <span class="n">datasets_list</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.patch_dataset"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.patch_dataset">[docs]</a> <span class="k">def</span> <span class="nf">patch_dataset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">dataset_resource</span><span class="p">,</span> <span class="n">project_id</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Patches information in an existing dataset.</span>
<span class="sd"> It only replaces fields that are provided in the submitted dataset resource.</span>
<span class="sd"> More info:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets/patch</span>
<span class="sd"> :param dataset_id: The BigQuery Dataset ID</span>
<span class="sd"> :type dataset_id: str</span>
<span class="sd"> :param dataset_resource: Dataset resource that will be provided</span>
<span class="sd"> in request body.</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#resource</span>
<span class="sd"> :type dataset_resource: dict</span>
<span class="sd"> :param project_id: The GCP Project ID</span>
<span class="sd"> :type project_id: str</span>
<span class="sd"> :rtype: dataset</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#resource</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">dataset_id</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dataset_id</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;dataset_id argument must be provided and has &quot;</span>
<span class="s2">&quot;a type &#39;str&#39;. You provided: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">dataset_id</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">dataset_project_id</span> <span class="o">=</span> <span class="n">project_id</span> <span class="k">if</span> <span class="n">project_id</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">dataset</span> <span class="o">=</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">datasets</span><span class="p">()</span>
<span class="o">.</span><span class="n">patch</span><span class="p">(</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">dataset_project_id</span><span class="p">,</span>
<span class="n">body</span><span class="o">=</span><span class="n">dataset_resource</span><span class="p">,</span>
<span class="p">)</span>
<span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Dataset successfully patched: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dataset</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
<span class="s2">&quot;BigQuery job failed. Error was: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">dataset</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.update_dataset"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.update_dataset">[docs]</a> <span class="k">def</span> <span class="nf">update_dataset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">dataset_resource</span><span class="p">,</span> <span class="n">project_id</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Updates information in an existing dataset. The update method replaces the entire</span>
<span class="sd"> dataset resource, whereas the patch method only replaces fields that are provided</span>
<span class="sd"> in the submitted dataset resource.</span>
<span class="sd"> More info:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets/update</span>
<span class="sd"> :param dataset_id: The BigQuery Dataset ID</span>
<span class="sd"> :type dataset_id: str</span>
<span class="sd"> :param dataset_resource: Dataset resource that will be provided</span>
<span class="sd"> in request body.</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#resource</span>
<span class="sd"> :type dataset_resource: dict</span>
<span class="sd"> :param project_id: The GCP Project ID</span>
<span class="sd"> :type project_id: str</span>
<span class="sd"> :rtype: dataset</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#resource</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">dataset_id</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dataset_id</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;dataset_id argument must be provided and has &quot;</span>
<span class="s2">&quot;a type &#39;str&#39;. You provided: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">dataset_id</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">dataset_project_id</span> <span class="o">=</span> <span class="n">project_id</span> <span class="k">if</span> <span class="n">project_id</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">dataset</span> <span class="o">=</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">datasets</span><span class="p">()</span>
<span class="o">.</span><span class="n">update</span><span class="p">(</span>
<span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">dataset_project_id</span><span class="p">,</span>
<span class="n">body</span><span class="o">=</span><span class="n">dataset_resource</span><span class="p">,</span>
<span class="p">)</span>
<span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Dataset successfully updated: </span><span class="si">%s</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dataset</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
<span class="s2">&quot;BigQuery job failed. Error was: </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">dataset</span></div>
<div class="viewcode-block" id="BigQueryBaseCursor.insert_all"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryBaseCursor.insert_all">[docs]</a> <span class="k">def</span> <span class="nf">insert_all</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span><span class="p">,</span>
<span class="n">rows</span><span class="p">,</span> <span class="n">ignore_unknown_values</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">skip_invalid_rows</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">fail_on_error</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Method to stream data into BigQuery one record at a time without needing</span>
<span class="sd"> to run a load job</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> For more information, see:</span>
<span class="sd"> https://cloud.google.com/bigquery/docs/reference/rest/v2/tabledata/insertAll</span>
<span class="sd"> :param project_id: The name of the project where we have the table</span>
<span class="sd"> :type project_id: str</span>
<span class="sd"> :param dataset_id: The name of the dataset where we have the table</span>
<span class="sd"> :type dataset_id: str</span>
<span class="sd"> :param table_id: The name of the table</span>
<span class="sd"> :type table_id: str</span>
<span class="sd"> :param rows: the rows to insert</span>
<span class="sd"> :type rows: list</span>
<span class="sd"> **Example or rows**:</span>
<span class="sd"> rows=[{&quot;json&quot;: {&quot;a_key&quot;: &quot;a_value_0&quot;}}, {&quot;json&quot;: {&quot;a_key&quot;: &quot;a_value_1&quot;}}]</span>
<span class="sd"> :param ignore_unknown_values: [Optional] Accept rows that contain values</span>
<span class="sd"> that do not match the schema. The unknown values are ignored.</span>
<span class="sd"> The default value is false, which treats unknown values as errors.</span>
<span class="sd"> :type ignore_unknown_values: bool</span>
<span class="sd"> :param skip_invalid_rows: [Optional] Insert all valid rows of a request,</span>
<span class="sd"> even if invalid rows exist. The default value is false, which causes</span>
<span class="sd"> the entire request to fail if any invalid rows exist.</span>
<span class="sd"> :type skip_invalid_rows: bool</span>
<span class="sd"> :param fail_on_error: [Optional] Force the task to fail if any errors occur.</span>
<span class="sd"> The default value is false, which indicates the task should not fail</span>
<span class="sd"> even if any insertion errors occur.</span>
<span class="sd"> :type fail_on_error: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dataset_project_id</span> <span class="o">=</span> <span class="n">project_id</span> <span class="k">if</span> <span class="n">project_id</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">project_id</span>
<span class="n">body</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;rows&quot;</span><span class="p">:</span> <span class="n">rows</span><span class="p">,</span>
<span class="s2">&quot;ignoreUnknownValues&quot;</span><span class="p">:</span> <span class="n">ignore_unknown_values</span><span class="p">,</span>
<span class="s2">&quot;kind&quot;</span><span class="p">:</span> <span class="s2">&quot;bigquery#tableDataInsertAllRequest&quot;</span><span class="p">,</span>
<span class="s2">&quot;skipInvalidRows&quot;</span><span class="p">:</span> <span class="n">skip_invalid_rows</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="s1">&#39;Inserting </span><span class="si">%s</span><span class="s1"> row(s) into Table </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="nb">len</span><span class="p">(</span><span class="n">rows</span><span class="p">),</span> <span class="n">dataset_project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span>
<span class="p">)</span>
<span class="n">resp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">tabledata</span><span class="p">()</span><span class="o">.</span><span class="n">insertAll</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="n">dataset_project_id</span><span class="p">,</span> <span class="n">datasetId</span><span class="o">=</span><span class="n">dataset_id</span><span class="p">,</span>
<span class="n">tableId</span><span class="o">=</span><span class="n">table_id</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">body</span>
<span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">)</span>
<span class="k">if</span> <span class="s1">&#39;insertErrors&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">resp</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="s1">&#39;All row(s) inserted successfully: </span><span class="si">%s</span><span class="s1">:</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">dataset_project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">error_msg</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{}</span><span class="s1"> insert error(s) occured: </span><span class="si">{}</span><span class="s1">:</span><span class="si">{}</span><span class="s1">.</span><span class="si">{}</span><span class="s1">. Details: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="nb">len</span><span class="p">(</span><span class="n">resp</span><span class="p">[</span><span class="s1">&#39;insertErrors&#39;</span><span class="p">]),</span>
<span class="n">dataset_project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span><span class="p">,</span> <span class="n">resp</span><span class="p">[</span><span class="s1">&#39;insertErrors&#39;</span><span class="p">])</span>
<span class="k">if</span> <span class="n">fail_on_error</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job failed. Error was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">error_msg</span><span class="p">)</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">error_msg</span><span class="p">)</span>
<span class="k">except</span> <span class="n">HttpError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">AirflowException</span><span class="p">(</span>
<span class="s1">&#39;BigQuery job failed. Error was: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">content</span><span class="p">)</span></div></div>
<span class="p">)</span>
<div class="viewcode-block" id="BigQueryCursor"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor">[docs]</a><span class="k">class</span> <span class="nc">BigQueryCursor</span><span class="p">(</span><span class="n">BigQueryBaseCursor</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A very basic BigQuery PEP 249 cursor implementation. The PyHive PEP 249</span>
<span class="sd"> implementation was used as a reference:</span>
<span class="sd"> https://github.com/dropbox/PyHive/blob/master/pyhive/presto.py</span>
<span class="sd"> https://github.com/dropbox/PyHive/blob/master/pyhive/common.py</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">service</span><span class="p">,</span> <span class="n">project_id</span><span class="p">,</span> <span class="n">use_legacy_sql</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">num_retries</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">BigQueryCursor</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
<span class="n">service</span><span class="o">=</span><span class="n">service</span><span class="p">,</span>
<span class="n">project_id</span><span class="o">=</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">use_legacy_sql</span><span class="o">=</span><span class="n">use_legacy_sql</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
<span class="n">num_retries</span><span class="o">=</span><span class="n">num_retries</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buffersize</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">page_token</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">job_id</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buffer</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">all_pages_loaded</span> <span class="o">=</span> <span class="kc">False</span>
<span class="nd">@property</span>
<div class="viewcode-block" id="BigQueryCursor.description"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.description">[docs]</a> <span class="k">def</span> <span class="nf">description</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; The schema description method is not currently implemented. &quot;&quot;&quot;</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span></div>
<div class="viewcode-block" id="BigQueryCursor.close"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></div>
<span class="sd">&quot;&quot;&quot; By default, do nothing &quot;&quot;&quot;</span>
<span class="nd">@property</span>
<div class="viewcode-block" id="BigQueryCursor.rowcount"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.rowcount">[docs]</a> <span class="k">def</span> <span class="nf">rowcount</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; By default, return -1 to indicate that this is not supported. &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span></div>
<div class="viewcode-block" id="BigQueryCursor.execute"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="n">parameters</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Executes a BigQuery query, and returns the job ID.</span>
<span class="sd"> :param operation: The query to execute.</span>
<span class="sd"> :type operation: str</span>
<span class="sd"> :param parameters: Parameters to substitute into the query.</span>
<span class="sd"> :type parameters: dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">sql</span> <span class="o">=</span> <span class="n">_bind_parameters</span><span class="p">(</span><span class="n">operation</span><span class="p">,</span>
<span class="n">parameters</span><span class="p">)</span> <span class="k">if</span> <span class="n">parameters</span> <span class="k">else</span> <span class="n">operation</span>
<span class="bp">self</span><span class="o">.</span><span class="n">job_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">run_query</span><span class="p">(</span><span class="n">sql</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryCursor.executemany"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.executemany">[docs]</a> <span class="k">def</span> <span class="nf">executemany</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">operation</span><span class="p">,</span> <span class="n">seq_of_parameters</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Execute a BigQuery query multiple times with different parameters.</span>
<span class="sd"> :param operation: The query to execute.</span>
<span class="sd"> :type operation: str</span>
<span class="sd"> :param seq_of_parameters: List of dictionary parameters to substitute into the</span>
<span class="sd"> query.</span>
<span class="sd"> :type seq_of_parameters: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">parameters</span> <span class="ow">in</span> <span class="n">seq_of_parameters</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">operation</span><span class="p">,</span> <span class="n">parameters</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryCursor.flush_results"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.flush_results">[docs]</a> <span class="k">def</span> <span class="nf">flush_results</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; Flush results related cursor attributes. &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">page_token</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">job_id</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">all_pages_loaded</span> <span class="o">=</span> <span class="kc">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buffer</span> <span class="o">=</span> <span class="p">[]</span></div>
<div class="viewcode-block" id="BigQueryCursor.fetchone"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.fetchone">[docs]</a> <span class="k">def</span> <span class="nf">fetchone</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; Fetch the next row of a query result set. &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">next</span><span class="p">()</span></div>
<div class="viewcode-block" id="BigQueryCursor.next"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.next">[docs]</a> <span class="k">def</span> <span class="nf">next</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Helper method for fetchone, which returns the next row from a buffer.</span>
<span class="sd"> If the buffer is empty, attempts to paginate through the result set for</span>
<span class="sd"> the next page, and load it into the buffer.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">job_id</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">buffer</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">all_pages_loaded</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">query_results</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">service</span><span class="o">.</span><span class="n">jobs</span><span class="p">()</span><span class="o">.</span><span class="n">getQueryResults</span><span class="p">(</span>
<span class="n">projectId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">project_id</span><span class="p">,</span>
<span class="n">jobId</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">job_id</span><span class="p">,</span>
<span class="n">pageToken</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">page_token</span><span class="p">)</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">num_retries</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">num_retries</span><span class="p">))</span>
<span class="k">if</span> <span class="s1">&#39;rows&#39;</span> <span class="ow">in</span> <span class="n">query_results</span> <span class="ow">and</span> <span class="n">query_results</span><span class="p">[</span><span class="s1">&#39;rows&#39;</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">page_token</span> <span class="o">=</span> <span class="n">query_results</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;pageToken&#39;</span><span class="p">)</span>
<span class="n">fields</span> <span class="o">=</span> <span class="n">query_results</span><span class="p">[</span><span class="s1">&#39;schema&#39;</span><span class="p">][</span><span class="s1">&#39;fields&#39;</span><span class="p">]</span>
<span class="n">col_types</span> <span class="o">=</span> <span class="p">[</span><span class="n">field</span><span class="p">[</span><span class="s1">&#39;type&#39;</span><span class="p">]</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">fields</span><span class="p">]</span>
<span class="n">rows</span> <span class="o">=</span> <span class="n">query_results</span><span class="p">[</span><span class="s1">&#39;rows&#39;</span><span class="p">]</span>
<span class="k">for</span> <span class="n">dict_row</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">:</span>
<span class="n">typed_row</span> <span class="o">=</span> <span class="p">([</span>
<span class="n">_bq_cast</span><span class="p">(</span><span class="n">vs</span><span class="p">[</span><span class="s1">&#39;v&#39;</span><span class="p">],</span> <span class="n">col_types</span><span class="p">[</span><span class="n">idx</span><span class="p">])</span>
<span class="k">for</span> <span class="n">idx</span><span class="p">,</span> <span class="n">vs</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">dict_row</span><span class="p">[</span><span class="s1">&#39;f&#39;</span><span class="p">])</span>
<span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">typed_row</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">page_token</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">all_pages_loaded</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># Reset all state since we&#39;ve exhausted the results.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">flush_results</span><span class="p">()</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffer</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryCursor.fetchmany"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.fetchmany">[docs]</a> <span class="k">def</span> <span class="nf">fetchmany</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Fetch the next set of rows of a query result, returning a sequence of sequences</span>
<span class="sd"> (e.g. a list of tuples). An empty sequence is returned when no more rows are</span>
<span class="sd"> available. The number of rows to fetch per call is specified by the parameter.</span>
<span class="sd"> If it is not given, the cursor&#39;s arraysize determines the number of rows to be</span>
<span class="sd"> fetched. The method should try to fetch as many rows as indicated by the size</span>
<span class="sd"> parameter. If this is not possible due to the specified number of rows not being</span>
<span class="sd"> available, fewer rows may be returned. An :py:class:`~pyhive.exc.Error`</span>
<span class="sd"> (or subclass) exception is raised if the previous call to</span>
<span class="sd"> :py:meth:`execute` did not produce any result set or no call was issued yet.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">size</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">arraysize</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">size</span><span class="p">):</span>
<span class="n">one</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
<span class="k">if</span> <span class="n">one</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">one</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="BigQueryCursor.fetchall"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.fetchall">[docs]</a> <span class="k">def</span> <span class="nf">fetchall</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Fetch all (remaining) rows of a query result, returning them as a sequence of</span>
<span class="sd"> sequences (e.g. a list of tuples).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">one</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
<span class="k">if</span> <span class="n">one</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">one</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="BigQueryCursor.get_arraysize"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.get_arraysize">[docs]</a> <span class="k">def</span> <span class="nf">get_arraysize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; Specifies the number of rows to fetch at a time with .fetchmany() &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffersize</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffersize</span> <span class="k">else</span> <span class="mi">1</span></div>
<div class="viewcode-block" id="BigQueryCursor.set_arraysize"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.set_arraysize">[docs]</a> <span class="k">def</span> <span class="nf">set_arraysize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arraysize</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; Specifies the number of rows to fetch at a time with .fetchmany() &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">buffersize</span> <span class="o">=</span> <span class="n">arraysize</span></div>
<div class="viewcode-block" id="BigQueryCursor.arraysize"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.arraysize">[docs]</a> <span class="n">arraysize</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_arraysize</span><span class="p">,</span> <span class="n">set_arraysize</span><span class="p">)</span></div>
<div class="viewcode-block" id="BigQueryCursor.setinputsizes"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.setinputsizes">[docs]</a> <span class="k">def</span> <span class="nf">setinputsizes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sizes</span><span class="p">):</span></div>
<span class="sd">&quot;&quot;&quot; Does nothing by default &quot;&quot;&quot;</span>
<div class="viewcode-block" id="BigQueryCursor.setoutputsize"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook.BigQueryCursor.setoutputsize">[docs]</a> <span class="k">def</span> <span class="nf">setoutputsize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">column</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span></div></div>
<span class="sd">&quot;&quot;&quot; Does nothing by default &quot;&quot;&quot;</span>
<div class="viewcode-block" id="_bind_parameters"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook._bind_parameters">[docs]</a><span class="k">def</span> <span class="nf">_bind_parameters</span><span class="p">(</span><span class="n">operation</span><span class="p">,</span> <span class="n">parameters</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; Helper method that binds parameters to a SQL query. &quot;&quot;&quot;</span>
<span class="c1"># inspired by MySQL Python Connector (conversion.py)</span>
<span class="n">string_parameters</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="ow">in</span> <span class="n">iteritems</span><span class="p">(</span><span class="n">parameters</span><span class="p">):</span>
<span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">string_parameters</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;NULL&#39;</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
<span class="n">string_parameters</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span> <span class="o">+</span> <span class="n">_escape</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">string_parameters</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">return</span> <span class="n">operation</span> <span class="o">%</span> <span class="n">string_parameters</span></div>
<div class="viewcode-block" id="_escape"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook._escape">[docs]</a><span class="k">def</span> <span class="nf">_escape</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; Helper method that escapes parameters to a SQL query. &quot;&quot;&quot;</span>
<span class="n">e</span> <span class="o">=</span> <span class="n">s</span>
<span class="n">e</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\\\\</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="n">e</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">n&#39;</span><span class="p">)</span>
<span class="n">e</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\r</span><span class="s1">&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">r&#39;</span><span class="p">)</span>
<span class="n">e</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
<span class="n">e</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&quot;&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">e</span></div>
<div class="viewcode-block" id="_bq_cast"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook._bq_cast">[docs]</a><span class="k">def</span> <span class="nf">_bq_cast</span><span class="p">(</span><span class="n">string_field</span><span class="p">,</span> <span class="n">bq_type</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Helper method that casts a BigQuery row to the appropriate data types.</span>
<span class="sd"> This is useful because BigQuery returns all fields as strings.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">string_field</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">elif</span> <span class="n">bq_type</span> <span class="o">==</span> <span class="s1">&#39;INTEGER&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">string_field</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">bq_type</span> <span class="o">==</span> <span class="s1">&#39;FLOAT&#39;</span> <span class="ow">or</span> <span class="n">bq_type</span> <span class="o">==</span> <span class="s1">&#39;TIMESTAMP&#39;</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">string_field</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">bq_type</span> <span class="o">==</span> <span class="s1">&#39;BOOLEAN&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">string_field</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;true&#39;</span><span class="p">,</span> <span class="s1">&#39;false&#39;</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{}</span><span class="s2"> must have value &#39;true&#39; or &#39;false&#39;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">string_field</span><span class="p">))</span>
<span class="k">return</span> <span class="n">string_field</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">string_field</span></div>
<div class="viewcode-block" id="_split_tablename"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook._split_tablename">[docs]</a><span class="k">def</span> <span class="nf">_split_tablename</span><span class="p">(</span><span class="n">table_input</span><span class="p">,</span> <span class="n">default_project_id</span><span class="p">,</span> <span class="n">var_name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="s1">&#39;.&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">table_input</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s1">&#39;Expected target table name in the format of &#39;</span>
<span class="s1">&#39;&lt;dataset&gt;.&lt;table&gt;. Got: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">table_input</span><span class="p">))</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">default_project_id</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;INTERNAL: No default project is specified&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">var_print</span><span class="p">(</span><span class="n">var_name</span><span class="p">):</span>
<span class="k">if</span> <span class="n">var_name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;Format exception for </span><span class="si">{var}</span><span class="s2">: &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="n">var_name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">table_input</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="n">table_input</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">&#39;:&#39;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">3</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">((</span><span class="s1">&#39;</span><span class="si">{var}</span><span class="s1">Use either : or . to specify project &#39;</span>
<span class="s1">&#39;got </span><span class="si">{input}</span><span class="s1">&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">var</span><span class="o">=</span><span class="n">var_print</span><span class="p">(</span><span class="n">var_name</span><span class="p">),</span> <span class="nb">input</span><span class="o">=</span><span class="n">table_input</span><span class="p">))</span>
<span class="n">cmpt</span> <span class="o">=</span> <span class="n">table_input</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s1">&#39;:&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">project_id</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">rest</span> <span class="o">=</span> <span class="n">table_input</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">cmpt</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">project_id</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">rest</span> <span class="o">=</span> <span class="n">cmpt</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">cmpt</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">cmpt</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">&#39;:&#39;</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmpt</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">project_id</span> <span class="o">=</span> <span class="n">cmpt</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">rest</span> <span class="o">=</span> <span class="n">cmpt</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">((</span><span class="s1">&#39;</span><span class="si">{var}</span><span class="s1">Expect format of (&lt;project:)&lt;dataset&gt;.&lt;table&gt;, &#39;</span>
<span class="s1">&#39;got </span><span class="si">{input}</span><span class="s1">&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">var</span><span class="o">=</span><span class="n">var_print</span><span class="p">(</span><span class="n">var_name</span><span class="p">),</span> <span class="nb">input</span><span class="o">=</span><span class="n">table_input</span><span class="p">))</span>
<span class="n">cmpt</span> <span class="o">=</span> <span class="n">rest</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">cmpt</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
<span class="k">if</span> <span class="n">project_id</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">{var}</span><span class="s2">Use either : or . to specify project&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">var</span><span class="o">=</span><span class="n">var_print</span><span class="p">(</span><span class="n">var_name</span><span class="p">)))</span>
<span class="n">project_id</span> <span class="o">=</span> <span class="n">cmpt</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">dataset_id</span> <span class="o">=</span> <span class="n">cmpt</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">table_id</span> <span class="o">=</span> <span class="n">cmpt</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">cmpt</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">dataset_id</span> <span class="o">=</span> <span class="n">cmpt</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">table_id</span> <span class="o">=</span> <span class="n">cmpt</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
<span class="p">(</span><span class="s1">&#39;</span><span class="si">{var}</span><span class="s1">Expect format of (&lt;project.|&lt;project:)&lt;dataset&gt;.&lt;table&gt;, &#39;</span>
<span class="s1">&#39;got </span><span class="si">{input}</span><span class="s1">&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="n">var_print</span><span class="p">(</span><span class="n">var_name</span><span class="p">),</span> <span class="nb">input</span><span class="o">=</span><span class="n">table_input</span><span class="p">))</span>
<span class="k">if</span> <span class="n">project_id</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">var_name</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">log</span> <span class="o">=</span> <span class="n">LoggingMixin</span><span class="p">()</span><span class="o">.</span><span class="n">log</span>
<span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="s1">&#39;Project not included in </span><span class="si">%s</span><span class="s1">: </span><span class="si">%s</span><span class="s1">; using project &quot;</span><span class="si">%s</span><span class="s1">&quot;&#39;</span><span class="p">,</span>
<span class="n">var_name</span><span class="p">,</span> <span class="n">table_input</span><span class="p">,</span> <span class="n">default_project_id</span>
<span class="p">)</span>
<span class="n">project_id</span> <span class="o">=</span> <span class="n">default_project_id</span>
<span class="k">return</span> <span class="n">project_id</span><span class="p">,</span> <span class="n">dataset_id</span><span class="p">,</span> <span class="n">table_id</span></div>
<div class="viewcode-block" id="_cleanse_time_partitioning"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook._cleanse_time_partitioning">[docs]</a><span class="k">def</span> <span class="nf">_cleanse_time_partitioning</span><span class="p">(</span><span class="n">destination_dataset_table</span><span class="p">,</span> <span class="n">time_partitioning_in</span><span class="p">):</span>
<span class="c1"># if it is a partitioned table ($ is in the table name) add partition load option</span>
<span class="k">if</span> <span class="n">time_partitioning_in</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">time_partitioning_in</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">time_partitioning_out</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="n">destination_dataset_table</span> <span class="ow">and</span> <span class="s1">&#39;$&#39;</span> <span class="ow">in</span> <span class="n">destination_dataset_table</span><span class="p">:</span>
<span class="n">time_partitioning_out</span><span class="p">[</span><span class="s1">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;DAY&#39;</span>
<span class="n">time_partitioning_out</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">time_partitioning_in</span><span class="p">)</span>
<span class="k">return</span> <span class="n">time_partitioning_out</span></div>
<div class="viewcode-block" id="_validate_value"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook._validate_value">[docs]</a><span class="k">def</span> <span class="nf">_validate_value</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">expected_type</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; function to check expected type and raise</span>
<span class="sd"> error if type is not correct &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">expected_type</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{}</span><span class="s2"> argument must have a type </span><span class="si">{}</span><span class="s2"> not </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">key</span><span class="p">,</span> <span class="n">expected_type</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)))</span></div>
<div class="viewcode-block" id="_api_resource_configs_duplication_check"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook._api_resource_configs_duplication_check">[docs]</a><span class="k">def</span> <span class="nf">_api_resource_configs_duplication_check</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">config_dict</span><span class="p">,</span>
<span class="n">config_dict_name</span><span class="o">=</span><span class="s1">&#39;api_resource_configs&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">config_dict</span> <span class="ow">and</span> <span class="n">value</span> <span class="o">!=</span> <span class="n">config_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Values of </span><span class="si">{param_name}</span><span class="s2"> param are duplicated. &quot;</span>
<span class="s2">&quot;</span><span class="si">{dict_name}</span><span class="s2"> contained </span><span class="si">{param_name}</span><span class="s2"> param &quot;</span>
<span class="s2">&quot;in `query` config and </span><span class="si">{param_name}</span><span class="s2"> was also provided &quot;</span>
<span class="s2">&quot;with arg to run_query() method. Please remove duplicates.&quot;</span>
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">param_name</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">dict_name</span><span class="o">=</span><span class="n">config_dict_name</span><span class="p">))</span></div>
<div class="viewcode-block" id="_validate_src_fmt_configs"><a class="viewcode-back" href="../../../../_api/airflow/contrib/hooks/bigquery_hook/index.html#airflow.contrib.hooks.bigquery_hook._validate_src_fmt_configs">[docs]</a><span class="k">def</span> <span class="nf">_validate_src_fmt_configs</span><span class="p">(</span><span class="n">source_format</span><span class="p">,</span> <span class="n">src_fmt_configs</span><span class="p">,</span> <span class="n">valid_configs</span><span class="p">,</span>
<span class="n">backward_compatibility_configs</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Validates the given src_fmt_configs against a valid configuration for the source format.</span>
<span class="sd"> Adds the backward compatiblity config to the src_fmt_configs.</span>
<span class="sd"> :param source_format: File format to export.</span>
<span class="sd"> :type source_format: str</span>
<span class="sd"> :param src_fmt_configs: Configure optional fields specific to the source format.</span>
<span class="sd"> :type src_fmt_configs: dict</span>
<span class="sd"> :param valid_configs: Valid configuration specific to the source format</span>
<span class="sd"> :type valid_configs: List[str]</span>
<span class="sd"> :param backward_compatibility_configs: The top-level params for backward-compatibility</span>
<span class="sd"> :type backward_compatibility_configs: dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">backward_compatibility_configs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">backward_compatibility_configs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">backward_compatibility_configs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">src_fmt_configs</span> <span class="ow">and</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">valid_configs</span><span class="p">:</span>
<span class="n">src_fmt_configs</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">src_fmt_configs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">valid_configs</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{0}</span><span class="s2"> is not a valid src_fmt_configs for type </span><span class="si">{1}</span><span class="s2">.&quot;</span>
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">source_format</span><span class="p">))</span>
<span class="k">return</span> <span class="n">src_fmt_configs</span></div>
</pre></div>
<div class="pager" role="navigation" aria-label="related navigation"><button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Previous</button><button class="btn-hollow btn-blue bodytext__medium--cerulean-blue" disabled>Next</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="rating-container">
<p class="bodytext__medium--greyish-brown font-weight-500">Was this entry helpful?</p>
<div class="rating">
<div id="rate-star-5" class="rate-star">
<svg xmlns="http://www.w3.org/2000/svg" width="21.05" height="20.02" viewBox="0 0 21.05 20.02">
<g id="Group_806" data-name="Group 806" transform="translate(-774.404 -13.178)">
<path id="Path_715" d="M791.434 33.2l-6.5-3.42-6.5 3.42 1.242-7.243-5.262-5.13 7.273-1.057 3.252-6.59 3.252 6.59 7.273 1.057-5.262 5.13z" fill="#017cee" data-name="Path 715"></path>
</g>
</svg>
</div>
<div id="rate-star-4" class="rate-star">
<svg xmlns="http://www.w3.org/2000/svg" width="21.05" height="20.02" viewBox="0 0 21.05 20.02">
<g id="Group_806" data-name="Group 806" transform="translate(-774.404 -13.178)">
<path id="Path_715" d="M791.434 33.2l-6.5-3.42-6.5 3.42 1.242-7.243-5.262-5.13 7.273-1.057 3.252-6.59 3.252 6.59 7.273 1.057-5.262 5.13z" fill="#017cee" data-name="Path 715"></path>
</g>
</svg>
</div>
<div id="rate-star-3" class="rate-star">
<svg xmlns="http://www.w3.org/2000/svg" width="21.05" height="20.02" viewBox="0 0 21.05 20.02">
<g id="Group_806" data-name="Group 806" transform="translate(-774.404 -13.178)">
<path id="Path_715" d="M791.434 33.2l-6.5-3.42-6.5 3.42 1.242-7.243-5.262-5.13 7.273-1.057 3.252-6.59 3.252 6.59 7.273 1.057-5.262 5.13z" fill="#017cee" data-name="Path 715"></path>
</g>
</svg>
</div>
<div id="rate-star-2" class="rate-star">
<svg xmlns="http://www.w3.org/2000/svg" width="21.05" height="20.02" viewBox="0 0 21.05 20.02">
<g id="Group_806" data-name="Group 806" transform="translate(-774.404 -13.178)">
<path id="Path_715" d="M791.434 33.2l-6.5-3.42-6.5 3.42 1.242-7.243-5.262-5.13 7.273-1.057 3.252-6.59 3.252 6.59 7.273 1.057-5.262 5.13z" fill="#017cee" data-name="Path 715"></path>
</g>
</svg>
</div>
<div id="rate-star-1" class="rate-star">
<svg xmlns="http://www.w3.org/2000/svg" width="21.05" height="20.02" viewBox="0 0 21.05 20.02">
<g id="Group_806" data-name="Group 806" transform="translate(-774.404 -13.178)">
<path id="Path_715" d="M791.434 33.2l-6.5-3.42-6.5 3.42 1.242-7.243-5.262-5.13 7.273-1.057 3.252-6.59 3.252 6.59 7.273 1.057-5.262 5.13z" fill="#017cee" data-name="Path 715"></path>
</g>
</svg>
</div>
</div>
</div>
</main>
<nav class="wy-nav-side-toc">
<div class="wy-menu-vertical">
</div>
</nav>
</div>
</div>
<footer>
<div class="footer-section footer-section__media-section">
<div class="d-flex align-items-center">
<a class="footer-section__media-section--link" target="_blank" href="https://github.com">
<svg xmlns="http://www.w3.org/2000/svg" width="46.14" height="45" viewBox="0 0 46.14 45">
<path id="Path_207" d="M228.962 1078.578a23.072 23.072 0 0 0-7.29 44.96c1.154.212 1.574-.5 1.574-1.112 0-.548-.02-2-.031-3.924-6.417 1.394-7.771-3.093-7.771-3.093a6.109 6.109 0 0 0-2.562-3.375c-2.095-1.431.159-1.4.159-1.4a4.846 4.846 0 0 1 3.533 2.377c2.058 3.525 5.4 2.507 6.714 1.917a4.926 4.926 0 0 1 1.464-3.084c-5.123-.582-10.508-2.562-10.508-11.4a8.919 8.919 0 0 1 2.374-6.191 8.3 8.3 0 0 1 .226-6.105s1.937-.62 6.344 2.365a21.857 21.857 0 0 1 11.551 0c4.4-2.985 6.338-2.365 6.338-2.365a8.284 8.284 0 0 1 .23 6.105 8.9 8.9 0 0 1 2.371 6.191c0 8.862-5.393 10.812-10.533 11.384a5.506 5.506 0 0 1 1.566 4.272c0 3.084-.028 5.572-.028 6.329 0 .617.415 1.334 1.586 1.109a23.073 23.073 0 0 0-7.308-44.958z" fill="#fff" fill-rule="evenodd" data-name="Path 207" transform="translate(-205.894 -1078.578)"></path>
</svg>
</a>
<a class="footer-section__media-section--link" target="_blank" href="https://jira.atlassian.com/">
<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45" viewBox="0 0 45 45">
<g id="Group_210" data-name="Group 210" transform="translate(-339.789 -1315.282)">
<path id="Path_218" d="M394.82 1315.282h-21.671a9.784 9.784 0 0 0 9.784 9.778h3.986v3.857a9.784 9.784 0 0 0 9.784 9.771v-21.523a1.884 1.884 0 0 0-1.883-1.883z" fill="#fff" data-name="Path 218" transform="translate(-11.914)"></path>
<path id="Path_219" d="M378.14 1332.072h-21.671a9.778 9.778 0 0 0 9.778 9.778h4.018v3.857a9.784 9.784 0 0 0 9.752 9.778v-21.536a1.877 1.877 0 0 0-1.877-1.877z" fill="#fff" data-name="Path 219" transform="translate(-5.957 -5.996)"></path>
<path id="Path_220" d="M361.46 1348.862h-21.671a9.778 9.778 0 0 0 9.778 9.778h3.992v3.857a9.778 9.778 0 0 0 9.778 9.778v-21.529a1.883 1.883 0 0 0-1.877-1.884z" fill="#fff" data-name="Path 220" transform="translate(0 -11.993)"></path>
</g>
</svg>
</a>
<a class="footer-section__media-section--link" target="_blank" href="https://slack.com">
<svg xmlns="http://www.w3.org/2000/svg" width="45.073" height="45.073" viewBox="0 0 45.073 45.073">
<g id="Group_208" data-name="Group 208" transform="translate(-661.145 -806.287)">
<g id="Group_204" data-name="Group 204" transform="translate(661.145 830.01)">
<path id="Path_208" d="M670.634 856.859a4.744 4.744 0 1 1-4.744-4.744h4.744z" fill="#fff" data-name="Path 208" transform="translate(-661.145 -852.115)"></path>
<path id="Path_209" d="M684.059 856.859a4.744 4.744 0 0 1 9.489 0v11.861a4.744 4.744 0 1 1-9.489 0z" fill="#fff" data-name="Path 209" transform="translate(-672.198 -852.115)"></path>
</g>
<g id="Group_205" data-name="Group 205" transform="translate(661.145 806.287)">
<path id="Path_210" d="M688.8 815.776a4.744 4.744 0 1 1 4.744-4.745v4.745z" fill="#fff" data-name="Path 210" transform="translate(-672.198 -806.287)"></path>
<path id="Path_211" d="M677.751 829.2a4.744 4.744 0 0 1 0 9.489H665.89a4.744 4.744 0 1 1 0-9.489z" fill="#fff" data-name="Path 211" transform="translate(-661.145 -817.34)"></path>
</g>
<g id="Group_206" data-name="Group 206" transform="translate(684.868 806.287)">
<path id="Path_212" d="M729.887 833.945a4.744 4.744 0 1 1 4.745 4.745h-4.745z" fill="#fff" data-name="Path 212" transform="translate(-718.026 -817.34)"></path>
<path id="Path_213" d="M716.462 822.893a4.744 4.744 0 1 1-9.489 0v-11.862a4.744 4.744 0 0 1 9.489 0z" fill="#fff" data-name="Path 213" transform="translate(-706.973 -806.287)"></path>
</g>
<g id="Group_207" data-name="Group 207" transform="translate(684.868 830.01)">
<path id="Path_214" d="M711.718 875.029a4.744 4.744 0 1 1-4.745 4.744v-4.744z" fill="#fff" data-name="Path 214" transform="translate(-706.973 -863.168)"></path>
<path id="Path_215" d="M711.718 861.6a4.744 4.744 0 1 1 0-9.489h11.861a4.744 4.744 0 0 1 0 9.489z" fill="#fff" data-name="Path 215" transform="translate(-706.973 -852.115)"></path>
</g>
</g>
</svg>
</a>
<a class="footer-section__media-section--link" target="_blank" href="https://stackoverflow.com">
<svg xmlns="http://www.w3.org/2000/svg" width="37.647" height="44.6" viewBox="0 0 37.647 44.6">
<g id="Group_209" data-name="Group 209" transform="translate(-645.2 -975.455)">
<path id="Path_216" d="M677.028 1043.1v-11.948h3.966v15.914H645.2v-15.914h3.966v11.948z" fill="#fff" data-name="Path 216" transform="translate(0 -27.014)"></path>
<path id="Path_217" d="M661.012 1003.008l19.467 4.069.824-3.914-19.467-4.069zm2.575-9.27l18.025 8.395 1.648-3.605-18.025-8.446zm5-8.858l15.3 12.721 2.524-3.039-15.3-12.721zm9.888-9.425l-3.193 2.369 11.845 15.965 3.193-2.369zm-17.875 36.617h19.879v-3.966H660.6z" fill="#fff" data-name="Path 217" transform="translate(-7.469)"></path>
</g>
</svg>
</a>
<a class="footer-section__media-section--link" target="_blank" href="https://twitter.com">
<svg xmlns="http://www.w3.org/2000/svg" width="44.355" height="44.355" viewBox="0 0 44.355 44.355">
<g id="Group_211" data-name="Group 211" transform="translate(-503 -1382.2)">
<path id="Path_221" d="M541.811 1382.2h-33.267a5.546 5.546 0 0 0-5.544 5.544v33.266a5.547 5.547 0 0 0 5.544 5.545h33.267a5.546 5.546 0 0 0 5.544-5.545v-33.266a5.546 5.546 0 0 0-5.544-5.544zm-5.611 16.533c.011.244.011.488.011.732 0 7.507-5.722 16.178-16.179 16.178a16.173 16.173 0 0 1-8.7-2.539 10.92 10.92 0 0 0 1.353.078 11.4 11.4 0 0 0 7.064-2.44 5.685 5.685 0 0 1-5.311-3.947 5.725 5.725 0 0 0 2.561-.1 5.7 5.7 0 0 1-4.557-5.578v-.078a5.752 5.752 0 0 0 2.572.71 5.709 5.709 0 0 1-1.763-7.6 16.146 16.146 0 0 0 11.721 5.944 6.282 6.282 0 0 1-.144-1.3 5.688 5.688 0 0 1 9.836-3.892 11.3 11.3 0 0 0 3.615-1.375 5.721 5.721 0 0 1-2.506 3.149 11.538 11.538 0 0 0 3.271-.9 11.585 11.585 0 0 1-2.844 2.958z" fill="#fff" data-name="Path 221"></path>
</g>
</svg>
</a>
<a class="footer-section__media-section--link" target="_blank" href="https://youtube.com">
<svg xmlns="http://www.w3.org/2000/svg" width="49.594" height="34.941" viewBox="0 0 49.594 34.941">
<path id="Path_223" d="M1124.557 1230a6.232 6.232 0 0 0-4.385-4.413c-3.867-1.043-19.376-1.043-19.376-1.043s-15.508 0-19.376 1.043a6.232 6.232 0 0 0-4.385 4.413c-1.036 3.893-1.036 12.014-1.036 12.014s0 8.122 1.036 12.015a6.232 6.232 0 0 0 4.385 4.413c3.867 1.043 19.376 1.043 19.376 1.043s15.509 0 19.376-1.043a6.232 6.232 0 0 0 4.385-4.413c1.036-3.893 1.036-12.015 1.036-12.015s.001-8.123-1.036-12.014zm-28.833 19.388v-14.748l12.962 7.374z" fill="#fff" data-name="Path 223" transform="translate(-1076 -1224.542)"></path>
</svg>
</a>
</div>
<div class="footer-section__media-section--button-with-text">
<span class="footer-section__media-section--text">Want to be a part of Apache Airflow?</span>
<a href="/community">
<button id="" class="btn-filled bodytext__medium--white ">Join community</button>
</a>
</div>
</div>
<div class="footer-section footer-section__policies-section">
<div class="footer-section">
<span>© The Apache Software Foundation 2019</span>
<div class="footer-section__policies-section--policies">
<a href="https://www.apache.org/licenses/" class="footer-section__policies-section--policy-item">
<span>License</span>
</a>
<a href="https://www.apache.org/foundation/sponsorship.html" class="footer-section__policies-section--policy-item">
<span>Donate</span>
</a>
<a href="https://www.apache.org/foundation/thanks.html" class="footer-section__policies-section--policy-item">
<span>Thanks</span>
</a>
<a href="https://www.apache.org/security/" class="footer-section__policies-section--policy-item">
<span>Security</span>
</a>
<a href="/docs" class="footer-section__policies-section--policy-item">
<span>Season of Docs</span>
</a>
<a href="/" class="footer-section__policies-section--policy-item">
<span>Privacy policy &amp; terms</span>
</a>
<a href="/" class="footer-section__policies-section--policy-item">
<span>Cookies</span>
</a>
<div class="footer-section__policies-section--language-toggle">
<a class="dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span>English</span>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="/no/">Norsk</a>
</div>
</div>
</div>
</div>
<span class="footer-section__policies-section--disclaimer">
Apache Airflow, Apache, Airflow, the Airflow logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation.
All other products or name brands are trademarks of their respective holders, including The Apache Software Foundation.
</span>
</div>
</footer>
<script type="text/javascript" src="../../../../_static/_gen/js/docs.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script type="text/javascript" src="../../../../_static/jquery.js"></script>
<script type="text/javascript" src="../../../../_static/underscore.js"></script>
<script type="text/javascript" src="../../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../../_static/language_data.js"></script>
<script type="text/javascript" src="../../../../_static/jira-links.js"></script>
</body>
</html>