I Can Do I.T.
IT Tech Blog for me.
https://dorbae.github.io/
Sat, 01 Nov 2025 09:55:23 +0000
Sat, 01 Nov 2025 09:55:23 +0000
Jekyll v3.10.0
-
[AWS] How to install awscli(AWS Command Line Interface) version 1 on MacOS
<h1 id="goal">Goal</h1>
<ul>
<li>Install awscli version 1 on MacOS</li>
</ul>
<p><br /></p>
<hr />
<h1 id="introduce">Introduce</h1>
<h2 id="what-is-aws-cli">What is AWS CLI</h2>
<ul>
<li>The AWS Command Line Interface (AWS CLI) is an open source tool that enables you to interact with AWS services using commands in your command-line shell.</li>
</ul>
<h2 id="the-difference-between-version-1-and-version-2">The difference between version 1 and version 2</h2>
<h3 id="version-2x">Version 2.x</h3>
<ul>
<li>The current, generally available release of the AWS CLI that is intended for use in production environments.</li>
<li>It does include some “breaking” changes from version 1 that might require you to change your scripts so that they continue to operate as you expect.</li>
</ul>
<h3 id="version-1x">Version 1.x</h3>
<ul>
<li>The previous version of the AWS CLI that is available for backwards compatiblity.</li>
<li>On January 10th, 2020, AWS CLI version 1, which requires a separate installation of Python to operate, stopped supporting Python versions 2.6 and 3.3. All builds of AWS CLI version 1 released after January 10th, 2020, starting with version 1.17, require Python 2.7, Python 3.4, or a later version to successfully use the AWS CLI.</li>
</ul>
<blockquote>
<p>AWS CLI version 2 and Windows MSI installer version of AWS CLI version 1 are not affected by this change.</p>
</blockquote>
<p><br /></p>
<hr />
<h1 id="practice">Practice</h1>
<h2 id="1-download-awscli-installer-file">1. Download awscli installer file</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>curl <span class="s2">"https://s3.amazonaws.com/aws-cli/awscli-bundle.zip"</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/03/2020-03-03-cloud-aws-howtoinstallawsclionmac-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h2 id="2-unzip-installer-file">2. Unzip installer file</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>unzip awscii-bundle.zip
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/03/2020-03-03-cloud-aws-howtoinstallawsclionmac-002.png" alt="screenshot002" /></p>
<p><br /></p>
<h2 id="3-execute-installer">3. Execute installer</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo</span> ./awscli-bundle/install <span class="nt">-i</span> /usr/local/aws <span class="nt">-b</span> /usr/local/bin/aws
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/03/2020-03-03-cloud-aws-howtoinstallawsclionmac-003.png" alt="screenshot003" /></p>
<p><br /></p>
<h2 id="4-check-the-version-of-awscli">4. Check the version of awscli</h2>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>awscli <span class="nt">--version</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/03/2020-03-03-cloud-aws-howtoinstallawsclionmac-004.png" alt="screenshot004" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html">What is the AWS Command Line Interface - AWS Document</a></li>
<li><a href="https://docs.aws.amazon.com/cli/latest/userguide/install-macos.html">Install the AWS CLI version 1 - AWS Docoument</a></li>
</ul>
Tue, 03 Mar 2020 00:00:00 +0000
https://dorbae.github.io/cloud/aws/cloud-aws-howtoinstallawsclionmac/
https://dorbae.github.io/cloud/aws/cloud-aws-howtoinstallawsclionmac/
cloud
aws
awscli
Cloud
AWS
-
[Hive] New features on Hive 3.0
<h1 id="goal">Goal</h1>
<ul>
<li>The new features of Apache Hive 3.0</li>
</ul>
<p><br /></p>
<hr />
<h1 id="practice">Practice</h1>
<h2 id="whats-new-in-this-release-apache-hive">What’s new in this release: Apache Hive</h2>
<ul>
<li>Apache Hive 3.0.0 was released on 21 May 2018 and the recent version is 3.1.2(based on 18 Feb 2020).</li>
<li>One of the noticeable features is that Hive 3.0 supports seamless <strong>ACID</strong>(Atomicity, Consistency, Isolation, Durability) and you have to consider serveral thing about the transactional tables created by a Hive version prior to Hive 3.</li>
<li>Futhermore, several SQL features and useful connectors were added.</li>
<li>And also, it enhance the performance through improved LLAP and Apache Spark.</li>
</ul>
<p><br /></p>
<h2 id="hive3-new-features">Hive3 New Features</h2>
<h3 id="acid-v2">ACID v2</h3>
<ul>
<li>Originally Hive supported write only by adding partitions or loading new file into existing partitions because HDFS Hive already has not allowed file replaced or edited.</li>
<li>Hive had supported the trasactinons and INSERT, UPDATE, DELETE since 0.13 version was released. But it had several drawbacks like these.
<ul>
<li>Transactional tables had to be stored in ORC and and bucketed</li>
<li>Reading transactional tables was significnatly slower than non-transactional ones</li>
<li>No support for MERGE or UPSERT funcionality</li>
</ul>
</li>
<li>Seamless INSERT/UPDATE/DELETE opertaions on existing tables and improve the performance just as good as non-ACID</li>
<li>Transactional tables don’t have to be bucketed anymore</li>
<li>Non-ORC format bales supported (INSERT & SELECT only)</li>
<li>Compatibility with cloud storage providers
<ul>
<li>eg. Amazon S3</li>
</ul>
</li>
<li>New HiveStreaming API (v2)</li>
</ul>
<p><br /></p>
<h3 id="llaplive-long-and-process-workload-management">LLAP(Live Long And Process) workload management</h3>
<ul>
<li>It consists of a long-lived daemon which replaces direct interactions with the HDFS DataNode, and a tightly integrated DAG-based framework.</li>
<li>Functionality such as caching, pre-fetching, some query processing and access control are moved into the daemon. Small/short queries are largely processed by this daemon directly, while any heavy lifting will be performed in standard YARN containers.</li>
<li>Live Long And Process (LLAP) functionality was added in Hive 2.0 and Hive 3.0 supports new features
<ul>
<li>Split your LLAP resources in pools
<ul>
<li>e.g. bi (for Business Analytics) and etl (for Extract Transform and Load)</li>
</ul>
</li>
<li>Automatically map applications to pools
<ul>
<li>e.g. Tableau to the bi pool</li>
</ul>
</li>
<li>Create triggers to dynamically move applications from one pool to another
<ul>
<li>e.g. move long running queries to the etl pool</li>
</ul>
</li>
<li>Activate/deactivate your resource plans based on your users’ needs (one active at a time).</li>
</ul>
</li>
</ul>
<p><br /></p>
<h3 id="jdbc-druid-and-kafka-connectors">JDBC, Druid and Kafka connectors</h3>
<ul>
<li>JDBC connector(JdbcStorageHandler)
<ul>
<li>It is read-only for now.</li>
<li>It allows you to easily read/import data from any of the supported databases.
<ul>
<li>MySQL, PostgreSQL, Oracle, MSSQL and Apache Derby</li>
</ul>
</li>
</ul>
</li>
<li>Kafka connector
<ul>
<li>It can be used to query real-time data from Apache Kafka.
<ul>
<li>You connect to Kafka data from Hive by creating an external table that maps to a Kafka topic.</li>
</ul>
</li>
<li>It can be used to achieve exactly-once offloading of data to Hive and real-time data transformation.
<ul>
<li>The Hive-Kafka connector supports the following serialization and deserialization formats:
<ul>
<li>JsonSerDe (default)</li>
<li>OpenCSVSerde</li>
<li>AvroSerDe</li>
</ul>
</li>
<li>Exactly-once ingestion from Kafka to Druid can be done through Hive.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-12-bigdata-hive-hive3newfeature-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h3 id="hive-warehouse-connector-for-apache-spark">Hive Warehouse Connector for Apache Spark</h3>
<ul>
<li>All interactions between Hive and Apache Spark has to go through the Hive Warehouse Connector.</li>
<li>This connector takes advantage of Hive LLAP to allow streaming/ACID interaction between Hive and Spark.</li>
<li>The Spark application will need to access a Hive Server Interactive (with LLAP activated) to read Hive managed tables, but it won’t need it to write to Hive managed tables or read/write Hive external tables.</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-12-bigdata-hive-hive3newfeature-002.png" alt="screenshot002" /></p>
<ul>
<li>Execute Query Process
<ul>
<li>
<ol>
<li>Driver submits query to HiveServer</li>
</ol>
</li>
<li>
<ol>
<li>Compile query and return “splits” to Driver</li>
</ol>
</li>
<li>
<ol>
<li>Execute query on LLAP</li>
</ol>
</li>
<li>
<ol>
<li>Executor Tasks run for each split</li>
</ol>
</li>
<li>
<ol>
<li>Tasks read Arrow data from LLAP</li>
</ol>
</li>
<li>
<ol>
<li>HWC returns ArrowColumnVectors to Spark</li>
</ol>
</li>
</ul>
</li>
</ul>
<p><br /></p>
<h3 id="sql-features">SQL features</h3>
<ul>
<li>Constraints and default values
<ul>
<li><strong>DEFAULT</strong> value for each column is available and it can be used in INSERT and UPDATE statements.
<blockquote>
<table>
<tbody>
<tr>
<td><strong>UNIQUE</strong> and <strong>NOT NULL</strong> SQL constraints and **PRIMARY</td>
<td>FOREIGN KEY** already have been added in Hive 2.1</td>
</tr>
</tbody>
</table>
</blockquote>
</li>
</ul>
</li>
<li>Tables information
<ul>
<li>Hive 3 allows easy exploration of the whole warehouse with information_schema and sys databases.</li>
</ul>
</li>
</ul>
<p><br /></p>
<h3 id="improved-performance">Improved performance</h3>
<ul>
<li>Based on a recent TPC-DS benchmark by the MR3 team, Hive LLAP 3.1.0 is the fastest SQL-on-Hadoop system available in HDP 3.0.1.</li>
<li>The benchmark compares all the SQL systems embedded with HDP3 as well as Hive on MR3 (a new execution engine for Hadoop and Kubernetes), by running a set of 99 SQL queries.</li>
</ul>
<table>
<thead>
<tr>
<th>System</th>
<th>Total TCP-DS running time (seconds)</th>
</tr>
</thead>
<tbody>
<tr>
<td>HDP 3.0.1 LLAP</td>
<td>5516.89</td>
</tr>
<tr>
<td>Hive 3.1.0/MR3</td>
<td>6575.052</td>
</tr>
<tr>
<td>HDP 3.0.1 Tez</td>
<td>12227.317</td>
</tr>
<tr>
<td>Presto 0.208e</td>
<td>12948.224</td>
</tr>
<tr>
<td>Spark 2.3.1</td>
<td>26247.471</td>
</tr>
</tbody>
</table>
<p><br /></p>
<h3 id="materialized-views-mv">Materialized views (MV)</h3>
<ul>
<li>It can improve the performance by serveral ways
#### Storage for intermediate results
<ul>
<li>Materialized views results are stored, allowing mutualizing computing costs.
#### Incremental rebuilding</li>
<li>Updating an materialized view only computes the data that was inserted in its sources tables since the last update.
##### Query rewriting</li>
<li>When appropriate, the cost-based optimizer uses existing materialized views to plan queries instead of the sources tables, without the user being aware of it.</li>
</ul>
</li>
</ul>
<p><br /></p>
<h3 id="other-features">Other features</h3>
<ul>
<li>Surrogate Keys</li>
<li>TIMESTAMP WITH TIMEZONE data type</li>
<li>Apache Parquet and text files are supported in LLAP</li>
</ul>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://www.adaltas.com/en/2019/07/25/hive-3-features-tips-tricks/">ADALTAS</a></li>
<li><a href="https://www.slideshare.net/Hadoop_Summit/what-is-new-in-apache-hive-30">DataWorks</a></li>
<li><a href="https://bitnine.net/blog-computing/about-hive-3-hive-2-0/">Hive 2.0 - bitn!ne</a></li>
<li><a href="https://hive.apache.org/downloads.html">Hive Release Notes</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions">Hive Transactions - Hive Wiki</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/Hive/LLAP">LLAP - Hive Wiki</a></li>
<li><a href="https://docs.cloudera.com/HDPDocuments/HDF3/HDF-3.3.1/kafka-hive-integration/content/hive-kafka-integration.html">Hive-Kafka Integreation - Cloudera</a></li>
</ul>
Wed, 12 Feb 2020 00:00:00 +0000
https://dorbae.github.io/bigdata/hive/bigdata-hive-hive3newfeature/
https://dorbae.github.io/bigdata/hive/bigdata-hive-hive3newfeature/
bigdata
hive
feature
apache
data
BigData
Hive
-
[Data Analysis] SQL Recipe for Data Analysis Tutorial #6 - Aggregating data based on the time series
<h1 id="goal">Goal</h1>
<ul>
<li>Studying SQL for data analysis</li>
<li>Practicing chapter 4th in the book</li>
<li>Studying SQL for Manipulating data</li>
</ul>
<p><br /></p>
<hr />
<h1 id="practice">Practice</h1>
<h2 id="book-for-studying">Book for studying</h2>
<table>
<thead>
<tr>
<th>Title</th>
<th>데이터 분석을 위한 SQL 레시피</th>
</tr>
</thead>
<tbody>
<tr>
<td>Author</td>
<td>Nagato Kasaki, Naoto Tamiya</td>
</tr>
<tr>
<td>Translator</td>
<td>윤인성</td>
</tr>
<tr>
<td>Publisher</td>
<td>한빛미디어</td>
</tr>
<tr>
<td>Chapter</td>
<td>4</td>
</tr>
<tr>
<td>Lesson</td>
<td>9</td>
</tr>
</tbody>
</table>
<p><br /></p>
<ul>
<li>I’m gonna study basic SQL syntax and functions for data analysis</li>
<li>I’m gonna study how to extract data for sales</li>
<li>I’m gonna study how to aggregate data based on the time series</li>
<li>I’m gonna try to load test data on PostgreSQL and execute queries in the book</li>
</ul>
<p><br /></p>
<h2 id="49-aggregating-data-based-on-the-time-series">4.9. Aggregating data based on the time series</h2>
<ul>
<li><a href="/assets/sql/sql_recipe_tutorial_006.sql">Download tutorial SQL file</a></li>
</ul>
<p><br /></p>
<h3 id="491-aggregate-sales-amount-by-date">4.9.1. Aggregate sales amount by date</h3>
<h4 id="create-purchase-log-table">Create purchase log table</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS purchase_log;</span>
<span class="c1">-- Create purchase log table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">purchase_log3</span> <span class="p">(</span>
<span class="n">dt</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">order_id</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">user_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">purchase_amount</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">purchase_log3</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'2020-01-01'</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'rhwpvvitou'</span><span class="p">,</span> <span class="mi">13900</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-01'</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'hqnwoamzic'</span><span class="p">,</span> <span class="mi">10616</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-02'</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'tzlmqryunr'</span><span class="p">,</span> <span class="mi">21156</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-02'</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="s1">'wkmqqwbyai'</span><span class="p">,</span> <span class="mi">14893</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-03'</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="s1">'ciecbedwbq'</span><span class="p">,</span> <span class="mi">13054</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-03'</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="s1">'svgnbqsagx'</span><span class="p">,</span> <span class="mi">24384</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-03'</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="s1">'dfgqftdocu'</span><span class="p">,</span> <span class="mi">15591</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-04'</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="s1">'sbgqlzkvyn'</span><span class="p">,</span> <span class="mi">3025</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-04'</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="s1">'lbedmngbol'</span><span class="p">,</span> <span class="mi">24215</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-04'</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="s1">'itlvssbsgx'</span><span class="p">,</span> <span class="mi">2059</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-05'</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="s1">'jqcmmguhik'</span><span class="p">,</span> <span class="mi">4235</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-05'</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="s1">'jgotcrfeyn'</span><span class="p">,</span> <span class="mi">28013</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-05'</span><span class="p">,</span> <span class="mi">13</span><span class="p">,</span> <span class="s1">'pgeojzoshx'</span><span class="p">,</span> <span class="mi">16008</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-06'</span><span class="p">,</span> <span class="mi">14</span><span class="p">,</span> <span class="s1">'msjberhxnx'</span><span class="p">,</span> <span class="mi">1980</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-06'</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="s1">'tlhbolohte'</span><span class="p">,</span> <span class="mi">23494</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-06'</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="s1">'gbchhkcotf'</span><span class="p">,</span> <span class="mi">3966</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-07'</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="s1">'zfmbpvpzvu'</span><span class="p">,</span> <span class="mi">28159</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-07'</span><span class="p">,</span> <span class="mi">18</span><span class="p">,</span> <span class="s1">'yauwzpaxtx'</span><span class="p">,</span> <span class="mi">8715</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-07'</span><span class="p">,</span> <span class="mi">19</span><span class="p">,</span> <span class="s1">'uyqboqfgex'</span><span class="p">,</span> <span class="mi">10805</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-08'</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="s1">'hiqdkrzcpq'</span><span class="p">,</span> <span class="mi">3462</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-08'</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="s1">'zosbvlylpv'</span><span class="p">,</span> <span class="mi">13999</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-08'</span><span class="p">,</span> <span class="mi">22</span><span class="p">,</span> <span class="s1">'bwfbchzgnl'</span><span class="p">,</span> <span class="mi">2299</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-09'</span><span class="p">,</span> <span class="mi">23</span><span class="p">,</span> <span class="s1">'zzgauelgrt'</span><span class="p">,</span> <span class="mi">16475</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-09'</span><span class="p">,</span> <span class="mi">24</span><span class="p">,</span> <span class="s1">'qrzfcwecge'</span><span class="p">,</span> <span class="mi">6469</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-10'</span><span class="p">,</span> <span class="mi">25</span><span class="p">,</span> <span class="s1">'njbpsrvvcq'</span><span class="p">,</span> <span class="mi">16584</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-10'</span><span class="p">,</span> <span class="mi">26</span><span class="p">,</span> <span class="s1">'cyxfgumkst'</span><span class="p">,</span> <span class="mi">11339</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">purchase_log3</span><span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h4 id="aggregate-sales-amount-and-the-average-purchase-amount-per-day">Aggregate sales amount and the average purchase amount per day</h4>
<ul>
<li>Imagine that you have to make the below chart</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-002.png" alt="screenshot002" /></p>
<p><br /></p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Aggregate sales amount and the average purchase amount per day</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="p">,</span> <span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="k">AS</span> <span class="n">purchase_count</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">total_amount</span>
<span class="p">,</span> <span class="k">AVG</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">avg_amount</span>
<span class="k">FROM</span> <span class="n">purchase_log3</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span> <span class="k">ASC</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-003.png" alt="screenshot003" /></p>
<p><br /></p>
<h3 id="492-extract-the-change-followed-by-date-through-a-moving-average">4.9.2. Extract the change followed by date through a moving average</h3>
<ul>
<li>You can easily recognize the increase and decrease chage through the moving average</li>
<li>Imagine that you have to make the below chart</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-004.png" alt="screenshot004" /></p>
<p><br /></p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Extract the change followed by date through a moving average</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">total_amount</span>
<span class="c1">-- Caculate the recent average amount for 7 days</span>
<span class="c1">-- Get the average amount even if there are less 7 days</span>
<span class="p">,</span> <span class="k">AVG</span><span class="p">(</span><span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">))</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span> <span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="mi">6</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="k">CURRENT</span> <span class="k">ROW</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">seven_day_avg</span>
<span class="c1">-- Calculate the recent average amount for 7 days exactly</span>
<span class="c1">-- Ignore the average amount which has less 7 days</span>
<span class="p">,</span> <span class="k">CASE</span> <span class="k">WHEN</span> <span class="mi">7</span> <span class="o">=</span> <span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span> <span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="mi">6</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="k">CURRENT</span> <span class="k">ROW</span><span class="p">)</span>
<span class="k">THEN</span> <span class="k">AVG</span><span class="p">(</span><span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">))</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span> <span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="mi">6</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="k">CURRENT</span> <span class="k">ROW</span><span class="p">)</span>
<span class="k">END</span> <span class="k">AS</span> <span class="n">seven_day_avg_strict</span>
<span class="k">FROM</span> <span class="n">purchase_log3</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span> <span class="k">ASC</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-005.png" alt="screenshot005" /></p>
<p><br /></p>
<h3 id="493-calculate-the-accumulated-sales-amount-of-this-month">4.9.3. Calculate the accumulated sales amount of this month</h3>
<ul>
<li>Imagine that you have to make the below chart</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-006.png" alt="screenshot006" /></p>
<p><br /></p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate the accumulated sales amount of this month</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="c1">-- Extract year-month</span>
<span class="c1">-- if PostgreSQL, Hive, SparkSQL, Redshift</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span> <span class="k">AS</span> <span class="n">year_month</span>
<span class="c1">-- if PostgreSQL, Hive, SparkSQL, BigQuery</span>
<span class="c1">-- , substr(dt, 1, 7) AS year_month</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">total_amount</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">))</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="k">ROWS</span> <span class="n">UNBOUNDED</span> <span class="k">PRECEDING</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">agg_amount</span>
<span class="k">FROM</span> <span class="n">purchase_log3</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-007.png" alt="screenshot007" /></p>
<p><br /></p>
<h4 id="enhance-the-readability-of-query-through-with-clause">Enhance the readability of query through WITH clause</h4>
<ul>
<li>substring functions were used repeatly and it ruined the code readablity</li>
<li>You can make it better by <strong>WITH</strong></li>
</ul>
<blockquote>
<p>In BigData analysis, it is usually more important to make the query distinctly than the performance</p>
</blockquote>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Make a temporary view indicating daily sales amount</span>
<span class="k">WITH</span>
<span class="n">daily_purchase</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="c1">-- Extract year, month, date respectively</span>
<span class="c1">-- if PostgreSQL, Hive, SparkSQL, Redshift, use substring</span>
<span class="c1">-- if BigQuery, use substr</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">year</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span class="k">month</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">date</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">purchase_amount</span>
<span class="p">,</span> <span class="k">COUNT</span><span class="p">(</span><span class="n">order_id</span><span class="p">)</span> <span class="k">AS</span> <span class="n">orders</span>
<span class="k">FROM</span> <span class="n">purchase_log3</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">daily_purchase</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-008.png" alt="screenshot008" /></p>
<p><br /></p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate the accumulated sales amount of this month through WITH</span>
<span class="k">WITH</span>
<span class="n">daily_purchase</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="c1">-- Extract year, month, date respectively</span>
<span class="c1">-- if PostgreSQL, Hive, SparkSQL, Redshift, use substring</span>
<span class="c1">-- if BigQuery, use substr</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">year</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span class="k">month</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">date</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">purchase_amount</span>
<span class="p">,</span> <span class="k">COUNT</span><span class="p">(</span><span class="n">order_id</span><span class="p">)</span> <span class="k">AS</span> <span class="n">orders</span>
<span class="k">FROM</span> <span class="n">purchase_log3</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="p">,</span> <span class="n">concat</span><span class="p">(</span><span class="nb">year</span><span class="p">,</span> <span class="s1">'-'</span><span class="p">,</span> <span class="k">month</span><span class="p">)</span> <span class="k">AS</span> <span class="n">year_month</span>
<span class="c1">-- if Redshift, concat or ||</span>
<span class="c1">-- year || '-' || month AS year_month</span>
<span class="p">,</span> <span class="n">purchase_amount</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="nb">year</span><span class="p">,</span> <span class="k">month</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span> <span class="k">ROWS</span> <span class="n">UNBOUNDED</span> <span class="k">PRECEDING</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">agg_amount</span>
<span class="k">FROM</span> <span class="n">daily_purchase</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-009.png" alt="screenshot009" /></p>
<p><br /></p>
<h3 id="494-calculate-the-sales-per-month-and-compare-to-the-one-of-last-year">4.9.4. Calculate the sales per month and compare to the one of last year</h3>
<h4 id="create-purchase-log-table-1">Create purchase log table</h4>
<ul>
<li>Insert sample data which contains sale amount from 2018 to 2019</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS purchase_log4;</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">purchase_log4</span> <span class="p">(</span>
<span class="n">dt</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">order_id</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">user_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">purchase_amount</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">purchase_log4</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'2018-01-01'</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'rhwpvvitou'</span><span class="p">,</span> <span class="mi">13900</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2018-02-08'</span><span class="p">,</span> <span class="mi">95</span><span class="p">,</span> <span class="s1">'chtanrqtzj'</span><span class="p">,</span> <span class="mi">28469</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2018-03-09'</span><span class="p">,</span> <span class="mi">168</span><span class="p">,</span> <span class="s1">'bcqgtwxdgq'</span><span class="p">,</span> <span class="mi">18899</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2018-04-11'</span><span class="p">,</span> <span class="mi">250</span><span class="p">,</span> <span class="s1">'kdjyplrxtk'</span><span class="p">,</span> <span class="mi">12394</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2018-05-11'</span><span class="p">,</span> <span class="mi">325</span><span class="p">,</span> <span class="s1">'pgnjnnapsc'</span><span class="p">,</span> <span class="mi">2282</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2018-06-12'</span><span class="p">,</span> <span class="mi">400</span><span class="p">,</span> <span class="s1">'iztgctnnlh'</span><span class="p">,</span> <span class="mi">10180</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2018-07-11'</span><span class="p">,</span> <span class="mi">475</span><span class="p">,</span> <span class="s1">'eucjmxvjkj'</span><span class="p">,</span> <span class="mi">4027</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2018-08-10'</span><span class="p">,</span> <span class="mi">550</span><span class="p">,</span> <span class="s1">'fqwvlvndef'</span><span class="p">,</span> <span class="mi">6243</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2018-09-10'</span><span class="p">,</span> <span class="mi">625</span><span class="p">,</span> <span class="s1">'mhwhxfxrxq'</span><span class="p">,</span> <span class="mi">3832</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2018-10-11'</span><span class="p">,</span> <span class="mi">700</span><span class="p">,</span> <span class="s1">'wyrgiyvaia'</span><span class="p">,</span> <span class="mi">6716</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2018-11-10'</span><span class="p">,</span> <span class="mi">775</span><span class="p">,</span> <span class="s1">'cwpdvmhhwh'</span><span class="p">,</span> <span class="mi">16444</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2018-12-10'</span><span class="p">,</span> <span class="mi">850</span><span class="p">,</span> <span class="s1">'eqeaqvixkf'</span><span class="p">,</span> <span class="mi">29199</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-01-09'</span><span class="p">,</span> <span class="mi">925</span><span class="p">,</span> <span class="s1">'efmclayfnr'</span><span class="p">,</span> <span class="mi">22111</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-02-10'</span><span class="p">,</span> <span class="mi">1000</span><span class="p">,</span> <span class="s1">'qnebafrkco'</span><span class="p">,</span> <span class="mi">11965</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-03-12'</span><span class="p">,</span> <span class="mi">1075</span><span class="p">,</span> <span class="s1">'gsvqniykgx'</span><span class="p">,</span> <span class="mi">20215</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-04-12'</span><span class="p">,</span> <span class="mi">1150</span><span class="p">,</span> <span class="s1">'ayzvjvnocm'</span><span class="p">,</span> <span class="mi">11792</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-05-13'</span><span class="p">,</span> <span class="mi">1225</span><span class="p">,</span> <span class="s1">'knhevkibbp'</span><span class="p">,</span> <span class="mi">18087</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-06-10'</span><span class="p">,</span> <span class="mi">1291</span><span class="p">,</span> <span class="s1">'wxhxmzqxuw'</span><span class="p">,</span> <span class="mi">18859</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-07-10'</span><span class="p">,</span> <span class="mi">1366</span><span class="p">,</span> <span class="s1">'krrcpumtzb'</span><span class="p">,</span> <span class="mi">14919</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-08-08'</span><span class="p">,</span> <span class="mi">1441</span><span class="p">,</span> <span class="s1">'lpglkecvsl'</span><span class="p">,</span> <span class="mi">12906</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-09-07'</span><span class="p">,</span> <span class="mi">1516</span><span class="p">,</span> <span class="s1">'mgtlsfgfbj'</span><span class="p">,</span> <span class="mi">5696</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-10-07'</span><span class="p">,</span> <span class="mi">1591</span><span class="p">,</span> <span class="s1">'trgjscaajt'</span><span class="p">,</span> <span class="mi">13398</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-11-06'</span><span class="p">,</span> <span class="mi">1666</span><span class="p">,</span> <span class="s1">'ccfbjyeqrb'</span><span class="p">,</span> <span class="mi">6213</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2019-12-05'</span><span class="p">,</span> <span class="mi">1741</span><span class="p">,</span> <span class="s1">'onooskbtzp'</span><span class="p">,</span> <span class="mi">26024</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">purchase_log4</span><span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-010.png" alt="screenshot010" /></p>
<p><br /></p>
<h4 id="calculate-the-sales-per-month-and-compare-to-the-one-of-last-year">Calculate the sales per month and compare to the one of last year</h4>
<ul>
<li>Imagine that you have to make the below chart</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-011.png" alt="screenshot011" /></p>
<p><br /></p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate the sales per month and compare to the one of last year</span>
<span class="k">WITH</span>
<span class="n">daily_purchase</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="c1">-- Extract year, month, date respectively</span>
<span class="c1">-- if PostgreSQL, Hive, SparkSQL, Redshift, use substring</span>
<span class="c1">-- if BigQuery, use substr</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">year</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span class="k">month</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">date</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">purchase_amount</span>
<span class="p">,</span> <span class="k">COUNT</span><span class="p">(</span><span class="n">order_id</span><span class="p">)</span> <span class="k">AS</span> <span class="n">orders</span>
<span class="k">FROM</span> <span class="n">purchase_log4</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="k">month</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="k">CASE</span> <span class="nb">year</span> <span class="k">WHEN</span> <span class="s1">'2018'</span> <span class="k">THEN</span> <span class="n">purchase_amount</span> <span class="k">END</span><span class="p">)</span> <span class="k">AS</span> <span class="n">amount_2018</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="k">CASE</span> <span class="nb">year</span> <span class="k">WHEN</span> <span class="s1">'2019'</span> <span class="k">THEN</span> <span class="n">purchase_amount</span> <span class="k">END</span><span class="p">)</span> <span class="k">AS</span> <span class="n">amount_2019</span>
<span class="p">,</span> <span class="mi">100</span><span class="p">.</span><span class="mi">0</span> <span class="o">*</span> <span class="k">SUM</span><span class="p">(</span><span class="k">CASE</span> <span class="nb">year</span> <span class="k">WHEN</span> <span class="s1">'2019'</span> <span class="k">THEN</span> <span class="n">purchase_amount</span> <span class="k">END</span><span class="p">)</span>
<span class="o">/</span> <span class="k">SUM</span><span class="p">(</span><span class="k">CASE</span> <span class="nb">year</span> <span class="k">WHEN</span> <span class="s1">'2018'</span> <span class="k">THEN</span> <span class="n">purchase_amount</span> <span class="k">END</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">rate</span>
<span class="k">FROM</span> <span class="n">daily_purchase</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="k">month</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="k">month</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-012.png" alt="screenshot012" /></p>
<p><br /></p>
<h3 id="495-utilize-z-chart">4.9.5. Utilize Z chart</h3>
<ul>
<li><strong>Z chart</strong>
<ul>
<li>A diagram charting values over a period (frequently one year) and showing simultaneously monthly figures (or weekly or daily), cumulative totals and the moving averages.</li>
<li>It normally takes a Z shape, hence its title and is of use in clarifying the trends present in the data displayed</li>
</ul>
</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-013.png" alt="screenshot013" /></p>
<p><br /></p>
<h4 id="what-factors-are-needed-for-z-chart">What factors are needed for Z chart</h4>
<ul>
<li>Monthly figure
<ul>
<li>The sum amount of that month</li>
<li>It can be weekly or daily</li>
</ul>
</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-014.png" alt="screenshot014" /></p>
<p><br /></p>
<ul>
<li>Cumulative total
<ul>
<li>Cumulative total from the first month of this year to current month</li>
</ul>
</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-015.png" alt="screenshot015" /></p>
<p><br /></p>
<ul>
<li>Moving total
<ul>
<li>Total amount from 11 month ago to current</li>
</ul>
</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-016.png" alt="screenshot016" /></p>
<p><br /></p>
<h4 id="how-to-analyze-z-chart">How to analyze Z chart</h4>
<ul>
<li>Noticeable point on the cumulative total
<ul>
<li>The line for the cumulative total figure will be more straight as the monthly figures are regular</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-017.png" alt="screenshot017" /></p>
<p><br /></p>
<ul>
<li>The lean of the line for the cumulative total figure will become steep as the monthly figures are getting bigger</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-018.png" alt="screenshot018" /></p>
<p><br /></p>
<ul>
<li>The lean of the line for the cumulative total figure will be flatting off as the monthly figures are getting smaller</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-019.png" alt="screenshot019" /></p>
</li>
</ul>
<p><br /></p>
<ul>
<li>Noticeable point on the moving total
<ul>
<li>The line for the moving total will be straight when the sales amount is regular from last year to this year</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-020.png" alt="screenshot020" /></p>
<p><br /></p>
<ul>
<li>The graph will rise up when there is an increasing trend for sales amount</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-021.png" alt="screenshot021" /></p>
<p><br /></p>
<ul>
<li>The graph will drop when there is a decreasing trend for sales amount</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-022.png" alt="screenshot022" /></p>
<p><br /></p>
</li>
<li>Various shapes of Z chart</li>
</ul>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-023.png" alt="screenshot023" /></p>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-024.png" alt="screenshot024" /></p>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-025.png" alt="screenshot025" /></p>
<p><br /></p>
<ul>
<li>How to aggregate data for Z chart throug SQL</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">--- Z chart for sales in 2019</span>
<span class="k">WITH</span>
<span class="n">daily_purchase</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="c1">-- Extract year, month, date respectively</span>
<span class="c1">-- if PostgreSQL, Hive, SparkSQL, Redshift, use substring</span>
<span class="c1">-- if BigQuery, use substr</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">year</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span class="k">month</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">purchase_amount</span>
<span class="p">,</span> <span class="k">COUNT</span><span class="p">(</span><span class="n">order_id</span><span class="p">)</span> <span class="k">AS</span> <span class="n">orders</span>
<span class="k">FROM</span> <span class="n">purchase_log4</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="p">)</span>
<span class="p">,</span> <span class="n">monthly_purchase</span> <span class="k">AS</span> <span class="p">(</span>
<span class="c1">-- Monthly figure</span>
<span class="k">SELECT</span> <span class="nb">year</span>
<span class="p">,</span> <span class="k">month</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">amount</span>
<span class="k">FROM</span> <span class="n">daily_purchase</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="nb">year</span><span class="p">,</span> <span class="k">month</span>
<span class="p">)</span>
<span class="p">,</span> <span class="n">calc_index</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="nb">year</span>
<span class="p">,</span> <span class="k">month</span>
<span class="p">,</span> <span class="n">amount</span>
<span class="c1">-- cumulative total</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="k">CASE</span> <span class="k">WHEN</span> <span class="nb">year</span> <span class="o">=</span> <span class="s1">'2019'</span> <span class="k">THEN</span> <span class="n">amount</span> <span class="k">END</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="nb">year</span><span class="p">,</span> <span class="k">month</span> <span class="k">ROWS</span> <span class="n">UNBOUNDED</span> <span class="k">PRECEDING</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">agg_amount</span>
<span class="c1">-- Moving total</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="nb">year</span><span class="p">,</span> <span class="k">month</span> <span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="mi">11</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="k">CURRENT</span> <span class="k">ROW</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">year_avg_amount</span>
<span class="k">FROM</span> <span class="n">monthly_purchase</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="nb">year</span><span class="p">,</span> <span class="k">month</span>
<span class="p">)</span>
<span class="c1">-- Select data for 2019</span>
<span class="k">SELECT</span> <span class="n">concat</span><span class="p">(</span><span class="nb">year</span><span class="p">,</span> <span class="s1">'-'</span><span class="p">,</span> <span class="k">month</span><span class="p">)</span> <span class="k">AS</span> <span class="n">year_month</span>
<span class="p">,</span> <span class="n">amount</span>
<span class="p">,</span> <span class="n">agg_amount</span>
<span class="p">,</span> <span class="n">year_avg_amount</span>
<span class="k">FROM</span> <span class="n">calc_index</span>
<span class="k">WHERE</span> <span class="nb">year</span> <span class="o">=</span> <span class="s1">'2019'</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">year_month</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-026.png" alt="screenshot026" /></p>
<p><br /></p>
<h3 id="496-the-significant-point-for-analyzing-sales">4.9.6. The significant point for analyzing sales</h3>
<ul>
<li>You have to turn to data about surrounding factors like purchase count, a unit cost to understand the reason why there are changes on sales</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Aggregate data related with sales</span>
<span class="k">WITH</span>
<span class="n">daily_purchase</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="c1">-- Extract year, month, date respectively</span>
<span class="c1">-- if PostgreSQL, Hive, SparkSQL, Redshift, use substring</span>
<span class="c1">-- if BigQuery, use substr</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">year</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span class="k">month</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">purchase_amount</span>
<span class="p">,</span> <span class="k">COUNT</span><span class="p">(</span><span class="n">order_id</span><span class="p">)</span> <span class="k">AS</span> <span class="n">orders</span>
<span class="k">FROM</span> <span class="n">purchase_log4</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="p">)</span>
<span class="p">,</span> <span class="n">monthly_purchase</span> <span class="k">AS</span> <span class="p">(</span>
<span class="c1">-- Monthly figure</span>
<span class="k">SELECT</span> <span class="nb">year</span>
<span class="p">,</span> <span class="k">month</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">orders</span><span class="p">)</span> <span class="k">AS</span> <span class="n">orders</span>
<span class="p">,</span> <span class="k">AVG</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">avg_amount</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">purchase_amount</span><span class="p">)</span> <span class="k">AS</span> <span class="n">monthly</span>
<span class="k">FROM</span> <span class="n">daily_purchase</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="nb">year</span><span class="p">,</span> <span class="k">month</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="n">concat</span><span class="p">(</span><span class="nb">year</span><span class="p">,</span> <span class="s1">'-'</span><span class="p">,</span> <span class="k">month</span><span class="p">)</span> <span class="k">AS</span> <span class="n">year_month</span>
<span class="p">,</span> <span class="n">orders</span>
<span class="p">,</span> <span class="n">avg_amount</span>
<span class="p">,</span> <span class="n">monthly</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">monthly</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="nb">year</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">monthly</span>
<span class="k">ROWS</span> <span class="n">UNBOUNDED</span> <span class="k">preceding</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">agg_amount</span>
<span class="c1">-- sales amount 12 months ago</span>
<span class="p">,</span> <span class="n">LAG</span><span class="p">(</span><span class="n">monthly</span><span class="p">,</span> <span class="mi">12</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="nb">year</span><span class="p">,</span> <span class="k">month</span><span class="p">)</span>
<span class="c1">-- if SparkSQL</span>
<span class="c1">-- OVER(ORDER BY year, month</span>
<span class="c1">-- ROWS BETWEEN 12 PRECEDING AND 12 PRECEDING)</span>
<span class="k">AS</span> <span class="n">last_year</span>
<span class="c1">-- The rate compared to sales amount 12m ago</span>
<span class="p">,</span> <span class="mi">100</span><span class="p">.</span><span class="mi">0</span> <span class="o">*</span> <span class="n">monthly</span> <span class="o">/</span> <span class="n">LAG</span><span class="p">(</span><span class="n">monthly</span><span class="p">,</span> <span class="mi">12</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="nb">year</span><span class="p">,</span> <span class="k">month</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">rate</span>
<span class="k">FROM</span> <span class="n">monthly_purchase</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">year_month</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-06-bigdata-sql-sqlrecipeforanalysis-006-027.png" alt="screenshot027" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li>데이터 분석을 위한 SQL 레시피 - 한빛미디어</li>
<li><a href="https://www.monash.edu/business/marketing/marketing-dictionary/z/z-chart">Z chart - Monash University</a></li>
</ul>
Thu, 06 Feb 2020 00:00:00 +0000
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-006/
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-006/
bigdata
sql
analyze
data
tutorial
BigData
DataAnalysis
-
[Data Analysis] SQL Recipe for Data Analysis Tutorial #5 - Manipulating multiple tables
<h1 id="goal">Goal</h1>
<ul>
<li>Studying SQL for data analysis</li>
<li>Practicing chapter 3rd in the book</li>
<li>Studying SQL for Manipulating data</li>
</ul>
<p><br /></p>
<hr />
<h1 id="practice">Practice</h1>
<h2 id="book-for-studying">Book for studying</h2>
<table>
<thead>
<tr>
<th>Title</th>
<th>데이터 분석을 위한 SQL 레시피</th>
</tr>
</thead>
<tbody>
<tr>
<td>Author</td>
<td>Nagato Kasaki, Naoto Tamiya</td>
</tr>
<tr>
<td>Translator</td>
<td>윤인성</td>
</tr>
<tr>
<td>Publisher</td>
<td>한빛미디어</td>
</tr>
<tr>
<td>Chapter</td>
<td>3</td>
</tr>
<tr>
<td>Lesson</td>
<td>8</td>
</tr>
</tbody>
</table>
<p><br /></p>
<ul>
<li>I’m gonna study basic SQL syntax and functions for data analysis</li>
<li>I’m gonna study how to manipulate multiple tables</li>
<li>I’m gonna study about data-intensive and data-processing</li>
<li>I’m gonna try to load test data on PostgreSQL and execute queries in the book</li>
</ul>
<p><br /></p>
<h2 id="38-manipulating-multiple-tables">3.8. Manipulating multiple tables</h2>
<ul>
<li><a href="/assets/sql/sql_recipe_tutorial_005.sql">Download tutorial SQL file</a></li>
</ul>
<p><br /></p>
<h3 id="381-merge-several-tables-horizontally">3.8.1. Merge several tables horizontally</h3>
<h4 id="create-two-user-table">Create two user table</h4>
<ul>
<li>One of them is the table that stores information about users in application 1, while another table stores users in application 2</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="c1">-- DROP TABLE IF EXISTS app1_mst_users;</span>
<span class="c1">-- Create user in app1 table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">app1_mst_users</span> <span class="p">(</span>
<span class="n">user_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">name</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">email</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">app1_mst_users</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'U001'</span><span class="p">,</span> <span class="s1">'Dorbae'</span><span class="p">,</span> <span class="s1">'[email protected]'</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U002'</span><span class="p">,</span> <span class="s1">'Chang'</span><span class="p">,</span> <span class="s1">'[email protected]'</span><span class="p">)</span>
<span class="p">;</span>
<span class="c1">-- DROP TABLE IF EXISTS app2_mst_users;</span>
<span class="c1">-- Create user in app2 table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">app2_mst_users</span> <span class="p">(</span>
<span class="n">user_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">name</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">phone</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">app2_mst_users</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'U001'</span><span class="p">,</span> <span class="s1">'Seong'</span><span class="p">,</span> <span class="s1">'080-xxxx-xxxx'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U002'</span><span class="p">,</span> <span class="s1">'Bae'</span><span class="p">,</span> <span class="s1">'070-xxxx-xxxx'</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">app1_mst_users</span>
<span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">app2_mst_users</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-001.png" alt="screenshot001" /></p>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-002.png" alt="screenshot002" /></p>
<p><br /></p>
<h4 id="merge-tables">Merge tables</h4>
<ul>
<li>You can merge several table throug <strong>UNION ALL</strong></li>
<li><strong>UNION</strong> or <strong>UNION DISTINCT</strong> also merges multiple tables and in this case, it provides the same result. But, it spends more costs than <strong>UNION ALL</strong></li>
<li>I’m gonna add <em>app_name</em> column for indentifying the app</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Merge two tables</span>
<span class="k">SELECT</span> <span class="s1">'app1'</span> <span class="k">AS</span> <span class="n">app_name</span>
<span class="p">,</span> <span class="n">user_id</span>
<span class="p">,</span> <span class="n">name</span>
<span class="p">,</span> <span class="n">email</span>
<span class="k">FROM</span> <span class="n">app1_mst_users</span>
<span class="k">UNION</span> <span class="k">ALL</span>
<span class="k">SELECT</span> <span class="s1">'app1'</span> <span class="k">AS</span> <span class="n">app_name</span>
<span class="p">,</span> <span class="n">user_id</span>
<span class="p">,</span> <span class="n">name</span>
<span class="p">,</span> <span class="n">phone</span> <span class="c1">-- or NULL</span>
<span class="k">FROM</span> <span class="n">app2_mst_users</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-003.png" alt="screenshot003" /></p>
<p><br /></p>
<h3 id="382-merge-several-tables-vertically">3.8.2. Merge several tables vertically</h3>
<h4 id="create-three-tables">Create three tables</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS mst_categories;</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">mst_categories</span> <span class="p">(</span>
<span class="n">category_id</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">name</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">);</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">mst_categories</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s1">'dvd'</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">'cd'</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s1">'book'</span><span class="p">)</span>
<span class="p">;</span>
<span class="c1">-- DROP TABLE IF EXISTS category_sales;</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">category_sales</span> <span class="p">(</span>
<span class="n">category_id</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">sales</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">category_sales</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">850000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">500000</span><span class="p">)</span>
<span class="p">;</span>
<span class="c1">-- DROP TABLE IF EXISTS product_sale_ranking;</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">product_sale_ranking</span> <span class="p">(</span>
<span class="n">category_id</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">rank</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">product_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">sales</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">product_sale_ranking</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'D001'</span><span class="p">,</span> <span class="mi">50000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'D002'</span><span class="p">,</span> <span class="mi">20000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'D003'</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'C001'</span><span class="p">,</span> <span class="mi">30000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'C002'</span><span class="p">,</span> <span class="mi">20000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'C003'</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">mst_categories</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">category_sales</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">product_sale_ranking</span><span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-004.png" alt="screenshot004" /></p>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-005.png" alt="screenshot005" /></p>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-006.png" alt="screenshot006" /></p>
<p><br /></p>
<h4 id="merge-the-tables-through-join">Merge the tables through <strong>JOIN</strong></h4>
<ul>
<li>You might loose some data because there are not matched data</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Join tables</span>
<span class="k">SELECT</span> <span class="n">m</span><span class="p">.</span><span class="n">category_id</span>
<span class="p">,</span> <span class="n">m</span><span class="p">.</span><span class="n">name</span>
<span class="p">,</span> <span class="n">s</span><span class="p">.</span><span class="n">sales</span>
<span class="p">,</span> <span class="n">r</span><span class="p">.</span><span class="n">product_id</span> <span class="k">AS</span> <span class="n">sale_product</span>
<span class="k">FROM</span> <span class="n">mst_categories</span> <span class="k">AS</span> <span class="n">m</span>
<span class="k">JOIN</span> <span class="n">category_sales</span> <span class="k">AS</span> <span class="n">s</span>
<span class="k">ON</span> <span class="n">m</span><span class="p">.</span><span class="n">category_id</span> <span class="o">=</span> <span class="n">s</span><span class="p">.</span><span class="n">category_id</span>
<span class="k">JOIN</span> <span class="n">product_sale_ranking</span> <span class="k">AS</span> <span class="n">r</span>
<span class="k">ON</span> <span class="n">m</span><span class="p">.</span><span class="n">category_id</span> <span class="o">=</span> <span class="n">r</span><span class="p">.</span><span class="n">category_id</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-007.png" alt="screenshot007" /></p>
<p><br /></p>
<h4 id="merge-the-tables-through-left-join">Merge the tables through <strong>LEFT JOIN</strong></h4>
<ul>
<li>You can maintain the record count of <em>category_sales(basis table)</em></li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Join tables through LEFT JOIN</span>
<span class="k">SELECT</span> <span class="n">m</span><span class="p">.</span><span class="n">category_id</span>
<span class="p">,</span> <span class="n">m</span><span class="p">.</span><span class="n">name</span>
<span class="p">,</span> <span class="n">s</span><span class="p">.</span><span class="n">sales</span>
<span class="p">,</span> <span class="n">r</span><span class="p">.</span><span class="n">product_id</span> <span class="k">AS</span> <span class="n">sale_product</span>
<span class="k">FROM</span> <span class="n">mst_categories</span> <span class="k">AS</span> <span class="n">m</span>
<span class="k">LEFT</span> <span class="k">JOIN</span> <span class="n">category_sales</span> <span class="k">AS</span> <span class="n">s</span>
<span class="k">ON</span> <span class="n">m</span><span class="p">.</span><span class="n">category_id</span> <span class="o">=</span> <span class="n">s</span><span class="p">.</span><span class="n">category_id</span>
<span class="k">LEFT</span> <span class="k">JOIN</span> <span class="n">product_sale_ranking</span> <span class="k">AS</span> <span class="n">r</span>
<span class="k">ON</span> <span class="n">m</span><span class="p">.</span><span class="n">category_id</span> <span class="o">=</span> <span class="n">r</span><span class="p">.</span><span class="n">category_id</span>
<span class="k">AND</span> <span class="n">r</span><span class="p">.</span><span class="n">rank</span> <span class="o">=</span> <span class="mi">1</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-008.png" alt="screenshot008" /></p>
<p><br /></p>
<h4 id="merge-the-tables-through-correlated-subquery-without-join">Merge the tables through <strong>Correlated Subquery</strong> without <em>JOIN</em></h4>
<ul>
<li>It is possible to use Correlated Subquery when the Middleware supports it</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Merge tables through Correlated Subquery</span>
<span class="k">SELECT</span> <span class="n">m</span><span class="p">.</span><span class="n">category_id</span>
<span class="p">,</span> <span class="n">m</span><span class="p">.</span><span class="n">name</span>
<span class="c1">-- Calculate sales amount byt categories using Correlated Subquery</span>
<span class="p">,</span> <span class="p">(</span><span class="k">SELECT</span> <span class="n">s</span><span class="p">.</span><span class="n">sales</span>
<span class="k">FROM</span> <span class="n">category_sales</span> <span class="k">AS</span> <span class="n">s</span>
<span class="k">WHERE</span> <span class="n">m</span><span class="p">.</span><span class="n">category_id</span> <span class="o">=</span> <span class="n">s</span><span class="p">.</span><span class="n">category_id</span>
<span class="p">)</span> <span class="k">AS</span> <span class="n">sales</span>
<span class="c1">-- Best sales product by categories</span>
<span class="c1">-- Subquery has to return only one row</span>
<span class="p">,</span> <span class="p">(</span><span class="k">SELECT</span> <span class="n">r</span><span class="p">.</span><span class="n">product_id</span>
<span class="k">FROM</span> <span class="n">product_sale_ranking</span> <span class="k">AS</span> <span class="n">r</span>
<span class="k">WHERE</span> <span class="n">m</span><span class="p">.</span><span class="n">category_id</span> <span class="o">=</span> <span class="n">r</span><span class="p">.</span><span class="n">category_id</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">sales</span> <span class="k">DESC</span>
<span class="k">LIMIT</span> <span class="mi">1</span>
<span class="p">)</span> <span class="k">AS</span> <span class="n">top_sale_product</span>
<span class="k">FROM</span> <span class="n">mst_categories</span> <span class="k">AS</span> <span class="n">m</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-009.png" alt="screenshot009" /></p>
<p><br /></p>
<h3 id="383-convert-a-conditional-flag-into-0-or-1">3.8.3. Convert a conditional flag into 0 or 1</h3>
<h4 id="create-user-with-card-number-table-and-purchase-log-table">Create user with card number table and purchase log table</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS mst_users_with_card_number;</span>
<span class="c1">-- Create user with card number table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">mst_users_with_card_number</span> <span class="p">(</span>
<span class="n">user_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">card_number</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">mst_users_with_card_number</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'U001'</span><span class="p">,</span> <span class="s1">'1234-xxxx-xxxx-xxxx'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U002'</span><span class="p">,</span> <span class="k">NULL</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U003'</span><span class="p">,</span> <span class="s1">'5678-xxxx-xxxx-xxxx'</span><span class="p">)</span>
<span class="p">;</span>
<span class="c1">-- DROP TABLE IF EXISTS purchase_log;</span>
<span class="c1">-- Create purchase log table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">purchase_log2</span> <span class="p">(</span>
<span class="n">purchase_id</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">user_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">amount</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">stamp</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">);</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">purchase_log2</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="mi">10001</span><span class="p">,</span> <span class="s1">'U001'</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="s1">'2019-01-30 10:00:00'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">10002</span><span class="p">,</span> <span class="s1">'U001'</span><span class="p">,</span> <span class="mi">500</span><span class="p">,</span> <span class="s1">'2019-02-10 10:00:00'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">10003</span><span class="p">,</span> <span class="s1">'U001'</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="s1">'2019-02-12 10:00:00'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">10004</span><span class="p">,</span> <span class="s1">'U002'</span><span class="p">,</span> <span class="mi">800</span><span class="p">,</span> <span class="s1">'2019-03-01 10:00:00'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">10005</span><span class="p">,</span> <span class="s1">'U002'</span><span class="p">,</span> <span class="mi">400</span><span class="p">,</span> <span class="s1">'2019-03-02 10:00:00'</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">mst_users_with_card_number</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">purchase_log2</span><span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-010.png" alt="screenshot010" /></p>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-011.png" alt="screenshot011" /></p>
<p><br /></p>
<h4 id="convert-boolean-flag-about-purchase-or-not-into-01">Convert boolean flag about purchase or not into 0/1</h4>
<ul>
<li>You can maintain the same record count of <em>mst_users_with_card_number</em> by doing <strong>LEFT JOIN</strong> and <strong>GROUP BY</strong> <em>user_id</em></li>
<li>And, you can ocnvert a flag into 0/1 using <strong>CASE</strong> or <strong>SIGN</strong> function</li>
<li><strong>SIGN</strong> returns 0 if argument is 0 and returns 1 about a positive number argument and also returns -1 about a negative number argument</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Convert boolean flag about purchase or not into 0/1</span>
<span class="k">SELECT</span> <span class="n">m</span><span class="p">.</span><span class="n">user_id</span>
<span class="p">,</span> <span class="n">m</span><span class="p">.</span><span class="n">card_number</span>
<span class="p">,</span> <span class="k">COUNT</span><span class="p">(</span><span class="n">p</span><span class="p">.</span><span class="n">user_id</span><span class="p">)</span> <span class="k">AS</span> <span class="n">purchase_count</span>
<span class="c1">-- If a card number was registered, return 1 and return 0 about the opposite case</span>
<span class="p">,</span> <span class="k">CASE</span> <span class="k">WHEN</span> <span class="n">m</span><span class="p">.</span><span class="n">card_number</span> <span class="k">IS</span> <span class="k">NOT</span> <span class="k">NULL</span> <span class="k">THEN</span> <span class="mi">1</span>
<span class="k">ELSE</span> <span class="mi">0</span>
<span class="k">END</span> <span class="k">AS</span> <span class="n">has_case</span>
<span class="c1">-- If user has been ever purchased, return 1 and return 0 about the opposite case</span>
<span class="p">,</span> <span class="n">SIGN</span><span class="p">(</span><span class="k">COUNT</span><span class="p">(</span><span class="n">p</span><span class="p">.</span><span class="n">user_id</span><span class="p">))</span> <span class="k">AS</span> <span class="n">has_purchased</span>
<span class="k">FROM</span> <span class="n">mst_users_with_card_number</span> <span class="k">AS</span> <span class="n">m</span>
<span class="k">LEFT</span> <span class="k">JOIN</span> <span class="n">purchase_log2</span> <span class="k">AS</span> <span class="n">p</span>
<span class="k">ON</span> <span class="n">m</span><span class="p">.</span><span class="n">user_id</span> <span class="o">=</span> <span class="n">p</span><span class="p">.</span><span class="n">user_id</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">m</span><span class="p">.</span><span class="n">user_id</span><span class="p">,</span> <span class="n">m</span><span class="p">.</span><span class="n">card_number</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">m</span><span class="p">.</span><span class="n">user_id</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-012.png" alt="screenshot012" /></p>
<p><br /></p>
<h3 id="384-ctecommon-table-expression">3.8.4. CTE(Common Table Expression)</h3>
<ul>
<li>It has been introduced since SQL99</li>
<li>It enhances a readability of the code</li>
</ul>
<h4 id="create-table-and-insert-sample-data">Create table and insert sample data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">--DROP TABLE IF EXISTS product_sales;</span>
<span class="c1">-- Create product slaes table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">product_sales</span> <span class="p">(</span>
<span class="n">category_name</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">product_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">sales</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">product_sales</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'dvd'</span> <span class="p">,</span> <span class="s1">'D001'</span><span class="p">,</span> <span class="mi">50000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'dvd'</span> <span class="p">,</span> <span class="s1">'D002'</span><span class="p">,</span> <span class="mi">20000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'dvd'</span> <span class="p">,</span> <span class="s1">'D003'</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'cd'</span> <span class="p">,</span> <span class="s1">'C001'</span><span class="p">,</span> <span class="mi">30000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'cd'</span> <span class="p">,</span> <span class="s1">'C002'</span><span class="p">,</span> <span class="mi">20000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'cd'</span> <span class="p">,</span> <span class="s1">'C003'</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'book'</span><span class="p">,</span> <span class="s1">'B001'</span><span class="p">,</span> <span class="mi">20000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'book'</span><span class="p">,</span> <span class="s1">'B002'</span><span class="p">,</span> <span class="mi">15000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'book'</span><span class="p">,</span> <span class="s1">'B003'</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'book'</span><span class="p">,</span> <span class="s1">'B004'</span><span class="p">,</span> <span class="mi">5000</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="n">product_sales</span><span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-013.png" alt="screenshot013" /></p>
<p><br /></p>
<h4 id="set-name-to-the-table-added-the-ranks-by-categories">Set name to the table added the ranks by categories</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Set name to the table added the ranks by categories</span>
<span class="k">WITH</span>
<span class="n">product_sale_ranking</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="n">category_name</span>
<span class="p">,</span> <span class="n">product_id</span>
<span class="p">,</span> <span class="n">sales</span>
<span class="p">,</span> <span class="n">ROW_NUMBER</span><span class="p">()</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">category_name</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="n">sales</span> <span class="k">DESC</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">rank</span>
<span class="k">FROM</span> <span class="n">product_sales</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">product_sale_ranking</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-014.png" alt="screenshot014" /></p>
<p><br /></p>
<h4 id="extract-the-unique-rankings-from-the-ranking-list-by-categories">Extract the unique rankings from the ranking list by categories</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Extract the unique rankings from the ranking list by categories</span>
<span class="k">WITH</span>
<span class="n">product_sale_ranking</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="n">category_name</span>
<span class="p">,</span> <span class="n">product_id</span>
<span class="p">,</span> <span class="n">sales</span>
<span class="p">,</span> <span class="n">ROW_NUMBER</span><span class="p">()</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">category_name</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="n">sales</span> <span class="k">DESC</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">rank</span>
<span class="k">FROM</span> <span class="n">product_sales</span>
<span class="p">)</span>
<span class="p">,</span> <span class="n">mst_rank</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="k">DISTINCT</span> <span class="n">rank</span>
<span class="k">FROM</span> <span class="n">product_sale_ranking</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">mst_rank</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-015.png" alt="screenshot015" /></p>
<p><br /></p>
<h4 id="print-the-ranking-by-categories">Print the ranking by categories</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Print the ranking by categories</span>
<span class="k">WITH</span>
<span class="n">product_sale_ranking</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="n">category_name</span>
<span class="p">,</span> <span class="n">product_id</span>
<span class="p">,</span> <span class="n">sales</span>
<span class="p">,</span> <span class="n">ROW_NUMBER</span><span class="p">()</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">category_name</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="n">sales</span> <span class="k">DESC</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">rank</span>
<span class="k">FROM</span> <span class="n">product_sales</span>
<span class="p">)</span>
<span class="p">,</span> <span class="n">mst_rank</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="k">DISTINCT</span> <span class="n">rank</span>
<span class="k">FROM</span> <span class="n">product_sale_ranking</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="n">m</span><span class="p">.</span><span class="n">rank</span>
<span class="p">,</span> <span class="n">r1</span><span class="p">.</span><span class="n">product_id</span> <span class="k">AS</span> <span class="n">vd</span>
<span class="p">,</span> <span class="n">r1</span><span class="p">.</span><span class="n">sales</span> <span class="k">AS</span> <span class="n">dvd_sales</span>
<span class="p">,</span> <span class="n">r2</span><span class="p">.</span><span class="n">product_id</span> <span class="k">AS</span> <span class="n">cd</span>
<span class="p">,</span> <span class="n">r3</span><span class="p">.</span><span class="n">product_id</span> <span class="k">AS</span> <span class="n">book</span>
<span class="p">,</span> <span class="n">r3</span><span class="p">.</span><span class="n">sales</span> <span class="k">AS</span> <span class="n">book_sales</span>
<span class="k">FROM</span> <span class="n">mst_rank</span> <span class="k">AS</span> <span class="n">m</span>
<span class="k">LEFT</span> <span class="k">JOIN</span> <span class="n">product_sale_ranking</span> <span class="k">AS</span> <span class="n">r1</span>
<span class="k">ON</span> <span class="n">m</span><span class="p">.</span><span class="n">rank</span> <span class="o">=</span> <span class="n">r1</span><span class="p">.</span><span class="n">rank</span>
<span class="k">AND</span> <span class="n">r1</span><span class="p">.</span><span class="n">category_name</span> <span class="o">=</span> <span class="s1">'dvd'</span>
<span class="k">LEFT</span> <span class="k">JOIN</span> <span class="n">product_sale_ranking</span> <span class="k">AS</span> <span class="n">r2</span>
<span class="k">ON</span> <span class="n">m</span><span class="p">.</span><span class="n">rank</span> <span class="o">=</span> <span class="n">r2</span><span class="p">.</span><span class="n">rank</span>
<span class="k">AND</span> <span class="n">r2</span><span class="p">.</span><span class="n">category_name</span> <span class="o">=</span> <span class="s1">'cd'</span>
<span class="k">LEFT</span> <span class="k">JOIN</span> <span class="n">product_sale_ranking</span> <span class="k">AS</span> <span class="n">r3</span>
<span class="k">ON</span> <span class="n">m</span><span class="p">.</span><span class="n">rank</span> <span class="o">=</span> <span class="n">r3</span><span class="p">.</span><span class="n">rank</span>
<span class="k">AND</span> <span class="n">r3</span><span class="p">.</span><span class="n">category_name</span> <span class="o">=</span> <span class="s1">'book'</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">m</span><span class="p">.</span><span class="n">rank</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-016.png" alt="screenshot016" /></p>
<p><br /></p>
<h3 id="385-make-a-resemblance-table">3.8.5. Make a resemblance table</h3>
<ul>
<li>It can enhance the productivity performance for test</li>
</ul>
<h4 id="make-a-resemblance-table-with-specific-records">Make a resemblance table with specific records</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Make a resemblance table with specific records</span>
<span class="k">WITH</span>
<span class="n">mst_devices</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="mi">1</span> <span class="k">AS</span> <span class="n">device_id</span><span class="p">,</span> <span class="s1">'PC'</span> <span class="k">AS</span> <span class="n">device_name</span>
<span class="k">UNION</span> <span class="k">ALL</span>
<span class="k">SELECT</span> <span class="mi">2</span> <span class="k">AS</span> <span class="n">device_id</span><span class="p">,</span> <span class="s1">'SP'</span> <span class="k">AS</span> <span class="n">device_name</span>
<span class="k">UNION</span> <span class="k">ALL</span>
<span class="k">SELECT</span> <span class="mi">3</span> <span class="k">AS</span> <span class="n">device_id</span><span class="p">,</span> <span class="s1">'Application'</span> <span class="k">AS</span> <span class="n">device_name</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">mst_devices</span>
<span class="p">;</span>
</code></pre></div></div>
<blockquote>
<p>UNION ALL might drop the performance whne there are a lot of records</p>
</blockquote>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-017.png" alt="screenshot017" /></p>
<p><br /></p>
<h4 id="make-a-resemblance-table-with-value-clause">Make a resemblance table with <strong>VALUE</strong> clause</h4>
<ul>
<li>In PostgreSQL, it is possible to make a resmeblance table using <strong>VALUES</strong></li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Make a resemblance table with VALUE clause</span>
<span class="k">WITH</span>
<span class="n">mst_devices</span><span class="p">(</span><span class="n">device_id</span><span class="p">,</span> <span class="n">device_name</span><span class="p">)</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s1">'PC'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">'SP'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s1">'Application'</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">mst_devices</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-018.png" alt="screenshot018" /></p>
<p><br /></p>
<h4 id="make-a-resemblance-table-through-structural-table-function">Make a resemblance table through structural table function</h4>
<ul>
<li>You can make a dynamic table with a structural function when it is impossible to use VALUE clause</li>
<li>For example, you can define a table through <strong>array</strong> function and <strong>explode</strong> function in Hive</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Make a resemblance table through array, explode in Hive</span>
<span class="k">WITH</span>
<span class="n">mst_devces</span> <span class="k">AS</span> <span class="p">(</span>
<span class="c1">-- Convert a array into columns</span>
<span class="k">SELECT</span> <span class="n">d</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">AS</span> <span class="n">device_id</span>
<span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">AS</span> <span class="n">device_name</span>
<span class="k">FROM</span> <span class="p">(</span><span class="k">SELECT</span> <span class="n">explode</span> <span class="p">(</span>
<span class="n">array</span><span class="p">(</span>
<span class="n">array</span><span class="p">(</span><span class="s1">'1'</span><span class="p">,</span> <span class="s1">'PC'</span><span class="p">)</span>
<span class="p">,</span> <span class="n">array</span><span class="p">(</span><span class="s1">'2'</span><span class="p">,</span> <span class="s1">'SP'</span><span class="p">)</span>
<span class="p">,</span> <span class="n">array</span><span class="p">(</span><span class="s1">'3'</span><span class="p">,</span> <span class="s1">'Application'</span><span class="p">)</span>
<span class="p">)</span>
<span class="p">)</span> <span class="n">d</span>
<span class="p">)</span> <span class="k">AS</span> <span class="n">t</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">mst_devices</span>
<span class="p">;</span>
</code></pre></div></div>
<p><br /></p>
<h4 id="use-map-data-type-intead-of-array-data-type">Use map data type intead of array data type</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Use map data type intead of array data type</span>
<span class="k">WITH</span>
<span class="n">mst_devces</span> <span class="k">AS</span> <span class="p">(</span>
<span class="k">SELECT</span> <span class="n">d</span><span class="p">[</span><span class="s1">'device_id'</span><span class="p">]</span> <span class="k">AS</span> <span class="n">device_id</span>
<span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="s1">'device_name'</span><span class="p">]</span> <span class="k">AS</span> <span class="n">device_name</span>
<span class="k">FROM</span> <span class="p">(</span><span class="k">SELECT</span> <span class="n">explode</span> <span class="p">(</span>
<span class="n">array</span><span class="p">(</span>
<span class="k">map</span><span class="p">(</span><span class="s1">'device_id'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="s1">'device_name'</span><span class="p">,</span> <span class="s1">'PC'</span><span class="p">)</span>
<span class="p">,</span> <span class="k">map</span><span class="p">(</span><span class="s1">'device_id'</span><span class="p">,</span> <span class="s1">'2'</span><span class="p">,</span> <span class="s1">'device_name'</span><span class="p">,</span> <span class="s1">'SP'</span><span class="p">)</span>
<span class="p">,</span> <span class="k">map</span><span class="p">(</span><span class="s1">'device_id'</span><span class="p">,</span> <span class="s1">'3'</span><span class="p">,</span> <span class="s1">'device_name'</span><span class="p">,</span> <span class="s1">'Application'</span><span class="p">)</span>
<span class="p">)</span>
<span class="p">)</span> <span class="n">d</span>
<span class="p">)</span> <span class="k">AS</span> <span class="n">t</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">mst_devices</span>
<span class="p">;</span>
</code></pre></div></div>
<p><br /></p>
<h4 id="the-function-making-sequence-numbers">The function making sequence numbers</h4>
<ul>
<li>Some middleware support the function whixh makes sequence numbers</li>
<li>PostgreSQL supports <strong>generate_series</strong> function and BigQuery supports <strong>generate_array</strong> function</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Make a resemblance table with sequence numbers</span>
<span class="k">WITH</span>
<span class="n">series</span> <span class="k">AS</span> <span class="p">(</span>
<span class="c1">-- Make from 1 to 5</span>
<span class="k">SELECT</span> <span class="n">generate_series</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span> <span class="k">AS</span> <span class="n">idx</span>
<span class="c1">-- if BigQuery</span>
<span class="c1">-- SELECT idx FROM unnst(generate_array(1, 5)) AS idx</span>
<span class="p">)</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">series</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/02/2020-02-05-bigdata-sql-sqlrecipeforanalysis-005-019.png" alt="screenshot019" /></p>
<p><br /></p>
<h4 id="make-a-sequence-numbers-using-repeat-funxtion">Make a sequence numbers using repeat funxtion</h4>
<ul>
<li>Hive and SparkSQL don’t support the function like <em>generate_series</em></li>
<li>Nevertheless, you cna make sequence numbers using <strong>repeat</strong> and <strong>explode</strong> functions</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Make a resemblance table with sequence numbers through repeat</span>
<span class="k">SELECT</span> <span class="n">ROW_NUMBER</span><span class="p">()</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">x</span><span class="p">)</span> <span class="k">AS</span> <span class="n">idx</span>
<span class="k">FROM</span>
<span class="c1">-- Make an array through repeat and split</span>
<span class="c1">-- After that, spread it through explode</span>
<span class="p">(</span><span class="k">SELECT</span> <span class="n">explode</span><span class="p">(</span><span class="n">split</span><span class="p">(</span><span class="n">repeat</span><span class="p">(</span><span class="s1">'x'</span><span class="p">,</span> <span class="mi">5</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span> <span class="s1">'x'</span><span class="p">))</span> <span class="k">AS</span> <span class="n">x</span><span class="p">)</span> <span class="k">AS</span> <span class="n">t</span>
<span class="p">;</span>
</code></pre></div></div>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li>데이터 분석을 위한 SQL 레시피 - 한빛미디어</li>
</ul>
Wed, 05 Feb 2020 00:00:00 +0000
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-005/
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-005/
bigdata
sql
analyze
data
tutorial
BigData
DataAnalysis
-
[Data Analysis] SQL Recipe for Data Analysis Tutorial #4 - Manipulating a single table
<h1 id="goal">Goal</h1>
<ul>
<li>Studying SQL for data analysis</li>
<li>Practicing chapter 3rd in the book</li>
<li>Studying SQL for Manipulating data</li>
</ul>
<p><br /></p>
<hr />
<h1 id="practice">Practice</h1>
<h2 id="book-for-studying">Book for studying</h2>
<table>
<thead>
<tr>
<th>Title</th>
<th>데이터 분석을 위한 SQL 레시피</th>
</tr>
</thead>
<tbody>
<tr>
<td>Author</td>
<td>Nagato Kasaki, Naoto Tamiya</td>
</tr>
<tr>
<td>Translator</td>
<td>윤인성</td>
</tr>
<tr>
<td>Publisher</td>
<td>한빛미디어</td>
</tr>
<tr>
<td>Chapter</td>
<td>3</td>
</tr>
<tr>
<td>Lesson</td>
<td>7</td>
</tr>
</tbody>
</table>
<p><br /></p>
<ul>
<li>I’m gonna study basic SQL syntax and functions for data analysis</li>
<li>I’m gonna study how to manipulate a single table</li>
<li>I’m gonna study about data-intensive and data-processing</li>
<li>I’m gonna try to load test data on PostgreSQL and execute queries in the book</li>
</ul>
<p><br /></p>
<h2 id="37-manipulating-a-singlie-table">3.7. Manipulating a singlie table</h2>
<ul>
<li>Data-intensive
<ul>
<li>SQL supports a lot of functions for data-intensive</li>
<li>Especially, SQL:2003 standard support Window functions which performs a calculation across a set of table rows that are somehow related to the current row</li>
</ul>
</li>
<li>Data-processing
<ul>
<li>Sometimes, you need to convert a table as the form that you want because it is useful in an aggregation</li>
</ul>
</li>
</ul>
<p><br /></p>
<ul>
<li><a href="/assets/sql/sql_recipe_tutorial_004.sql">Download tutorial SQL file</a></li>
</ul>
<p><br /></p>
<h3 id="371-make-groups">3.7.1. Make groups</h3>
<ul>
<li>Data-intensive means that making one value from multiple records like <strong>COUNT</strong>(returns total record count), <strong>SUM</strong>(returns the sum of all records)</li>
</ul>
<h4 id="create-table-and-insert-sample-data">Create table and insert sample data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">--DROP TABLE IF EXISTS review;</span>
<span class="c1">-- Create review table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">review</span> <span class="p">(</span>
<span class="n">user_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">product_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">score</span> <span class="nb">numeric</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">review</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'U001'</span><span class="p">,</span> <span class="s1">'A001'</span><span class="p">,</span> <span class="mi">4</span><span class="p">.</span><span class="mi">0</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U001'</span><span class="p">,</span> <span class="s1">'A002'</span><span class="p">,</span> <span class="mi">5</span><span class="p">.</span><span class="mi">0</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U001'</span><span class="p">,</span> <span class="s1">'A003'</span><span class="p">,</span> <span class="mi">5</span><span class="p">.</span><span class="mi">0</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U002'</span><span class="p">,</span> <span class="s1">'A001'</span><span class="p">,</span> <span class="mi">3</span><span class="p">.</span><span class="mi">0</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U002'</span><span class="p">,</span> <span class="s1">'A002'</span><span class="p">,</span> <span class="mi">3</span><span class="p">.</span><span class="mi">0</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U002'</span><span class="p">,</span> <span class="s1">'A003'</span><span class="p">,</span> <span class="mi">4</span><span class="p">.</span><span class="mi">0</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U003'</span><span class="p">,</span> <span class="s1">'A001'</span><span class="p">,</span> <span class="mi">5</span><span class="p">.</span><span class="mi">0</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U003'</span><span class="p">,</span> <span class="s1">'A002'</span><span class="p">,</span> <span class="mi">4</span><span class="p">.</span><span class="mi">0</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U003'</span><span class="p">,</span> <span class="s1">'A003'</span><span class="p">,</span> <span class="mi">4</span><span class="p">.</span><span class="mi">0</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">review</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h4 id="calculate-several-feature-values-from-all-records">Calculate several feature values from all records</h4>
<p>| Function | Description |
| — | — |
| DISTINCT | Removes the duplication |
| SUM | Returns the sum |
| AVG | Returns the average |
| MAX | Returns the maximum value |
| MIN | Returns the minimum value |</p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate several feature values from all records</span>
<span class="k">SELECT</span> <span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="k">AS</span> <span class="n">total_count</span>
<span class="p">,</span> <span class="k">COUNT</span><span class="p">(</span><span class="k">DISTINCT</span> <span class="n">user_id</span><span class="p">)</span> <span class="k">AS</span> <span class="n">user_count</span>
<span class="p">,</span> <span class="k">COUNT</span><span class="p">(</span><span class="k">DISTINCT</span> <span class="n">product_id</span><span class="p">)</span> <span class="k">AS</span> <span class="n">product_count</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">score</span><span class="p">)</span> <span class="k">AS</span> <span class="k">sum</span>
<span class="p">,</span> <span class="k">AVG</span><span class="p">(</span><span class="n">score</span><span class="p">)</span> <span class="k">AS</span> <span class="k">avg</span>
<span class="p">,</span> <span class="k">MAX</span><span class="p">(</span><span class="n">score</span><span class="p">)</span> <span class="k">AS</span> <span class="k">max</span>
<span class="p">,</span> <span class="k">MIN</span><span class="p">(</span><span class="n">score</span><span class="p">)</span> <span class="k">AS</span> <span class="k">min</span>
<span class="k">FROM</span> <span class="n">review</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-002.png" alt="screenshot002" /></p>
<p><br /></p>
<h4 id="calculate-serveral-feature-values-from-groups-repectively">Calculate serveral feature values from groups repectively</h4>
<ul>
<li><strong>GROUP BY</strong> clause does intensivly by the key</li>
<li>I’m gonna make groups by user_id</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate serveral feature values from groups repectively</span>
<span class="k">SELECT</span> <span class="n">user_id</span>
<span class="p">,</span> <span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="k">AS</span> <span class="n">total_count</span>
<span class="p">,</span> <span class="k">COUNT</span><span class="p">(</span><span class="k">DISTINCT</span> <span class="n">product_id</span><span class="p">)</span> <span class="k">AS</span> <span class="n">product_count</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">score</span><span class="p">)</span> <span class="k">AS</span> <span class="k">sum</span>
<span class="p">,</span> <span class="k">AVG</span><span class="p">(</span><span class="n">score</span><span class="p">)</span> <span class="k">AS</span> <span class="k">avg</span>
<span class="p">,</span> <span class="k">MAX</span><span class="p">(</span><span class="n">score</span><span class="p">)</span> <span class="k">AS</span> <span class="k">max</span>
<span class="p">,</span> <span class="k">MIN</span><span class="p">(</span><span class="n">score</span><span class="p">)</span> <span class="k">AS</span> <span class="k">min</span>
<span class="k">FROM</span> <span class="n">review</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">user_id</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-003.png" alt="screenshot003" /></p>
<p><br /></p>
<h4 id="handle-the-value-that-is-applied-data-intensive-function-and-the-one-that-is-not-applied-it-simultaneously">Handle the value that is applied data-intensive function and the one that is not applied it simultaneously</h4>
<ul>
<li>I’ll calculate the difference between user’s private score(score) and the average score by user(user_avg_score)</li>
<li>**OVER(PARTITION BY <column_name>)** : group by column_name</column_name></li>
<li><strong>OVER()</strong> : about all records in a table</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate user's private score(score) and the average score by user(user_avg_score)</span>
<span class="k">SELECT</span> <span class="n">user_id</span>
<span class="p">,</span> <span class="n">product_id</span>
<span class="c1">-- User's private score</span>
<span class="p">,</span> <span class="n">score</span>
<span class="c1">-- The total average score </span>
<span class="p">,</span> <span class="k">AVG</span><span class="p">(</span><span class="n">score</span><span class="p">)</span> <span class="n">OVER</span><span class="p">()</span> <span class="k">AS</span> <span class="n">avg_score</span>
<span class="c1">-- User's average score</span>
<span class="p">,</span> <span class="k">AVG</span><span class="p">(</span><span class="n">score</span><span class="p">)</span> <span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">user_id</span><span class="p">)</span> <span class="k">AS</span> <span class="n">user_avg_score</span>
<span class="c1">-- The differnce</span>
<span class="p">,</span> <span class="n">score</span> <span class="o">-</span> <span class="k">AVG</span><span class="p">(</span><span class="n">score</span><span class="p">)</span> <span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">user_id</span><span class="p">)</span> <span class="k">AS</span> <span class="n">user_avg_score_diff</span>
<span class="k">FROM</span> <span class="n">review</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-004.png" alt="screenshot004" /></p>
<p><br /></p>
<h4 id="create-popular-product-table-and-insert-sample-data">Create popular product table and insert sample data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS popular_products;</span>
<span class="c1">-- Create popular product table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">popular_products</span> <span class="p">(</span>
<span class="n">product_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">category</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">score</span> <span class="nb">numeric</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">popular_products</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'A001'</span><span class="p">,</span> <span class="s1">'action'</span><span class="p">,</span> <span class="mi">94</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'A002'</span><span class="p">,</span> <span class="s1">'action'</span><span class="p">,</span> <span class="mi">81</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'A003'</span><span class="p">,</span> <span class="s1">'action'</span><span class="p">,</span> <span class="mi">78</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'A004'</span><span class="p">,</span> <span class="s1">'action'</span><span class="p">,</span> <span class="mi">64</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'D001'</span><span class="p">,</span> <span class="s1">'drama'</span> <span class="p">,</span> <span class="mi">90</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'D002'</span><span class="p">,</span> <span class="s1">'drama'</span> <span class="p">,</span> <span class="mi">82</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'D003'</span><span class="p">,</span> <span class="s1">'drama'</span> <span class="p">,</span> <span class="mi">78</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'D004'</span><span class="p">,</span> <span class="s1">'drama'</span> <span class="p">,</span> <span class="mi">58</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">popular_products</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-005.png" alt="screenshot005" /></p>
<p><br /></p>
<h4 id="ordering-in-a-group">Ordering in a group</h4>
<ul>
<li>You can order records through <strong>ORDER BY</strong></li>
<li>There are several functions to return a sequent order</li>
</ul>
<table>
<thead>
<tr>
<th>Function</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ROW_NUMBER</td>
<td>Returns a unique sequence number</td>
</tr>
<tr>
<td>RANK</td>
<td>Returns the rank number in a group and skips the number if there are same rank values <br /> eg. 1, 2, 2, 4, 5</td>
</tr>
<tr>
<td>DENSE_RANK</td>
<td>Returns the rank number in a group and deosn’t skip the number if there are same rank values <br /> eg. 1, 2, 2, 3, 4</td>
</tr>
</tbody>
</table>
<ul>
<li>And also, there are functions that return the previous or next record</li>
</ul>
<table>
<thead>
<tr>
<th>Function</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>LAG(column_name)</td>
<td>Returns the previous record in a group</td>
</tr>
<tr>
<td>LAG(column_name, n)</td>
<td>Returns the previous Nth record in a group</td>
</tr>
<tr>
<td>LEAD(column_name)</td>
<td>Returns the next record in a group</td>
</tr>
<tr>
<td>LEAD(column_name, n)</td>
<td>Returns the next Nth record in a group</td>
</tr>
</tbody>
</table>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Ordering in a table</span>
<span class="k">SELECT</span> <span class="n">product_id</span>
<span class="p">,</span> <span class="n">score</span>
<span class="c1">-- Unique rank by score</span>
<span class="p">,</span> <span class="n">ROW_NUMBER</span><span class="p">()</span> <span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span> <span class="k">AS</span> <span class="n">rownum</span>
<span class="c1">-- Skip duplicate rank</span>
<span class="p">,</span> <span class="n">RANK</span><span class="p">()</span> <span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span> <span class="k">AS</span> <span class="n">rank</span>
<span class="c1">-- Don't skip duplicate rank</span>
<span class="p">,</span> <span class="n">DENSE_RANK</span><span class="p">()</span> <span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span> <span class="k">AS</span> <span class="n">dense_rank</span>
<span class="c1">-- Previous record</span>
<span class="p">,</span> <span class="n">LAG</span><span class="p">(</span><span class="n">product_id</span><span class="p">)</span> <span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span> <span class="k">AS</span> <span class="n">lag1</span>
<span class="c1">-- Previous 2nd record</span>
<span class="p">,</span> <span class="n">LAG</span><span class="p">(</span><span class="n">product_id</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span> <span class="k">AS</span> <span class="n">lag2</span>
<span class="c1">-- Next record</span>
<span class="p">,</span> <span class="n">LEAD</span><span class="p">(</span><span class="n">product_id</span><span class="p">)</span> <span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span> <span class="k">AS</span> <span class="n">lead1</span>
<span class="c1">-- Next 2nd record</span>
<span class="p">,</span> <span class="n">LEAD</span><span class="p">(</span><span class="n">product_id</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span> <span class="k">AS</span> <span class="n">lead2</span>
<span class="k">FROM</span> <span class="n">popular_products</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">rownum</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-006.png" alt="screenshot006" /></p>
<p><br /></p>
<h4 id="combine-ordering-and-intensive-functions">Combine ordering and intensive functions</h4>
<ul>
<li>There are functions that return frst or last value in a window group like <strong>FIRST_VALUE</strong>, <strong>LAST_VALUE</strong></li>
<li>And you can set the range of a window</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Combine ordering and intensive functions</span>
<span class="k">SELECT</span> <span class="n">product_id</span>
<span class="p">,</span> <span class="n">score</span>
<span class="p">,</span> <span class="n">ROW_NUMBER</span><span class="p">()</span> <span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">rownum</span>
<span class="c1">-- Cumulative score from the score of a high rank to current in a window</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">score</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span>
<span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="n">UNBOUNDED</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="k">CURRENT</span> <span class="k">ROW</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">cum_score</span>
<span class="c1">-- Average score between previous record, current, and next record</span>
<span class="p">,</span> <span class="k">AVG</span><span class="p">(</span><span class="n">score</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span>
<span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="mi">1</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="mi">1</span> <span class="k">FOLLOWING</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">local_avg</span>
<span class="c1">-- Product_id of top ranked record</span>
<span class="p">,</span> <span class="n">FIRST_VALUE</span><span class="p">(</span><span class="n">product_id</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span>
<span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="n">UNBOUNDED</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="n">UNBOUNDED</span> <span class="k">FOLLOWING</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">first_value</span>
<span class="c1">-- Product_id of bottom ranked record</span>
<span class="p">,</span> <span class="n">LAST_VALUE</span><span class="p">(</span><span class="n">product_id</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span>
<span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="n">UNBOUNDED</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="n">UNBOUNDED</span> <span class="k">FOLLOWING</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">first_value</span>
<span class="k">FROM</span> <span class="n">popular_products</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">rownum</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-007.png" alt="screenshot007" /></p>
<p><br /></p>
<h4 id="define-a-window-frame">Define a window frame</h4>
<ul>
<li>Define a relative frame based on current record</li>
<li>‘<strong>ROWS BETWEEN</strong> start <strong>AND</strong> end’ is the basic clause</li>
<li>You can use <strong>CURRENT_ROW</strong>(current row), <strong>n PRECEDING</strong>(n previous row), <strong>n FOLLOWING</strong>(n next row), <strong>UNBOUNDED PROCEDING</strong>(all previous rows), <strong>UNBOUNDED FOLLOWING</strong>(all next rows) keyword in start or end</li>
<li>If you don’t define a window frame, the ranges of default frame are whole rows without ORDER BY or from the first record to current record with ORDER BY</li>
<li>PostgresSQL supports <strong>array_agg(column_name)</strong> keyword and Hive, SparkSQL support <strong>collect_list(column_name)</strong> for data-intensive
<blockquote>
<p>Redshift supports <strong>listagg</strong> such as array_agg and collect_list. However, it is unable to used with a window frame</p>
</blockquote>
</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Integrate product_id by window frames</span>
<span class="k">SELECT</span> <span class="n">product_id</span>
<span class="p">,</span> <span class="n">ROW_NUMBER</span><span class="p">()</span> <span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">rownum</span>
<span class="c1">-- All records</span>
<span class="p">,</span> <span class="n">array_agg</span><span class="p">(</span><span class="n">product_id</span><span class="p">)</span> <span class="c1">-- collect_list(product_id)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span>
<span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="n">UNBOUNDED</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="n">UNBOUNDED</span> <span class="k">FOLLOWING</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">whole_agg</span>
<span class="c1">-- From the first record to current record</span>
<span class="p">,</span> <span class="n">array_agg</span><span class="p">(</span><span class="n">product_id</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span>
<span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="n">UNBOUNDED</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="k">CURRENT</span> <span class="k">ROW</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">cum_agg</span>
<span class="c1">-- From previous record to next record</span>
<span class="p">,</span> <span class="n">array_agg</span><span class="p">(</span><span class="n">product_id</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span>
<span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="mi">1</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="mi">1</span> <span class="k">FOLLOWING</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">local_agg</span>
<span class="k">FROM</span> <span class="n">popular_products</span>
<span class="k">WHERE</span> <span class="n">category</span> <span class="o">=</span> <span class="s1">'action'</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">rownum</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-008.png" alt="screenshot008" /></p>
<p><br /></p>
<h4 id="combine-partition-by-and-order-by">Combine PARTITION BY and ORDER BY</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Combine PARTITION BY and ORDER BY</span>
<span class="k">SELECT</span> <span class="n">category</span>
<span class="p">,</span> <span class="n">product_id</span>
<span class="p">,</span> <span class="n">score</span>
<span class="c1">-- Unique rank by category</span>
<span class="p">,</span> <span class="n">ROW_NUMBER</span><span class="p">()</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">category</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">rownum</span>
<span class="c1">-- Rank with duplication by category</span>
<span class="p">,</span> <span class="n">RANK</span><span class="p">()</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">category</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">rank</span>
<span class="c1">-- Rank with duplication and skip duplicate rank</span>
<span class="p">,</span> <span class="n">DENSE_RANK</span><span class="p">()</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">category</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">dense_rank</span>
<span class="k">FROM</span> <span class="n">popular_products</span> <span class="n">pp</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">category</span><span class="p">,</span> <span class="n">rownum</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-009.png" alt="screenshot009" /></p>
<p><br /></p>
<h4 id="extract-top-n-by-category">Extract top n by category</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Extract top 2 products by category</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span>
<span class="p">(</span><span class="k">SELECT</span> <span class="n">category</span>
<span class="p">,</span> <span class="n">product_id</span>
<span class="p">,</span> <span class="n">score</span>
<span class="p">,</span> <span class="n">ROW_NUMBER</span><span class="p">()</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">category</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">rank</span>
<span class="k">FROM</span> <span class="n">popular_products</span> <span class="n">pp</span>
<span class="p">)</span> <span class="k">AS</span> <span class="n">popular_products_with_rank</span>
<span class="k">WHERE</span> <span class="n">rank</span> <span class="o"><=</span> <span class="mi">2</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">category</span><span class="p">,</span> <span class="n">rank</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-010.png" alt="screenshot010" /></p>
<p><br /></p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Extrat top ranked product by category</span>
<span class="k">SELECT</span> <span class="k">DISTINCT</span> <span class="n">category</span>
<span class="c1">-- the top ranked product_id</span>
<span class="p">,</span> <span class="n">FIRST_VALUE</span><span class="p">(</span><span class="n">product_id</span><span class="p">)</span>
<span class="n">OVER</span><span class="p">(</span><span class="k">PARTITION</span> <span class="k">BY</span> <span class="n">category</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="n">score</span> <span class="k">DESC</span>
<span class="k">ROWS</span> <span class="k">BETWEEN</span> <span class="n">UNBOUNDED</span> <span class="k">PRECEDING</span> <span class="k">AND</span> <span class="n">UNBOUNDED</span> <span class="k">FOLLOWING</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">product_id</span>
<span class="k">FROM</span> <span class="n">popular_products</span> <span class="n">pp</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-011.png" alt="screenshot011" /></p>
<p><br /></p>
<h3 id="373-convert-columns-into-rows">3.7.3. Convert columns into rows</h3>
<h4 id="create-table-and-insert-sample-data-1">Create table and insert sample data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS daily_kpi;</span>
<span class="c1">-- Create KPI(Key Point Indicator) table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">daily_kpi</span> <span class="p">(</span>
<span class="n">dt</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">indicator</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">val</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">daily_kpi</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'2020-01-01'</span><span class="p">,</span> <span class="s1">'impressions'</span><span class="p">,</span> <span class="mi">1800</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-01'</span><span class="p">,</span> <span class="s1">'sessions'</span> <span class="p">,</span> <span class="mi">500</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-01'</span><span class="p">,</span> <span class="s1">'users'</span> <span class="p">,</span> <span class="mi">200</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-02'</span><span class="p">,</span> <span class="s1">'impressions'</span><span class="p">,</span> <span class="mi">2000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-02'</span><span class="p">,</span> <span class="s1">'sessions'</span> <span class="p">,</span> <span class="mi">700</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-02'</span><span class="p">,</span> <span class="s1">'users'</span> <span class="p">,</span> <span class="mi">250</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">daily_kpi</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-012.png" alt="screenshot012" /></p>
<p><br /></p>
<h4 id="convert-rows-into-columns">Convert rows into columns</h4>
<ul>
<li>Use GROUP BY and MAX(CASE) because there are no duplicate indicators per dt</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Convert rows into columns through GROUP_BY and MAX(CASE)</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="p">,</span> <span class="k">MAX</span><span class="p">(</span><span class="k">CASE</span> <span class="k">WHEN</span> <span class="n">indicator</span> <span class="o">=</span> <span class="s1">'impressions'</span> <span class="k">THEN</span> <span class="n">val</span> <span class="k">END</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">impressions</span>
<span class="p">,</span> <span class="k">MAX</span><span class="p">(</span><span class="k">CASE</span> <span class="k">WHEN</span> <span class="n">indicator</span> <span class="o">=</span> <span class="s1">'sessions'</span> <span class="k">THEN</span> <span class="n">val</span> <span class="k">END</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">sessions</span>
<span class="p">,</span> <span class="k">MAX</span><span class="p">(</span><span class="k">CASE</span> <span class="k">WHEN</span> <span class="n">indicator</span> <span class="o">=</span> <span class="s1">'users'</span> <span class="k">THEN</span> <span class="n">val</span> <span class="k">END</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">users</span>
<span class="k">FROM</span> <span class="n">daily_kpi</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-013.png" alt="screenshot013" /></p>
<p><br /></p>
<h4 id="create-purchase-log-table-and-insert-sampled-data">Create purchase log table and insert sampled data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS purchase_detail_log;</span>
<span class="c1">-- Create purchase log table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">purchase_detail_log</span> <span class="p">(</span>
<span class="n">purchase_id</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">product_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">price</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">purchase_detail_log</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="mi">100001</span><span class="p">,</span> <span class="s1">'A001'</span><span class="p">,</span> <span class="mi">3000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">100001</span><span class="p">,</span> <span class="s1">'A002'</span><span class="p">,</span> <span class="mi">4000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">100001</span><span class="p">,</span> <span class="s1">'A003'</span><span class="p">,</span> <span class="mi">2000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">100002</span><span class="p">,</span> <span class="s1">'D001'</span><span class="p">,</span> <span class="mi">5000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">100002</span><span class="p">,</span> <span class="s1">'D002'</span><span class="p">,</span> <span class="mi">3000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">100003</span><span class="p">,</span> <span class="s1">'A001'</span><span class="p">,</span> <span class="mi">3000</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">purchase_detail_log</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-014.png" alt="screenshot014" /></p>
<p><br /></p>
<h4 id="convert-rows-into-1-row-with-comma-delimiters">Convert rows into 1 row with comma delimiters</h4>
<ul>
<li>PostgreSQL and BigQuery support <strong>string_agg(column_name, delimiter)</strong> and Redshift also supports <strong>listagg(column_name, delimiter)</strong> to integrate rows into 1 row with delimiters</li>
<li>Hive and SparkSQL are available to integrate them through <strong>collect_list(column_name)</strong> and <strong>concat_ws(delimiter, array)</strong></li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Convert rows into 1 row with comma delimiters</span>
<span class="k">SELECT</span> <span class="n">purchase_id</span>
<span class="c1">-- if PostgresSQL, BigQuery</span>
<span class="p">,</span> <span class="n">string_agg</span><span class="p">(</span><span class="n">product_id</span><span class="p">,</span> <span class="s1">','</span><span class="p">)</span> <span class="k">AS</span> <span class="n">product_ids</span>
<span class="c1">-- if Redshift</span>
<span class="c1">-- , listagg(product_id, ',') AS product_ids</span>
<span class="c1">-- if Hive, SparkSQL</span>
<span class="c1">-- , concat_ws(',', collect_list(product_id)) AS product_ids</span>
<span class="p">,</span> <span class="k">SUM</span><span class="p">(</span><span class="n">price</span><span class="p">)</span> <span class="k">AS</span> <span class="n">amount</span>
<span class="k">FROM</span> <span class="n">purchase_detail_log</span>
<span class="k">GROUP</span> <span class="k">BY</span> <span class="n">purchase_id</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">purchase_id</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-015.png" alt="screenshot015" /></p>
<p><br /></p>
<h3 id="374-convert-rows-into-columns">3.7.4. Convert rows into columns</h3>
<ul>
<li>It is more complicate than converting columns into rows</li>
<li>However, it is useful to analyze data and there are many cases which need it</li>
</ul>
<h4 id="quarterly-sales-table-and-insert-sample-data">Quarterly sales table and insert sample data</h4>
<ul>
<li>This table is already exits because I made it in <a href="/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-003" target="_blank">Tutorial #3 - Manipulating multiple values / 3.6.2. Compare multiple values</a></li>
<li>If you haven’t this table, execute the query below</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS quarterly_sales;</span>
<span class="c1">-- Create quarterly sales table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">quarterly_sales</span> <span class="p">(</span>
<span class="nb">year</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">q1</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">q2</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">q3</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">q4</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">quarterly_sales</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="mi">2017</span><span class="p">,</span> <span class="mi">82000</span><span class="p">,</span> <span class="mi">83000</span><span class="p">,</span> <span class="mi">78000</span><span class="p">,</span> <span class="mi">83000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">2018</span><span class="p">,</span> <span class="mi">85000</span><span class="p">,</span> <span class="mi">85000</span><span class="p">,</span> <span class="mi">80000</span><span class="p">,</span> <span class="mi">81000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">2019</span><span class="p">,</span> <span class="mi">92000</span><span class="p">,</span> <span class="mi">81000</span><span class="p">,</span> <span class="k">NULL</span> <span class="p">,</span> <span class="k">NULL</span> <span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">quarterly_sales</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-016.png" alt="screenshot016" /></p>
<p><br /></p>
<h4 id="convert-rows-into-columns-1">Convert rows into columns</h4>
<ul>
<li>You have to make pivot table and do CROSS JOIN with it</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- CROSS JOIN with a pivot table</span>
<span class="k">SELECT</span> <span class="n">q</span><span class="p">.</span><span class="nb">year</span>
<span class="c1">-- Print labels from Q1 to Q4</span>
<span class="p">,</span> <span class="k">CASE</span> <span class="k">WHEN</span> <span class="n">p</span><span class="p">.</span><span class="n">idx</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">THEN</span> <span class="s1">'q1'</span>
<span class="k">WHEN</span> <span class="n">p</span><span class="p">.</span><span class="n">idx</span> <span class="o">=</span> <span class="mi">2</span> <span class="k">THEN</span> <span class="s1">'q2'</span>
<span class="k">WHEN</span> <span class="n">p</span><span class="p">.</span><span class="n">idx</span> <span class="o">=</span> <span class="mi">3</span> <span class="k">THEN</span> <span class="s1">'q3'</span>
<span class="k">WHEN</span> <span class="n">p</span><span class="p">.</span><span class="n">idx</span> <span class="o">=</span> <span class="mi">4</span> <span class="k">THEN</span> <span class="s1">'q4'</span>
<span class="k">END</span> <span class="k">AS</span> <span class="n">quarters</span>
<span class="c1">-- Print sales from Q1 to Q4</span>
<span class="p">,</span> <span class="k">CASE</span> <span class="k">WHEN</span> <span class="n">p</span><span class="p">.</span><span class="n">idx</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">THEN</span> <span class="n">q</span><span class="p">.</span><span class="n">q1</span>
<span class="k">WHEN</span> <span class="n">p</span><span class="p">.</span><span class="n">idx</span> <span class="o">=</span> <span class="mi">2</span> <span class="k">THEN</span> <span class="n">q</span><span class="p">.</span><span class="n">q2</span>
<span class="k">WHEN</span> <span class="n">p</span><span class="p">.</span><span class="n">idx</span> <span class="o">=</span> <span class="mi">3</span> <span class="k">THEN</span> <span class="n">q</span><span class="p">.</span><span class="n">q3</span>
<span class="k">WHEN</span> <span class="n">p</span><span class="p">.</span><span class="n">idx</span> <span class="o">=</span> <span class="mi">4</span> <span class="k">THEN</span> <span class="n">q</span><span class="p">.</span><span class="n">q4</span>
<span class="k">END</span> <span class="k">AS</span> <span class="n">sales</span>
<span class="k">FROM</span> <span class="n">quarterly_sales</span> <span class="k">AS</span> <span class="n">q</span>
<span class="k">CROSS</span> <span class="k">JOIN</span>
<span class="c1">-- Create sequence table followed columns in quaterly_sales</span>
<span class="p">(</span><span class="k">SELECT</span> <span class="mi">1</span> <span class="k">AS</span> <span class="n">idx</span>
<span class="k">UNION</span> <span class="k">ALL</span>
<span class="k">SELECT</span> <span class="mi">2</span> <span class="k">AS</span> <span class="n">idx</span>
<span class="k">UNION</span> <span class="k">ALL</span>
<span class="k">SELECT</span> <span class="mi">3</span> <span class="k">AS</span> <span class="n">idx</span>
<span class="k">UNION</span> <span class="k">ALL</span>
<span class="k">SELECT</span> <span class="mi">4</span> <span class="k">AS</span> <span class="n">idx</span>
<span class="p">)</span> <span class="k">AS</span> <span class="n">p</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-017.png" alt="screenshot017" /></p>
<p><br /></p>
<h4 id="create-purchase-log-table-and-insert-sample-data">Create purchase log table and insert sample data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS purchase_log;</span>
<span class="c1">-- Create purchase_log</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">purchase_log</span> <span class="p">(</span>
<span class="n">purchase_id</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">product_ids</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">purchase_log</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="mi">100001</span><span class="p">,</span> <span class="s1">'A001,A002,A003'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">100002</span><span class="p">,</span> <span class="s1">'D001,D002'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">100003</span><span class="p">,</span> <span class="s1">'A001'</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">purchase_log</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-018.png" alt="screenshot018" /></p>
<p><br /></p>
<h4 id="convert-array-into-rows">Convert array into rows</h4>
<ul>
<li>Several middlewares support <strong>TABLE_FUNCTION</strong> whichi returns a table</li>
<li>For example, PostgreSQL and BigQuery have <strong>unnest(array)</strong> function and Hive and SparkSQL have <strong>explode(array)</strong> function and they convert an array into a table</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Convert an array into a table</span>
<span class="c1">-- if PostgreSQL</span>
<span class="k">SELECT</span> <span class="k">unnest</span><span class="p">(</span><span class="n">ARRAY</span><span class="p">[</span><span class="s1">'A001'</span><span class="p">,</span> <span class="s1">'A002'</span><span class="p">,</span> <span class="s1">'A003'</span><span class="p">])</span> <span class="k">AS</span> <span class="n">product_id</span><span class="p">;</span>
<span class="c1">-- if BigQuery</span>
<span class="c1">-- SELECT * FROM unnest(ARRAY['A001', 'A002', 'A003']) AS product_id;</span>
<span class="c1">-- if Hive, SparkSQL</span>
<span class="c1">-- SELECT explode(ARRAY['A001', 'A002', 'A003']) AS product_id;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-019.png" alt="screenshot019" /></p>
<p><br /></p>
<ul>
<li>You have to use <strong>CROSS JOIN</strong> in PostgreSQL or BigQuery and use <strong>LATERAL VIEW</strong> in Hive or SparkSQL</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Convert a stirng with delimiters into a table</span>
<span class="k">SELECT</span> <span class="n">purchase_id</span>
<span class="p">,</span> <span class="n">product_id</span>
<span class="k">FROM</span> <span class="n">purchase_log</span> <span class="k">AS</span> <span class="n">p</span>
<span class="c1">-- if PostgreSQL</span>
<span class="k">CROSS</span> <span class="k">JOIN</span> <span class="k">unnest</span><span class="p">(</span><span class="n">pg_catalog</span><span class="p">.</span><span class="n">string_to_array</span><span class="p">(</span><span class="n">product_ids</span><span class="p">,</span> <span class="s1">','</span><span class="p">))</span> <span class="k">AS</span> <span class="n">product_id</span>
<span class="c1">-- if BigQuery</span>
<span class="c1">-- CROSS JOIN unnest(split(product_ids, ',')) AS prouct_id</span>
<span class="c1">-- if Hive, SparkSQL</span>
<span class="c1">-- LATERAL VIEW explode(split(producT_ids, ',') e AS producT_id</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-020.png" alt="screenshot020" /></p>
<p><br /></p>
<ul>
<li>You can use scalar value and a table function in the same time in PostgreSQL</li>
<li>PostgreSQL supports <strong>regexp_split_to_table()</strong> which returns a table from an string by the regualar expression</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Convert a stirng with delimiters into a table withtout cross join</span>
<span class="k">SELECT</span> <span class="n">purchase_id</span>
<span class="p">,</span> <span class="n">regexp_split_to_table</span><span class="p">(</span><span class="n">product_ids</span><span class="p">,</span> <span class="s1">','</span><span class="p">)</span> <span class="k">AS</span> <span class="n">product_id</span>
<span class="k">FROM</span> <span class="n">purchase_log</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-021.png" alt="screenshot021" /></p>
<p><br /></p>
<h4 id="convert-a-string-into-rows-in-redshift">Convert a string into rows in Redshift</h4>
<ul>
<li>Redshift doesn’t support array data type offically</li>
<li>Therefore, it is more complicate for you to do it in Redshift and you have to do several pre processing</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate the count of products through the count of delimiters in Redshift</span>
<span class="k">SELECT</span> <span class="n">purchase_id</span>
<span class="p">,</span> <span class="n">product_ids</span>
<span class="c1">-- Remove comman by product_id </span>
<span class="c1">-- and calculate the count of products through the count of delimiters</span>
<span class="p">,</span> <span class="mi">1</span> <span class="o">+</span> <span class="k">char_length</span><span class="p">(</span><span class="n">product_ids</span><span class="p">)</span> <span class="o">-</span> <span class="k">char_length</span><span class="p">(</span><span class="k">replace</span><span class="p">(</span><span class="n">product_ids</span><span class="p">,</span> <span class="s1">','</span><span class="p">,</span> <span class="s1">''</span><span class="p">))</span>
<span class="k">AS</span> <span class="n">product_num</span>
<span class="k">FROM</span> <span class="n">purchase_log</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-022.png" alt="screenshot022" /></p>
<p><br /></p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Convert a string into rows using a pivot table in Redshift</span>
<span class="k">SELECT</span> <span class="n">l</span><span class="p">.</span><span class="n">purchase_id</span>
<span class="p">,</span> <span class="n">l</span><span class="p">.</span><span class="n">product_ids</span>
<span class="c1">-- Set a sequence by the count of products</span>
<span class="p">,</span> <span class="n">p</span><span class="p">.</span><span class="n">idx</span>
<span class="p">,</span> <span class="n">split_part</span><span class="p">(</span><span class="n">l</span><span class="p">.</span><span class="n">product_ids</span><span class="p">,</span> <span class="s1">','</span><span class="p">,</span> <span class="n">p</span><span class="p">.</span><span class="n">idx</span><span class="p">)</span> <span class="k">AS</span> <span class="n">product_id</span>
<span class="k">FROM</span> <span class="n">purchase_log</span> <span class="k">AS</span> <span class="n">l</span>
<span class="k">JOIN</span>
<span class="p">(</span><span class="k">SELECT</span> <span class="mi">1</span> <span class="k">AS</span> <span class="n">idx</span>
<span class="k">UNION</span> <span class="k">ALL</span>
<span class="k">SELECT</span> <span class="mi">2</span> <span class="k">AS</span> <span class="n">idx</span>
<span class="k">UNION</span> <span class="k">ALL</span>
<span class="k">SELECT</span> <span class="mi">3</span> <span class="k">AS</span> <span class="n">idx</span>
<span class="p">)</span> <span class="k">AS</span> <span class="n">p</span>
<span class="c1">-- Join when id of the pivot table is less than the count of products</span>
<span class="k">ON</span> <span class="n">p</span><span class="p">.</span><span class="n">idx</span> <span class="o"><=</span> <span class="p">(</span><span class="mi">1</span> <span class="o">+</span> <span class="k">char_length</span><span class="p">(</span><span class="n">product_ids</span><span class="p">)</span> <span class="o">-</span> <span class="k">char_length</span><span class="p">(</span><span class="k">replace</span><span class="p">(</span><span class="n">product_ids</span><span class="p">,</span> <span class="s1">','</span><span class="p">,</span> <span class="s1">''</span><span class="p">)))</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-31-bigdata-sql-sqlrecipeforanalysis-004-023.png" alt="screenshot023" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li>데이터 분석을 위한 SQL 레시피 - 한빛미디어</li>
<li><a href="https://en.wikipedia.org/wiki/SQL:2003" target="_blank">SQL:2003 Wiki</a></li>
</ul>
Fri, 31 Jan 2020 00:00:00 +0000
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-004/
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-004/
bigdata
sql
analyze
data
tutorial
BigData
DataAnalysis
-
[Data Analysis] SQL Recipe for Data Analysis Tutorial #3 - Manipulating multiple values
<h1 id="goal">Goal</h1>
<ul>
<li>Studying SQL for data analysis</li>
<li>Practicing chapter 3rd in the book</li>
<li>Studying SQL for Manipulating data</li>
</ul>
<p><br /></p>
<hr />
<h1 id="practice">Practice</h1>
<h2 id="book-for-studying">Book for studying</h2>
<table>
<thead>
<tr>
<th>Title</th>
<th>데이터 분석을 위한 SQL 레시피</th>
</tr>
</thead>
<tbody>
<tr>
<td>Author</td>
<td>Nagato Kasaki, Naoto Tamiya</td>
</tr>
<tr>
<td>Translator</td>
<td>윤인성</td>
</tr>
<tr>
<td>Publisher</td>
<td>한빛미디어</td>
</tr>
<tr>
<td>Chapter</td>
<td>3</td>
</tr>
<tr>
<td>Lesson</td>
<td>6</td>
</tr>
</tbody>
</table>
<p><br /></p>
<ul>
<li>I’m gonna study basic SQL syntax and functions for data analysis</li>
<li>I’m gonna study how to manipulate from a multiple values</li>
<li>I’m gonna try to load test data on PostgreSQL and execute queries in the book</li>
</ul>
<p><br /></p>
<h2 id="36-manipulating-multiple-values">3.6. Manipulating multiple values</h2>
<ul>
<li><a href="/assets/sql/sql_recipe_tutorial_003.sql">Download tutorial SQL file</a></li>
</ul>
<h3 id="361-concatenate-strings">3.6.1. Concatenate strings</h3>
<h4 id="create-table-and-insert-sample-data">Create table and insert sample data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS mst_user_location;</span>
<span class="c1">-- Create user location table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">mst_user_location</span> <span class="p">(</span>
<span class="n">user_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">pref_name</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">city_name</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">mst_user_location</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'U001'</span><span class="p">,</span> <span class="s1">'Seoul-si'</span><span class="p">,</span> <span class="s1">'Seodaemun-gu'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U002'</span><span class="p">,</span> <span class="s1">'Kyeonki-do Suwon-si'</span><span class="p">,</span> <span class="s1">'Paldal-gu'</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U003'</span><span class="p">,</span> <span class="s1">'Jeju-do'</span><span class="p">,</span> <span class="s1">'Seoguipo-si'</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">mst_user_location</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h4 id="concatenate-string-data-type-columns">Concatenate string data type columns</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Concatenate pref_name and citiy_name</span>
<span class="k">SELECT</span> <span class="n">user_id</span>
<span class="c1">-- if PostgreSQL, Hive, SparkSQL, BigQuery</span>
<span class="p">,</span> <span class="n">CONCAT</span><span class="p">(</span><span class="n">city_name</span><span class="p">,</span> <span class="s1">', '</span><span class="p">,</span> <span class="n">pref_name</span><span class="p">)</span> <span class="k">AS</span> <span class="n">pref_city</span>
<span class="c1">-- if PostgreSQL, Redshift</span>
<span class="p">,</span> <span class="n">city_name</span> <span class="o">||</span> <span class="s1">', '</span> <span class="o">||</span> <span class="n">pref_name</span> <span class="k">AS</span> <span class="n">pref_city2</span>
<span class="k">FROM</span> <span class="n">mst_user_location</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-002.png" alt="screenshot002" /></p>
<p><br /></p>
<blockquote>
<p>Redshift also supports <strong>CONCAT</strong> function. However, this function in Redshift allows only 2 arguments.</p>
</blockquote>
<blockquote>
<blockquote>
<p>eg. CONCAT(‘a’, ‘b’) (O) <br /> eg. CONCAT(‘a’, ‘b’, ‘c’) (X)</p>
</blockquote>
</blockquote>
<p><br /></p>
<h3 id="362-compare-multiple-values">3.6.2. Compare multiple values</h3>
<h4 id="create-table-and-insert-sample-data-1">Create table and insert sample data</h4>
<ul>
<li>Data in this table illustrates quarterly sales</li>
<li>Null means that the sales haven’t been confirmed yet</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS quarterly_sales;</span>
<span class="c1">-- Create quarterly sales table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">quarterly_sales</span> <span class="p">(</span>
<span class="nb">year</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">q1</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">q2</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">q3</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">q4</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">quarterly_sales</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="mi">2017</span><span class="p">,</span> <span class="mi">82000</span><span class="p">,</span> <span class="mi">83000</span><span class="p">,</span> <span class="mi">78000</span><span class="p">,</span> <span class="mi">83000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">2018</span><span class="p">,</span> <span class="mi">85000</span><span class="p">,</span> <span class="mi">85000</span><span class="p">,</span> <span class="mi">80000</span><span class="p">,</span> <span class="mi">81000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">2019</span><span class="p">,</span> <span class="mi">92000</span><span class="p">,</span> <span class="mi">81000</span><span class="p">,</span> <span class="k">NULL</span> <span class="p">,</span> <span class="k">NULL</span> <span class="p">)</span>
<span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">quarterly_sales</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-003.png" alt="screenshot003" /></p>
<p><br /></p>
<h4 id="find-out-whether-the-sales-of-a-quater-increased-or-decreased">Find out whether the sales of a quater increased or decreased</h4>
<ul>
<li>Print ‘+’ when sales increased and print ‘-‘ when sales decreased. And also, if there was no change, print ‘ ‘(space)</li>
<li>You can use CASE and also <strong>SIGN</strong> function is available</li>
<li>SIGN returns 1 from a positive number argument or -1 from a negative number one or 0 from 0 argument</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Find out the fluctuation of sales quaterly</span>
<span class="k">SELECT</span> <span class="nb">year</span>
<span class="p">,</span> <span class="n">q1</span>
<span class="p">,</span> <span class="n">q2</span>
<span class="p">,</span> <span class="k">CASE</span> <span class="k">WHEN</span> <span class="n">q1</span> <span class="o"><</span> <span class="n">q2</span> <span class="k">THEN</span> <span class="s1">'+'</span>
<span class="k">WHEN</span> <span class="n">q1</span> <span class="o">=</span> <span class="n">q2</span> <span class="k">THEN</span> <span class="s1">' '</span>
<span class="k">ELSE</span> <span class="s1">'-'</span>
<span class="k">END</span> <span class="k">AS</span> <span class="n">judge_q1_q2</span>
<span class="p">,</span> <span class="n">q2</span> <span class="o">-</span> <span class="n">q1</span> <span class="k">AS</span> <span class="n">diff_q2_q1</span>
<span class="p">,</span> <span class="n">SIGN</span><span class="p">(</span><span class="n">q2</span> <span class="o">-</span> <span class="n">q1</span><span class="p">)</span> <span class="k">AS</span> <span class="n">sign_q2_q1</span>
<span class="k">FROM</span> <span class="n">quarterly_sales</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="nb">year</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-004.png" alt="screenshot004" /></p>
<p><br /></p>
<h4 id="extract-maximum-and-minimum-sales">Extract maximum and minimum sales</h4>
<ul>
<li>You can utilize <strong>greatest</strong>, <strong>least</strong> functions</li>
<li>These functions are not the standard SQL, but most SQL query engines support them</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Find out the max/min sales of a year</span>
<span class="k">SELECT</span> <span class="nb">year</span>
<span class="c1">-- Maximum sales</span>
<span class="p">,</span> <span class="n">greatest</span><span class="p">(</span><span class="n">q1</span><span class="p">,</span> <span class="n">q2</span><span class="p">,</span> <span class="n">q3</span><span class="p">,</span> <span class="n">q4</span><span class="p">)</span> <span class="k">AS</span> <span class="n">greatest_sales</span>
<span class="c1">-- Minimum sales</span>
<span class="p">,</span> <span class="n">greatest</span><span class="p">(</span><span class="n">q1</span><span class="p">,</span> <span class="n">q2</span><span class="p">,</span> <span class="n">q3</span><span class="p">,</span> <span class="n">q4</span><span class="p">)</span> <span class="k">AS</span> <span class="n">least_sales</span>
<span class="k">FROM</span> <span class="n">quarterly_sales</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="nb">year</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-005.png" alt="screenshot005" /></p>
<p><br /></p>
<h4 id="calculate-the-average-of-a-year">Calculate the average of a year</h4>
<ul>
<li>You have to consider whether null value is exists or not</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate the average of a year</span>
<span class="k">SELECT</span> <span class="nb">year</span>
<span class="c1">-- Invalid: It doesn't replace null to 0. The result of an arithmetic operation with null is null</span>
<span class="p">,</span> <span class="p">(</span><span class="n">q1</span> <span class="o">+</span> <span class="n">q2</span> <span class="o">+</span> <span class="n">q3</span> <span class="o">+</span> <span class="n">q4</span><span class="p">)</span> <span class="o">/</span> <span class="mi">4</span> <span class="k">AS</span> <span class="n">null_average</span>
<span class="c1">-- Invalid: You have to skip q3, q4 in 2019. But, it always divide total value into 4</span>
<span class="p">,</span> <span class="p">(</span><span class="n">COALESCE</span><span class="p">(</span><span class="n">q1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">COALESCE</span><span class="p">(</span><span class="n">q2</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">COALESCE</span><span class="p">(</span><span class="n">q3</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">COALESCE</span><span class="p">(</span><span class="n">q4</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span> <span class="o">/</span> <span class="mi">4</span> <span class="k">AS</span> <span class="n">invalid_denominator_average</span>
<span class="c1">-- Valid</span>
<span class="p">,</span> <span class="p">(</span><span class="n">COALESCE</span><span class="p">(</span><span class="n">q1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">COALESCE</span><span class="p">(</span><span class="n">q2</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">COALESCE</span><span class="p">(</span><span class="n">q3</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">COALESCE</span><span class="p">(</span><span class="n">q4</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="o">/</span> <span class="p">(</span><span class="n">SIGN</span><span class="p">(</span><span class="n">COALESCE</span><span class="p">(</span><span class="n">q1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span> <span class="o">+</span> <span class="n">SIGN</span><span class="p">(</span><span class="n">COALESCE</span><span class="p">(</span><span class="n">q2</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span> <span class="o">+</span> <span class="n">SIGN</span><span class="p">(</span><span class="n">COALESCE</span><span class="p">(</span><span class="n">q3</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span> <span class="o">+</span> <span class="n">SIGN</span><span class="p">(</span><span class="n">COALESCE</span><span class="p">(</span><span class="n">q4</span><span class="p">,</span> <span class="mi">0</span><span class="p">)))</span> <span class="k">AS</span> <span class="n">correct_average</span>
<span class="k">FROM</span> <span class="n">quarterly_sales</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="nb">year</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-006.png" alt="screenshot006" /></p>
<p><br /></p>
<h3 id="363-calculate-the-proportion">3.6.3. Calculate the proportion</h3>
<h4 id="create-table-and-insert-sample-data-2">Create table and insert sample data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">--DROP TABLE IF EXISTS advertising_stats;</span>
<span class="c1">-- Create advertising status table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">advertising_stats</span> <span class="p">(</span>
<span class="n">dt</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">ad_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">impressions</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">clicks</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">advertising_stats</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'2020-01-28'</span><span class="p">,</span> <span class="s1">'001'</span><span class="p">,</span> <span class="mi">100000</span><span class="p">,</span> <span class="mi">3000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-28'</span><span class="p">,</span> <span class="s1">'002'</span><span class="p">,</span> <span class="mi">120000</span><span class="p">,</span> <span class="mi">1200</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-28'</span><span class="p">,</span> <span class="s1">'003'</span><span class="p">,</span> <span class="mi">500000</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-29'</span><span class="p">,</span> <span class="s1">'001'</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-29'</span><span class="p">,</span> <span class="s1">'002'</span><span class="p">,</span> <span class="mi">130000</span><span class="p">,</span> <span class="mi">1400</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-29'</span><span class="p">,</span> <span class="s1">'003'</span><span class="p">,</span> <span class="mi">620000</span><span class="p">,</span> <span class="mi">15000</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">advertising_stats</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-007.png" alt="screenshot007" /></p>
<p><br /></p>
<h4 id="calculate-ctrclikc-through-rate">Calculate CTR(Clikc Through Rate)</h4>
<ul>
<li>CTR : The frequency of clicks / The frequency of exposure(impression)</li>
<li>clicks and impression column are integer type</li>
<li>To get double presion result, you have to convert integer into double through <strong>CAST</strong> function</li>
<li>Hive, SparkSQL, Redshift, BigQuery support auto conversion when an integer number is divided by an integer number, while you have to convert type explicitly in PostgreSQL</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate CTR(Click through rate)</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="p">,</span> <span class="n">ad_id</span>
<span class="p">,</span> <span class="k">CAST</span><span class="p">(</span><span class="n">clicks</span> <span class="k">AS</span> <span class="nb">double</span> <span class="nb">precision</span><span class="p">)</span> <span class="o">/</span> <span class="n">impressions</span> <span class="k">AS</span> <span class="n">ctr</span>
<span class="c1">-- 100.0(double) * clicks(integer) -> double</span>
<span class="p">,</span> <span class="mi">100</span><span class="p">.</span><span class="mi">0</span> <span class="o">*</span> <span class="n">clicks</span> <span class="o">/</span> <span class="n">impressions</span> <span class="k">AS</span> <span class="n">ctr_as_percent</span>
<span class="c1">-- if Hive, SparkSQL, Redshift, BigQuery => Auto conversion </span>
<span class="c1">-- , clicks / impressions AS ctr</span>
<span class="k">FROM</span> <span class="n">advertising_stats</span>
<span class="k">WHERE</span> <span class="n">dt</span> <span class="o">=</span> <span class="s1">'2020-01-28'</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span><span class="p">,</span> <span class="n">ad_id</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-008.png" alt="screenshot008" /></p>
<p><br /></p>
<h4 id="be-careful-to-divide-by-zero">Be careful to divide by zero</h4>
<ul>
<li>If you try to divide clicks by zero, you’ll face the error like below</li>
</ul>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-009.png" alt="screenshot009" /></p>
<p><br /></p>
<ul>
<li>To avoid this error, you have to replace 0 with null through <strong>CASE</strong> or <strong>NULLIF</strong> function</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate CTR without error</span>
<span class="k">SELECT</span> <span class="n">dt</span>
<span class="p">,</span> <span class="n">ad_id</span>
<span class="c1">-- use CASE clause</span>
<span class="p">,</span> <span class="k">CASE</span> <span class="k">WHEN</span> <span class="n">impressions</span> <span class="o">></span> <span class="mi">0</span> <span class="k">THEN</span> <span class="mi">100</span><span class="p">.</span><span class="mi">0</span> <span class="o">*</span> <span class="n">clicks</span> <span class="o">/</span> <span class="n">impressions</span>
<span class="k">END</span> <span class="k">AS</span> <span class="n">ctr_percent_by_case</span>
<span class="c1">-- if PostgreSQL, SparkSQL, Redshift, BigQuery</span>
<span class="c1">-- The result of arithmetic operation with null is null</span>
<span class="p">,</span> <span class="mi">100</span><span class="p">.</span><span class="mi">0</span> <span class="o">*</span> <span class="n">clicks</span> <span class="o">/</span> <span class="k">NULLIF</span><span class="p">(</span><span class="n">impressions</span> <span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="k">AS</span> <span class="n">ctr_as_percent_by_null</span>
<span class="c1">-- if Hive (Not support NULLIF)</span>
<span class="c1">-- , 100.0 * clicks / CASE WHEN imperssions = 0 THEN NULL ELSE impressions END AS ctr_as_percent_by_null</span>
<span class="k">FROM</span> <span class="n">advertising_stats</span>
<span class="k">ORDER</span> <span class="k">BY</span> <span class="n">dt</span><span class="p">,</span> <span class="n">ad_id</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-010.png" alt="screenshot010" /></p>
<p><br /></p>
<h3 id="364-calculate-the-distance-between-two-points">3.6.4. Calculate the distance between two points</h3>
<h4 id="create-a-dimension-table-and-insert-sample-data">Create a dimension table and insert sample data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS location_1d;</span>
<span class="c1">-- Create a dimension table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">location_1d</span> <span class="p">(</span>
<span class="n">x1</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">x2</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">location_1d</span>
<span class="k">VALUES</span>
<span class="p">(</span> <span class="mi">5</span> <span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">10</span> <span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="o">-</span><span class="mi">2</span> <span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="mi">3</span> <span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span> <span class="mi">0</span> <span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">location_1d</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-011.png" alt="screenshot011" /></p>
<p><br /></p>
<h4 id="calculate-the-distance-between-x1-and-x2">Calculate the distance between x1 and x2</h4>
<ul>
<li>You can utilize <strong>ABS</strong>, <strong>POWER</strong>, <strong>SQRT</strong> functions</li>
</ul>
<table>
<thead>
<tr>
<th>Function</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ABS</td>
<td>Return absolute-value</td>
</tr>
<tr>
<td>POWER</td>
<td>Return the square of parameter value</td>
</tr>
<tr>
<td>SQRT</td>
<td>Return the square root of parameter value</td>
</tr>
</tbody>
</table>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate the distance between x1 and x2</span>
<span class="k">SELECT</span> <span class="k">abs</span><span class="p">(</span><span class="n">x1</span> <span class="o">-</span> <span class="n">x2</span><span class="p">)</span> <span class="k">AS</span> <span class="k">abs</span>
<span class="p">,</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">power</span><span class="p">(</span><span class="n">x1</span> <span class="o">-</span> <span class="n">x2</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> <span class="k">AS</span> <span class="n">rms</span>
<span class="k">FROM</span> <span class="n">location_1d</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-012.png" alt="screenshot012" /></p>
<p><br /></p>
<h4 id="create-two-dimensions-table-and-insert-sample-data">Create two dimensions table and insert sample data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS location_2d;</span>
<span class="c1">-- Create two dimensions table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">location_2d</span> <span class="p">(</span>
<span class="n">x1</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">y1</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">x2</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">y2</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">location_2d</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">location_2d</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-013.png" alt="screenshot013" /></p>
<p><br /></p>
<h4 id="calculate-the-euclidean-distance-between-x1-y1-and-x2-y2">Calculate the Euclidean distance between (x1, y1) and (x2, y2)</h4>
<ul>
<li>You can calculate it through <strong>POWER</strong> and <strong>SQRT</strong></li>
<li>PostgreSQL supports <strong>POINT</strong> data type and <strong><–></strong> the distance operation</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate the Euclidean distance between (x1, y1) and (x2, y2)</span>
<span class="k">SELECT</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">power</span><span class="p">(</span><span class="n">x1</span> <span class="o">-</span> <span class="n">x2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="n">power</span><span class="p">(</span><span class="n">y1</span> <span class="o">-</span> <span class="n">y2</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span> <span class="k">AS</span> <span class="n">distance</span>
<span class="p">,</span> <span class="n">point</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">)</span> <span class="o"><-></span> <span class="n">point</span><span class="p">(</span><span class="n">x2</span><span class="p">,</span> <span class="n">y2</span><span class="p">)</span> <span class="k">as</span> <span class="n">dist_point</span>
<span class="k">FROM</span> <span class="n">location_2d</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-014.png" alt="screenshot014" /></p>
<p><br /></p>
<h3 id="365-calculate-datetime">3.6.5. Calculate Date/Time</h3>
<h4 id="create-table-and-insert-sample-data-3">Create table and insert sample data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS mst_users_with_dates;</span>
<span class="c1">-- Create user table with user's birthday and register datetime</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">mst_users_with_dates</span> <span class="p">(</span>
<span class="n">user_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">register_stamp</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">birth_date</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">mst_users_with_dates</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'U001'</span><span class="p">,</span> <span class="s1">'2019-02-20 10:00:00'</span><span class="p">,</span> <span class="s1">'2000-02-19'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U002'</span><span class="p">,</span> <span class="s1">'2019-02-21 10:00:00'</span><span class="p">,</span> <span class="s1">'2000-03-16'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U003'</span><span class="p">,</span> <span class="s1">'2019-03-01 10:00:00'</span><span class="p">,</span> <span class="s1">'2000-04-09'</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">mst_users_with_dates</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-015.png" alt="screenshot015" /></p>
<p><br /></p>
<h4 id="calculate-datetime">Calculate date/time</h4>
<ul>
<li>Hive, SparkSQL don’t support date/time functions. So, you have to convert string data into unixtime and convert it into timestamp data type</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate date/time</span>
<span class="k">SELECT</span> <span class="n">user_id</span>
<span class="p">,</span> <span class="n">register_stamp</span><span class="p">::</span><span class="nb">timestamp</span> <span class="k">AS</span> <span class="n">register_stamp</span>
<span class="p">,</span> <span class="n">register_stamp</span><span class="p">::</span><span class="nb">timestamp</span> <span class="o">+</span> <span class="s1">'1 hour'</span><span class="p">::</span><span class="n">interval</span> <span class="k">AS</span> <span class="n">after_1_hour</span>
<span class="p">,</span> <span class="n">register_stamp</span><span class="p">::</span><span class="nb">timestamp</span> <span class="o">-</span> <span class="s1">'30 minutes'</span><span class="p">::</span><span class="n">interval</span> <span class="k">AS</span> <span class="n">before_30_minutes</span>
<span class="p">,</span> <span class="n">register_stamp</span><span class="p">::</span><span class="nb">date</span> <span class="k">AS</span> <span class="n">register_date</span>
<span class="p">,</span> <span class="n">register_stamp</span><span class="p">::</span><span class="nb">date</span> <span class="o">+</span> <span class="s1">'1 day'</span><span class="p">::</span><span class="n">interval</span> <span class="k">AS</span> <span class="n">after_1_day</span>
<span class="p">,</span> <span class="n">register_stamp</span><span class="p">::</span><span class="nb">date</span> <span class="o">-</span> <span class="s1">'1 month'</span><span class="p">::</span><span class="n">interval</span> <span class="k">AS</span> <span class="n">before_1_month</span>
<span class="c1">--</span>
<span class="c1">-- if Hive, SparkSQL (Not support timstamp operation functions)</span>
<span class="c1">-- , CAST(register_stamp AS timestamp) AS register_stamp</span>
<span class="c1">-- , from_unixtime(unix_tiestamp(register_stamp) + 60 * 60) AS after_1_hour</span>
<span class="c1">-- , from_unixtime(unix_tiestamp(register_stamp) - 30 * 60) AS before_30_minutes</span>
<span class="c1">-- , to_date(register_stamp) AS register_date</span>
<span class="c1">-- , date_add(to_date(register_stamp), 1) AS after_1_day</span>
<span class="c1">-- , add_months(to_date(register_stamp), -1) AS before_1_month</span>
<span class="c1">--</span>
<span class="c1">-- if Redshift (dateadd)</span>
<span class="c1">-- , register_stamp::timestamp AS register_stamp</span>
<span class="c1">-- , dateadd(hour, 1, register_stamp::timestamp) AS after_1_hour</span>
<span class="c1">-- , dateadd(minute, -30, register_stamp::timestamp) AS before_30_minutes</span>
<span class="c1">-- , register_stamp::date AS register_date</span>
<span class="c1">-- , dateadd(day, 1, register_stamp::date) AS after_1_day</span>
<span class="c1">-- , dateadd(month, -1, register_stamp::date) AS before_1_month</span>
<span class="c1">--</span>
<span class="c1">-- if BigQuery (timestamp_add, timestamp_sub, date_add, date_sub)</span>
<span class="c1">-- , timestamp(register_stamp) AS register_stamp</span>
<span class="c1">-- , timestamp_add(timestamp(register_stamp), interval 1 hour) AS after_1_hour</span>
<span class="c1">-- , timestamp_sub(timestamp(register_stamp), interval 30 minute) AS before_30_minutes</span>
<span class="c1">-- , date(register_stamp) AS register_date</span>
<span class="c1">-- , date_add(date(register_stamp), interval 1 day) AS after_1_day</span>
<span class="c1">-- , date_sub(date(register_stamp), interval 1 month) AS before_1_month</span>
<span class="k">FROM</span> <span class="n">mst_users_with_dates</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-016.png" alt="screenshot016" /></p>
<p><br /></p>
<h4 id="calculate-the-difference-between-datetime-data">Calculate the difference between date/time data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate the difference between today and register_stamp</span>
<span class="k">SELECT</span> <span class="n">user_id</span>
<span class="c1">-- if PostgreSQL, Redshift</span>
<span class="p">,</span> <span class="k">CURRENT_DATE</span> <span class="k">AS</span> <span class="n">today</span>
<span class="p">,</span> <span class="n">register_stamp</span><span class="p">::</span><span class="nb">date</span> <span class="k">AS</span> <span class="n">register_date</span>
<span class="p">,</span> <span class="k">CURRENT_DATE</span> <span class="o">-</span> <span class="n">register_stamp</span><span class="p">::</span><span class="nb">date</span> <span class="k">AS</span> <span class="n">diff_days</span>
<span class="c1">--</span>
<span class="c1">-- if Hive, SparkSQL (datediff)</span>
<span class="c1">-- , CURRENT_DATE() AS today</span>
<span class="c1">-- , to_date(register_stamp) AS register_date</span>
<span class="c1">-- , datediff(CURRENT_DATE(), to_date(register_stamp)) AS diff_days</span>
<span class="c1">--</span>
<span class="c1">-- if BigQuery (date_diff)</span>
<span class="c1">-- , CURRENT_DATE AS today</span>
<span class="c1">-- , date(timestamp(register_stamp)) AS register_date</span>
<span class="c1">-- , date_diff(CURRENT_DATE, date(timestamp(register_stamp)), day) AS diff_days</span>
<span class="k">FROM</span> <span class="n">mst_users_with_dates</span> <span class="n">muwd</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-017.png" alt="screenshot017" /></p>
<p><br /></p>
<h4 id="calculate-users-age-from-the-birthday">Calculate user’s age from the birthday</h4>
<ul>
<li>PostgreSQL supports <strong>age</strong> function and it returns days
<ul>
<li>age(arg) -> current age from arg</li>
<li>arg(arg1, arg2) -> age from arg1 to arg2
<blockquote>
<p>Redshift also supports age function, but it is not official</p>
</blockquote>
</li>
</ul>
</li>
<li>You can get YEAR through <strong>EXTRACT</strong> function</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate user's age from the birthday</span>
<span class="k">SELECT</span> <span class="n">user_id</span>
<span class="p">,</span> <span class="k">CURRENT_DATE</span> <span class="k">AS</span> <span class="n">today</span>
<span class="p">,</span> <span class="n">register_stamp</span><span class="p">::</span><span class="nb">date</span> <span class="k">AS</span> <span class="n">register_date</span>
<span class="p">,</span> <span class="n">birth_date</span><span class="p">::</span><span class="nb">date</span> <span class="k">AS</span> <span class="n">birth_date</span>
<span class="p">,</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="nb">YEAR</span> <span class="k">FROM</span> <span class="n">age</span><span class="p">(</span><span class="n">birth_date</span><span class="p">::</span><span class="nb">date</span><span class="p">))</span> <span class="k">AS</span> <span class="n">current_age</span>
<span class="p">,</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="nb">YEAR</span> <span class="k">FROM</span> <span class="n">age</span><span class="p">(</span><span class="n">register_stamp</span><span class="p">::</span><span class="nb">date</span><span class="p">,</span> <span class="n">birth_date</span><span class="p">::</span><span class="nb">date</span><span class="p">))</span> <span class="k">AS</span> <span class="n">register_age</span>
<span class="p">,</span> <span class="n">age</span><span class="p">(</span><span class="n">register_stamp</span><span class="p">::</span><span class="nb">date</span><span class="p">,</span> <span class="n">birth_date</span><span class="p">::</span><span class="nb">date</span><span class="p">)</span> <span class="k">AS</span> <span class="n">register_age2</span>
<span class="k">FROM</span> <span class="n">mst_users_with_dates</span> <span class="n">muwd</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-018.png" alt="screenshot018" /></p>
<p><br /></p>
<h4 id="calculate-year-difference">Calculate year difference</h4>
<ul>
<li>Redshift has <strong>datediff</strong> and BigQuery has <strong>date_diff</strong> function for getting the year difference</li>
<li>However, it is not exact to calculate the age because it just returns the year difference
<ul>
<li>eg. datediff(year, ‘2019-12-31’, ‘2020-01-01’) returns 1, nevertheless the age is 0</li>
</ul>
</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate year difference</span>
<span class="k">SELECT</span> <span class="n">user_id</span>
<span class="c1">-- if Redshift</span>
<span class="p">,</span> <span class="k">CURRENT_DATE</span> <span class="k">AS</span> <span class="n">today</span>
<span class="p">,</span> <span class="n">register_stamp</span><span class="p">::</span><span class="nb">date</span> <span class="k">AS</span> <span class="n">register_date</span>
<span class="p">,</span> <span class="n">birth_date</span><span class="p">::</span><span class="nb">date</span> <span class="k">AS</span> <span class="n">birth_date</span>
<span class="p">,</span> <span class="n">datediff</span><span class="p">(</span><span class="nb">year</span><span class="p">,</span> <span class="n">birth_date</span><span class="p">::</span><span class="nb">date</span><span class="p">,</span> <span class="k">CURRENT_DATE</span><span class="p">)</span> <span class="k">AS</span> <span class="n">current_age</span>
<span class="p">,</span> <span class="n">datediff</span><span class="p">(</span><span class="nb">year</span><span class="p">,</span> <span class="n">birth_date</span><span class="p">::</span><span class="nb">date</span><span class="p">,</span> <span class="n">register_stamp</span><span class="p">::</span><span class="nb">date</span><span class="p">)</span> <span class="k">AS</span> <span class="n">register_age</span>
<span class="c1">--</span>
<span class="c1">-- if BigQuery</span>
<span class="c1">-- , CURRENT_DATE AS today</span>
<span class="c1">-- , date(timestamp(register_stamp)) AS register_date </span>
<span class="c1">-- , date(timestamp(birth_date)) AS birth_date </span>
<span class="c1">-- , date_diff(CURRENT_DATE, date(tiemstamp(birth_date)), year) AS current_age</span>
<span class="c1">-- , date_diff(date(timestamp(registeR_stamp)), date(timestamp(birth_date)), year) AS register_age</span>
<span class="k">FROM</span> <span class="n">mst_users_with_dates</span>
<span class="p">;</span>
</code></pre></div></div>
<p><br /></p>
<h4 id="how-to-calculate-the-age-exactly-without-a-special-function-like-age">How to calculate the age exactly without a special function like age</h4>
<ul>
<li>It is possible to get exact age by converting date into integer</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- How to calculate the age exactly without a special function like age</span>
<span class="k">SELECT</span> <span class="n">birth_date_integer</span>
<span class="p">,</span> <span class="n">current_date_integer</span>
<span class="p">,</span> <span class="n">floor</span><span class="p">((</span><span class="n">current_date_integer</span> <span class="o">-</span> <span class="n">birth_date_integer</span><span class="p">)</span> <span class="o">/</span> <span class="mi">10000</span><span class="p">)</span> <span class="k">AS</span> <span class="n">age</span>
<span class="k">FROM</span> <span class="p">(</span><span class="k">SELECT</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="nb">YEAR</span> <span class="k">from</span> <span class="n">birth_date</span><span class="p">::</span><span class="nb">date</span><span class="p">)</span> <span class="o">*</span> <span class="mi">10000</span> <span class="o">+</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="k">MONTH</span> <span class="k">from</span> <span class="n">birth_date</span><span class="p">::</span><span class="nb">date</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span> <span class="o">+</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="nb">YEAR</span> <span class="k">from</span> <span class="n">birth_date</span><span class="p">::</span><span class="nb">date</span><span class="p">)</span> <span class="k">AS</span> <span class="n">birth_date_integer</span>
<span class="p">,</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="nb">YEAR</span> <span class="k">from</span> <span class="k">CURRENT_DATE</span><span class="p">)</span> <span class="o">*</span> <span class="mi">10000</span> <span class="o">+</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="k">MONTH</span> <span class="k">from</span> <span class="k">CURRENT_DATE</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span> <span class="o">+</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="nb">YEAR</span> <span class="k">from</span> <span class="k">CURRENT_DATE</span><span class="p">)</span> <span class="k">AS</span> <span class="n">current_date_integer</span>
<span class="k">FROM</span> <span class="n">mst_users_with_dates</span> <span class="n">muwd</span><span class="p">)</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-019.png" alt="screenshot019" /></p>
<p><br /></p>
<h3 id="366-handle-ip-address">3.6.6. Handle IP address</h3>
<ul>
<li>There are many log data which has IP addresses</li>
<li>Generally, IP address is stored as string data type. But, there are lots of cases to compare IP addresses</li>
</ul>
<h4 id="use-ip-address-data-type">Use IP address data type</h4>
<ul>
<li>PostgreSQL supports <strong>inet</strong> data type which is useful to compare IP addresses</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Compare IP addresses</span>
<span class="k">SELECT</span> <span class="k">CAST</span><span class="p">(</span><span class="s1">'127.0.0.1'</span> <span class="k">AS</span> <span class="n">inet</span><span class="p">)</span> <span class="o"><</span> <span class="k">CAST</span><span class="p">(</span><span class="s1">'127.0.0.2'</span> <span class="k">AS</span> <span class="n">inet</span><span class="p">)</span> <span class="k">AS</span> <span class="n">lt</span>
<span class="p">,</span> <span class="k">CAST</span><span class="p">(</span><span class="s1">'127.0.0.1'</span> <span class="k">AS</span> <span class="n">inet</span><span class="p">)</span> <span class="o">></span> <span class="k">CAST</span><span class="p">(</span><span class="s1">'192.168.0.1'</span> <span class="k">AS</span> <span class="n">inet</span><span class="p">)</span> <span class="k">AS</span> <span class="n">gt</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-020.png" alt="screenshot020" /></p>
<p><br /></p>
<ul>
<li>Find out whether an IP address is contained or not using <strong>«</strong> or <strong>»</strong> functions</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Find out whether an IP address is contained or not</span>
<span class="k">SELECT</span> <span class="k">CAST</span><span class="p">(</span><span class="s1">'127.0.0.1'</span> <span class="k">AS</span> <span class="n">inet</span><span class="p">)</span> <span class="o"><<</span> <span class="k">CAST</span><span class="p">(</span><span class="s1">'127.0.0.0/8'</span> <span class="k">AS</span> <span class="n">inet</span><span class="p">)</span> <span class="k">AS</span> <span class="n">is_contained</span><span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-021.png" alt="screenshot021" /></p>
<p><br /></p>
<h4 id="handle-ip-address-as-integer-or-string">Handle IP address as integer or string</h4>
<ul>
<li>Convert IP address into integer data type</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Convert IP address into integer data type</span>
<span class="k">SELECT</span> <span class="n">ip</span>
<span class="c1">-- if PostgreSQL, Redshift (split_part)</span>
<span class="p">,</span> <span class="k">CAST</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">integer</span><span class="p">)</span> <span class="k">AS</span> <span class="n">ip_part_1</span>
<span class="p">,</span> <span class="k">CAST</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">integer</span><span class="p">)</span> <span class="k">AS</span> <span class="n">ip_part_2</span>
<span class="p">,</span> <span class="k">CAST</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">integer</span><span class="p">)</span> <span class="k">AS</span> <span class="n">ip_part_3</span>
<span class="p">,</span> <span class="k">CAST</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">integer</span><span class="p">)</span> <span class="k">AS</span> <span class="n">ip_part_4</span>
<span class="c1">--</span>
<span class="c1">-- if Hive, SparkSQL</span>
<span class="c1">-- , CAST(split(ip, '\\.')[0] AS int) AS ip_part_1</span>
<span class="c1">-- , CAST(split(ip, '\\.')[1] AS int) AS ip_part_2</span>
<span class="c1">-- , CAST(split(ip, '\\.')[2] AS int) AS ip_part_3</span>
<span class="c1">-- , CAST(split(ip, '\\.')[3] AS int) AS ip_part_4</span>
<span class="c1">--</span>
<span class="c1">-- if BigQuery</span>
<span class="c1">-- , CAST(split(ip, '.')[0] AS int) AS ip_part_1</span>
<span class="c1">-- , CAST(split(ip, '.')[1] AS int) AS ip_part_2</span>
<span class="c1">-- , CAST(split(ip, '.')[2] AS int) AS ip_part_3</span>
<span class="c1">-- , CAST(split(ip, '.')[3] AS int) AS ip_part_4</span>
<span class="k">FROM</span> <span class="p">(</span><span class="k">SELECT</span> <span class="k">CAST</span><span class="p">(</span><span class="s1">'192.168.0.1'</span> <span class="k">AS</span> <span class="nb">text</span><span class="p">)</span> <span class="k">AS</span> <span class="n">ip</span><span class="p">)</span> <span class="k">AS</span> <span class="n">t</span>
<span class="c1">-- Other databases</span>
<span class="c1">-- (SELECT '192.168.0.1' AS ip) AS t</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-022.png" alt="screenshot022" /></p>
<p><br /></p>
<ul>
<li>You can get one integer from IP address
<ul>
<li>Multiply 4 parts from IP address and 2^24, 2^16, 2^8, 2^0 respectively</li>
</ul>
</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Convert IP address into integer</span>
<span class="k">SELECT</span> <span class="n">ip</span>
<span class="c1">-- if PostgreSQL, Redshift (split_part)</span>
<span class="p">,</span> <span class="k">CAST</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">integer</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span><span class="o">^</span><span class="mi">24</span>
<span class="o">+</span> <span class="k">CAST</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">integer</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span><span class="o">^</span><span class="mi">16</span>
<span class="o">+</span> <span class="k">CAST</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">integer</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span><span class="o">^</span><span class="mi">8</span>
<span class="o">+</span> <span class="k">CAST</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">integer</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span><span class="o">^</span><span class="mi">0</span>
<span class="k">AS</span> <span class="n">ip_integer</span>
<span class="c1">--</span>
<span class="c1">-- if Hive, SparkSQL</span>
<span class="c1">-- , CAST(split(ip, '\\.')[0] AS int) * pow(2, 24)</span>
<span class="c1">-- + CAST(split(ip, '\\.')[1] AS int) * pow(2, 16)</span>
<span class="c1">-- + CAST(split(ip, '\\.')[2] AS int) * pow(2, 8)</span>
<span class="c1">-- + CAST(split(ip, '\\.')[3] AS int) * pow(2, 0)</span>
<span class="c1">--</span>
<span class="c1">-- if BigQuery</span>
<span class="c1">-- , CAST(split(ip, '.')[SAFE_ORDINAL(1)] AS int64) * pow(2, 24)</span>
<span class="c1">-- + CAST(split(ip, '.')[SAFE_ORDINAL(2)] AS int64) * pow(2, 16)</span>
<span class="c1">-- + CAST(split(ip, '.')[SAFE_ORDINAL(3)] AS int64) * pow(2, 8)</span>
<span class="c1">-- + CAST(split(ip, '.')[SAFE_ORDINAL(4)] AS int64) * pow(2, 0)</span>
<span class="c1">-- AS ip_integer</span>
<span class="k">FROM</span> <span class="p">(</span><span class="k">SELECT</span> <span class="k">CAST</span><span class="p">(</span><span class="s1">'192.168.0.1'</span> <span class="k">AS</span> <span class="nb">text</span><span class="p">)</span> <span class="k">AS</span> <span class="n">ip</span><span class="p">)</span> <span class="k">AS</span> <span class="n">t</span>
<span class="c1">-- Other databases</span>
<span class="c1">-- (SELECT '192.168.0.1' AS ip) AS t</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-023.png" alt="screenshot023" /></p>
<p><br /></p>
<ul>
<li>Convert IP address into string with 0 padding</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Convert IP address into string with 0 padding</span>
<span class="k">SELECT</span> <span class="n">ip</span>
<span class="c1">-- if PostgreSQL, Redshift (lpad)</span>
<span class="p">,</span> <span class="n">lpad</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'0'</span><span class="p">)</span>
<span class="o">||</span> <span class="n">lpad</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'0'</span><span class="p">)</span>
<span class="o">||</span> <span class="n">lpad</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'0'</span><span class="p">)</span>
<span class="o">||</span> <span class="n">lpad</span><span class="p">(</span><span class="n">split_part</span><span class="p">(</span><span class="n">ip</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'0'</span><span class="p">)</span>
<span class="k">AS</span> <span class="n">ip_padding</span>
<span class="c1">--</span>
<span class="c1">-- if Hive, SparkSQL</span>
<span class="c1">-- , CONCAT(lpad(split(ip, '\\.')[0], 3, '0')</span>
<span class="c1">-- , lpad(split(ip, '\\.')[1], 3, '0')</span>
<span class="c1">-- , lpad(split(ip, '\\.')[2], 3, '0')</span>
<span class="c1">-- , lpad(split(ip, '\\.')[3], 3, '0')</span>
<span class="c1">-- ) AS ip_padding</span>
<span class="c1">--</span>
<span class="c1">-- if BigQuery</span>
<span class="c1">-- , CONCAT(lpad(split(ip, '.')[SAFE_ORDINAL(1)], 3, '0')</span>
<span class="c1">-- , lpad(split(ip, '.')[SAFE_ORDINAL(2)], 3, '0')</span>
<span class="c1">-- , lpad(split(ip, '.')[SAFE_ORDINAL(3)], 3, '0')</span>
<span class="c1">-- , lpad(split(ip, '.')[SAFE_ORDINAL(4)], 3, '0')</span>
<span class="c1">-- ) AS ip_padding</span>
<span class="k">FROM</span> <span class="p">(</span><span class="k">SELECT</span> <span class="k">CAST</span><span class="p">(</span><span class="s1">'192.168.0.1'</span> <span class="k">AS</span> <span class="nb">text</span><span class="p">)</span> <span class="k">AS</span> <span class="n">ip</span><span class="p">)</span> <span class="k">AS</span> <span class="n">t</span>
<span class="c1">-- Other databases</span>
<span class="c1">-- (SELECT '192.168.0.1' AS ip) AS t</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-28-bigdata-sql-sqlrecipeforanalysis-003-024.png" alt="screenshot024" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li>데이터 분석을 위한 SQL 레시피 - 한빛미디어</li>
</ul>
Tue, 28 Jan 2020 00:00:00 +0000
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-003/
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-003/
bigdata
sql
analyze
data
tutorial
BigData
DataAnalysis
-
[Data Analysis] SQL Recipe for Data Analysis Tutorial #2 - Manipulating a single value
<h1 id="goal">Goal</h1>
<ul>
<li>Studying SQL for data analysis</li>
<li>Practicing chapter 3rd in the book</li>
<li>Studying SQL for Manipulating data</li>
</ul>
<p><br /></p>
<hr />
<h1 id="practice">Practice</h1>
<h2 id="book-for-studying">Book for studying</h2>
<table>
<thead>
<tr>
<th>Title</th>
<th>데이터 분석을 위한 SQL 레시피</th>
</tr>
</thead>
<tbody>
<tr>
<td>Author</td>
<td>Nagato Kasaki, Naoto Tamiya</td>
</tr>
<tr>
<td>Translator</td>
<td>윤인성</td>
</tr>
<tr>
<td>Publisher</td>
<td>한빛미디어</td>
</tr>
<tr>
<td>Chapter</td>
<td>3</td>
</tr>
<tr>
<td>Lesson</td>
<td>5</td>
</tr>
</tbody>
</table>
<p><br /></p>
<ul>
<li>I’m gonna study basic SQL syntax and functions for data analysis</li>
<li>I’m gonna study how to manipulate from a single value to multiple tables</li>
<li>I’m gonna try to load test data on PostgreSQL and execute queries in the book</li>
</ul>
<p><br /></p>
<h2 id="35-manipulating-a-single-value">3.5. Manipulating a single value</h2>
<ul>
<li><a href="/assets/sql/sql_recipe_tutorial_003.sql">Download tutorial SQL file</a></li>
</ul>
<h3 id="351-replace-the-code-value-with-a-label">3.5.1. Replace the code value with a label</h3>
<ul>
<li>To replace the code value with some label to enhance the readability</li>
</ul>
<p><br /></p>
<h4 id="make-sample-table-and-data">Make sample table and data</h4>
<ul>
<li>Create user master table which has 3 colums</li>
<li>register_device column has 3 types of code data
<ul>
<li>1: Desktop</li>
<li>2: Smartphone</li>
<li>3: Application</li>
</ul>
</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Create user master table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">mst_users</span><span class="p">(</span>
<span class="n">user_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">register_date</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">register_device</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">mst_users</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'U001'</span><span class="p">,</span> <span class="s1">'2020-08-26'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U002'</span><span class="p">,</span> <span class="s1">'2016-08-26'</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'U003'</span><span class="p">,</span> <span class="s1">'2016-08-27'</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">mst_users</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-27-bigdata-sql-sqlrecipeforanalysis-002-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h4 id="execute-query">Execute Query</h4>
<ul>
<li>Use <strong>CASE</strong> clause</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Query for replacing code with label</span>
<span class="k">SELECT</span> <span class="n">user_id</span>
<span class="p">,</span> <span class="k">CASE</span> <span class="k">WHEN</span> <span class="n">register_device</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">THEN</span> <span class="s1">'Desktop'</span>
<span class="k">WHEN</span> <span class="n">register_device</span> <span class="o">=</span> <span class="mi">2</span> <span class="k">THEN</span> <span class="s1">'Smartphone'</span>
<span class="k">WHEN</span> <span class="n">register_device</span> <span class="o">=</span> <span class="mi">3</span> <span class="k">THEN</span> <span class="s1">'Application'</span>
<span class="c1">-- ELSE (Default)</span>
<span class="k">END</span> <span class="k">AS</span> <span class="n">device_name</span>
<span class="k">FROM</span> <span class="n">mst_users</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-27-bigdata-sql-sqlrecipeforanalysis-002-002.png" alt="screenshot002" /></p>
<p><br /></p>
<h3 id="352-extract-some-factors-from-url">3.5.2. Extract some factors from URL</h3>
<h4 id="create-access-log-table">Create access log table</h4>
<ul>
<li>This table has 3 columns such as referrer and url</li>
<li>There are several databases that have URL data type</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS access_log ;</span>
<span class="c1">-- Create access log table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">access_log</span> <span class="p">(</span>
<span class="n">stamp</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">referrer</span> <span class="nb">text</span>
<span class="p">,</span> <span class="n">url</span> <span class="nb">text</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">access_log</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'2020-01-27 12:02:00'</span><span class="p">,</span> <span class="s1">'https://www.other.com/path1/index.php?k1=v1&k2=v2#Ref1'</span><span class="p">,</span> <span class="s1">'http://www.example.com/video/detail?id=001'</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-27 12:02:01'</span><span class="p">,</span> <span class="s1">'https://www.other.net/path1/index.php?k1=v1&k2=v2#Ref1'</span><span class="p">,</span> <span class="s1">'http://www.example.com/video#ref'</span> <span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'2020-01-27 12:02:01'</span><span class="p">,</span> <span class="s1">'https://www.other.com/'</span> <span class="p">,</span> <span class="s1">'http://www.example.com/book/detail?id=002'</span> <span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">access_log</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-27-bigdata-sql-sqlrecipeforanalysis-002-003.png" alt="screenshot003" /></p>
<p><br /></p>
<h4 id="extract-the-domain-of-a-referrer">Extract the domain of a referrer</h4>
<ul>
<li>Furthermore, Hive and BigQuery have the function hadling URL</li>
<li>Unfortunately, you have to extract the domain by using regex expression if you are using other databases</li>
</ul>
<blockquote>
<p>HTTP referer : (a misspelling of referrer[1]) is an optional HTTP header field that identifies the address of the webpage (i.e. the URI or IRI) which is linked to the resource being requested. By checking the referrer, the new webpage can see where the request originated</p>
</blockquote>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Extract the domain of referrer</span>
<span class="k">SELECT</span> <span class="n">stamp</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">referrer</span> <span class="k">from</span> <span class="s1">'https?://([^/]*)'</span><span class="p">)</span> <span class="k">AS</span> <span class="n">referrer_domain</span>
<span class="c1">-- if Redshift</span>
<span class="c1">-- , regexp_replace(regexp_substr(referrer, 'https?://[^/]*'), (https?://', '') AS referrer_domain</span>
<span class="c1">-- if Hive or SparkSQL</span>
<span class="c1">-- , parse_url(refferer, 'HOST') AS referrer_domain</span>
<span class="c1">-- if BigQuery</span>
<span class="c1">-- , host(referrer) AS referrer_domain</span>
<span class="k">FROM</span> <span class="n">access_log</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-27-bigdata-sql-sqlrecipeforanalysis-002-004.png" alt="screenshot004" /></p>
<p><br /></p>
<h4 id="extract-the-path-and-query-parameters-from-url">Extract the path and query parameters from URL</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Extract the path and query parameters from URL</span>
<span class="k">SELECT</span> <span class="n">stamp</span>
<span class="p">,</span> <span class="n">url</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">url</span> <span class="k">from</span> <span class="s1">'//[^/]+([^?#]+)'</span><span class="p">)</span> <span class="k">AS</span> <span class="n">path</span>
<span class="p">,</span> <span class="k">substring</span><span class="p">(</span><span class="n">url</span> <span class="k">from</span> <span class="s1">'id=([^%]*)'</span><span class="p">)</span> <span class="k">AS</span> <span class="n">id</span>
<span class="c1">-- if Redshift</span>
<span class="c1">-- , regexp_replace(regexp_substr(referrer, '//[^/]+([^?#]+)'), '//[^/]+', '') AS path</span>
<span class="c1">-- , regexp_replace(regexp_substr(referrer, 'id=([^%]*)', 'id=', '') AS id</span>
<span class="c1">-- if Hive or SparkSQL</span>
<span class="c1">-- , parse_url(refferer, 'PATH') AS path</span>
<span class="c1">-- , parse_url(refferer, 'QUERY') AS id</span>
<span class="c1">-- if BigQuery</span>
<span class="c1">-- , parse_url(url, '//[^/]+([^?#]+)') AS path </span>
<span class="c1">-- , parse_url(url, 'id=([^%]*)') AS id</span>
<span class="k">FROM</span> <span class="n">access_log</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-27-bigdata-sql-sqlrecipeforanalysis-002-005.png" alt="screenshot006" /></p>
<p><br /></p>
<h3 id="353-separate-string-into-array">3.5.3. Separate string into array</h3>
<ul>
<li>There are many cases that you have to separate string by comma or space or anything else</li>
<li>I’m gonna show path level from URL in <strong>access_log</strong> table</li>
</ul>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Extract path hierarchy</span>
<span class="k">SELECT</span> <span class="n">stamp</span>
<span class="p">,</span> <span class="n">url</span>
<span class="p">,</span> <span class="n">split_part</span><span class="p">(</span><span class="k">substring</span><span class="p">(</span><span class="n">url</span> <span class="k">from</span> <span class="s1">'//[^/]+([^?#]+)'</span><span class="p">),</span> <span class="s1">'/'</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">AS</span> <span class="n">path1</span>
<span class="p">,</span> <span class="n">split_part</span><span class="p">(</span><span class="k">substring</span><span class="p">(</span><span class="n">url</span> <span class="k">from</span> <span class="s1">'//[^/]+([^?#]+)'</span><span class="p">),</span> <span class="s1">'/'</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="k">AS</span> <span class="n">path2</span>
<span class="c1">-- if Redshift</span>
<span class="c1">-- , split_part(regexp_replace(regexp_substr(url, '//[^/]+([^?#]+'), '//[^/]+([^?#]+', ''), '/' 2) AS path1</span>
<span class="c1">-- , split_part(regexp_replace(regexp_substr(url, '//[^/]+([^?#]+'), '//[^/]+([^?#]+', ''), '/' 3) AS path2</span>
<span class="c1">-- if Hive or SparkSQL (Index number starts from 0)</span>
<span class="c1">-- , split(parse_url(url, 'PATH'), '/')[1] AS path1</span>
<span class="c1">-- , split(parse_url(url, 'PATH'), '/')[2] AS path2</span>
<span class="c1">-- if BigQuery</span>
<span class="c1">-- , split(regexp_extract(url, '//[^/]+([^?#]+)'), '/')[SAFE_ORDINAL(2)] AS path1</span>
<span class="c1">-- , split(regexp_extract(url, '//[^/]+([^?#]+)'), '/')[SAFE_ORDINAL(3)] AS path2</span>
<span class="k">FROM</span> <span class="n">access_log</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-27-bigdata-sql-sqlrecipeforanalysis-002-006.png" alt="screenshot006" /></p>
<p><br /></p>
<blockquote>
<p>Redshift doesn’t support array data type officially. However, you can get Nth factor from separated string through <strong>split_part</strong> function</p>
</blockquote>
<blockquote>
<p>Generally, array index is 1 based, while array index is 0 based in Hive and SparkSQL</p>
</blockquote>
<blockquote>
<p>In BigQuery, there are several ways to access a specific index</p>
<blockquote>
<p>OFFSET: 0 Based & Error occurs when you access the index which exceeds the boundary of the array
<br />
ORDINAL: 1 Based & Error occurs when you access the index which exceeds the boundary of the array
<br />
SAFE_OFFSET: 0 Based & Return null when you access the index which exceeds the boundary of the array
<br />
SAFE_ORDINAL: 1 Based & Return null when you access the index which exceeds the boundary of the array</p>
</blockquote>
</blockquote>
<p><br /></p>
<h3 id="354-handling-date-and-timestamp">3.5.4. Handling date and timestamp</h3>
<h4 id="extract-current-date-and-current-timestamp">Extract current date and current timestamp</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Extract current date and current timestamp</span>
<span class="k">SELECT</span>
<span class="c1">-- if PostgreSQL, Hive, BigQuery</span>
<span class="k">CURRENT_DATE</span> <span class="k">as</span> <span class="n">dt</span>
<span class="p">,</span> <span class="k">CURRENT_TIMESTAMP</span> <span class="k">as</span> <span class="n">stamp</span>
<span class="c1">-- if Hive, SparkSQL, BigQuery</span>
<span class="c1">-- CURRENT_DATE() as dt</span>
<span class="c1">-- , CURRENT_TIMESTAMP() as stamp</span>
<span class="c1">-- if Redshift</span>
<span class="c1">-- CURRENT_DATE as dt</span>
<span class="c1">-- , GETDATE() as stamp</span>
<span class="c1">-- if PostgreSQL, timestamp without timezone</span>
<span class="p">,</span> <span class="k">LOCALTIMESTAMP</span> <span class="k">as</span> <span class="n">local_stamp</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-27-bigdata-sql-sqlrecipeforanalysis-002-007.png" alt="screenshot007" /></p>
<p><br /></p>
<blockquote>
<p>Generally, the functions related to timestamp return timestamp without timezone, while <strong>CURRENT_TIMESTAMP</strong> in PostgreSQL returns timestamp with timezone</p>
</blockquote>
<blockquote>
<p>In contrast, <strong>LOCALTIMESTAMP</strong> in PostgreSQL returns timestamp without timezone</p>
</blockquote>
<blockquote>
<p>In BigQuery, <strong>CURRENT_TIMESTAMP</strong> or <strong>CURRENT_TIMESTAMP()</strong> returns <strong>UTC</strong> time</p>
</blockquote>
<p><br /></p>
<h4 id="convert-string-data-type-into-datetimestamp">Convert string data type into date/timestamp</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Convert string data type into date/timestamp</span>
<span class="k">SELECT</span>
<span class="c1">-- if PostgreSQL, Hive, SparkSQL, Redshift, BigQuery</span>
<span class="k">CAST</span><span class="p">(</span><span class="s1">'2020-01-27'</span> <span class="k">AS</span> <span class="nb">date</span><span class="p">)</span> <span class="k">AS</span> <span class="n">dt</span>
<span class="p">,</span> <span class="k">CAST</span><span class="p">(</span><span class="s1">'2020-01-27 23:15:10'</span> <span class="k">AS</span> <span class="nb">timestamp</span><span class="p">)</span> <span class="k">AS</span> <span class="n">stamp</span>
<span class="c1">-- if Hive, BigQuery</span>
<span class="c1">-- date('2020-01-27') AS dt</span>
<span class="c1">-- , timestamp('2020-01-27 23:15:10') AS stamp</span>
<span class="c1">-- if PostgreSQL, Hive, SparkSQL, Redshift, BigQuery. * Value must be not column name but constant value</span>
<span class="c1">-- date('2020-01-27') AS dt</span>
<span class="c1">-- , timestamp('2020-01-27 23:15:10') AS stamp</span>
<span class="c1">-- if PostgreSQL, Redshift</span>
<span class="p">,</span> <span class="s1">'2020-01-27'</span><span class="p">::</span><span class="nb">date</span> <span class="k">AS</span> <span class="n">dt2</span>
<span class="p">,</span> <span class="s1">'2020-01-27 23:15:10'</span><span class="p">::</span><span class="nb">timestamp</span> <span class="k">AS</span> <span class="n">stamp2</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-27-bigdata-sql-sqlrecipeforanalysis-002-008.png" alt="screenshot008" /></p>
<p><br /></p>
<h4 id="extract-a-specific-field-from-datetimestamp">Extract a specific field from date/timestamp</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Extract a specific field from date/timestamp</span>
<span class="k">SELECT</span> <span class="n">stamp</span>
<span class="c1">-- if PostgreSQL, Redshift, BigQuery</span>
<span class="p">,</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="nb">YEAR</span> <span class="k">from</span> <span class="n">stamp</span><span class="p">)</span> <span class="k">AS</span> <span class="nb">year</span>
<span class="p">,</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="k">MONTH</span> <span class="k">from</span> <span class="n">stamp</span><span class="p">)</span> <span class="k">AS</span> <span class="k">month</span>
<span class="p">,</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="k">DAY</span> <span class="k">from</span> <span class="n">stamp</span><span class="p">)</span> <span class="k">AS</span> <span class="k">day</span>
<span class="p">,</span> <span class="k">EXTRACT</span><span class="p">(</span><span class="n">HOUR</span> <span class="k">from</span> <span class="n">stamp</span><span class="p">)</span> <span class="k">AS</span> <span class="n">hour</span>
<span class="c1">-- if Hive, SparkSQL</span>
<span class="c1">-- , YEAR(stamp) AS year</span>
<span class="c1">-- , MONTH(stamp) AS month</span>
<span class="c1">-- , DAY(stamp) AS day</span>
<span class="c1">-- , HOUR(stamp) AS hour</span>
<span class="k">FROM</span> <span class="p">(</span><span class="k">SELECT</span> <span class="k">CAST</span><span class="p">(</span><span class="s1">'2020-01-27 23:26:39'</span> <span class="k">AS</span> <span class="nb">timestamp</span><span class="p">)</span> <span class="k">AS</span> <span class="n">stamp</span><span class="p">)</span> <span class="k">AS</span> <span class="n">t</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-27-bigdata-sql-sqlrecipeforanalysis-002-009.png" alt="screenshot009" /></p>
<p><br /></p>
<h3 id="355-replace-null-with-defaul-value">3.5.5. Replace null with defaul value</h3>
<ul>
<li>The result of arithmetic operation with <strong>NULL</strong></li>
</ul>
<h4 id="create-sample-table-and-insert-sample-data">Create sample table and insert sample data</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- DROP TABLE IF EXISTS purchase_log_with_coupon;</span>
<span class="c1">-- Create purchage log table</span>
<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">purchase_log_with_coupon</span> <span class="p">(</span>
<span class="n">purchase_id</span> <span class="nb">varchar</span><span class="p">(</span><span class="mi">255</span><span class="p">)</span>
<span class="p">,</span> <span class="n">amount</span> <span class="nb">integer</span>
<span class="p">,</span> <span class="n">coupon</span> <span class="nb">integer</span>
<span class="p">);</span>
<span class="c1">-- Insert sample data</span>
<span class="k">INSERT</span> <span class="k">INTO</span> <span class="n">purchase_log_with_coupon</span>
<span class="k">VALUES</span>
<span class="p">(</span><span class="s1">'10001'</span><span class="p">,</span> <span class="mi">3280</span><span class="p">,</span> <span class="k">NULL</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'10002'</span><span class="p">,</span> <span class="mi">4650</span><span class="p">,</span> <span class="mi">500</span><span class="p">)</span>
<span class="p">,</span> <span class="p">(</span><span class="s1">'10003'</span><span class="p">,</span> <span class="mi">3870</span><span class="p">,</span> <span class="k">NULL</span><span class="p">)</span>
<span class="p">;</span>
<span class="k">commit</span><span class="p">;</span>
<span class="c1">-- Select sample data</span>
<span class="k">SELECT</span> <span class="o">*</span>
<span class="k">FROM</span> <span class="n">purchase_log_with_coupon</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-27-bigdata-sql-sqlrecipeforanalysis-002-010.png" alt="screenshot010" /></p>
<p><br /></p>
<h4 id="compare-the-sum-with-null-to-the-one-with-default-value">Compare the sum with null to the one with default value</h4>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">-- Calculate the total sales except for coupon</span>
<span class="k">SELECT</span> <span class="n">purchase_id</span>
<span class="p">,</span> <span class="n">amount</span>
<span class="p">,</span> <span class="n">coupon</span>
<span class="p">,</span> <span class="n">amount</span> <span class="o">-</span> <span class="n">coupon</span> <span class="k">AS</span> <span class="n">discount_amount_invalid</span>
<span class="p">,</span> <span class="n">amount</span> <span class="o">-</span> <span class="n">COALESCE</span><span class="p">(</span><span class="n">coupon</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="k">AS</span> <span class="n">discount_amount_valid</span>
<span class="k">FROM</span> <span class="n">purchase_log_with_coupon</span>
<span class="p">;</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-27-bigdata-sql-sqlrecipeforanalysis-002-011.png" alt="screenshot011" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li>데이터 분석을 위한 SQL 레시피 - 한빛미디어</li>
<li><a href="https://en.wikipedia.org/wiki/HTTP_referer" target="_blank">HTTP Referer Wiki</a></li>
</ul>
Mon, 27 Jan 2020 00:00:00 +0000
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-002/
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-002/
bigdata
sql
analyze
data
tutorial
BigData
DataAnalysis
-
[Data Analysis] SQL Recipe for Data Analysis Tutorial #1 - Setup the environment
<h1 id="goal">Goal</h1>
<ul>
<li>Studying SQL for data analysis</li>
<li>Install PostgreSQL docker for buildiing testing environment</li>
</ul>
<p><br /></p>
<hr />
<h1 id="practice">Practice</h1>
<h3 id="book-for-studying">Book for studying</h3>
<table>
<thead>
<tr>
<th>Title</th>
<th>데이터 분석을 위한 SQL 레시피</th>
</tr>
</thead>
<tbody>
<tr>
<td>Author</td>
<td>Nagato Kasaki, Naoto Tamiya</td>
</tr>
<tr>
<td>Translator</td>
<td>윤인성</td>
</tr>
<tr>
<td>Publisher</td>
<td>한빛미디어</td>
</tr>
</tbody>
</table>
<p><br /></p>
<ul>
<li>I’m gonna study SQL syntax and functions for data analysis</li>
<li>I’m gonna try to load test data on PostgreSQL and execute queries in the book</li>
<li>First of all, I have to install PostgreSQL for testing and I’ll build the environment by using docker image</li>
<li>And docker is already installed in my system</li>
</ul>
<p><br /></p>
<h3 id="1-install">1. Install</h3>
<h4 id="11-check-local-docker-images">1.1. Check local docker images</h4>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>docker image <span class="nb">ls</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h4 id="12-download-docker-image">1.2. Download docker image</h4>
<ul>
<li>Search docker image on DockerHub</li>
</ul>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>docker search <span class="o">[</span>IMAGE]
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-002.png" alt="screenshot002" /></p>
<p><br /></p>
<ul>
<li>Download PostgreSQL image
<blockquote>
<p>I downloaded 12.1 version</p>
</blockquote>
</li>
</ul>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>docker pull <span class="o">[</span>IMAGE][<span class="o">{</span>:TAG<span class="o">}]</span>
<span class="nv">$ </span>docker image <span class="nb">ls</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-003.png" alt="screenshot003" /></p>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-004.png" alt="screenshot004" /></p>
<p><br /></p>
<h3 id="2-run-postgresql-instance">2. Run PostgreSQL instance</h3>
<h4 id="21-create-data-directory">2.1. Create data directory</h4>
<ul>
<li>I’m gonna set data directory on my local directory not on docker image</li>
</ul>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">mkdir</span> <span class="o">[</span>DATA_DIRECTORY]
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-005.png" alt="screenshot005" /></p>
<p><br /></p>
<h4 id="22-run-instance">2.2. Run instance</h4>
<ul>
<li>Options
<ul>
<li>Environment variables</li>
</ul>
</li>
</ul>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
<tr>
<td>POSTGRES_PASSWORD</td>
<td>Sets the superuser password for PostgreSQL</td>
</tr>
<tr>
<td>POSTGRES_USER</td>
<td>Create the specified user with superuser power and a database with the same name. If it is not specified, then the default user of postgres will be used</td>
</tr>
<tr>
<td>POSTGRES_DB</td>
<td>ㅇefine a different name for the default database that is created when the image is first started. If it is not specified, then the value of <strong>POSTGRES_USER</strong> will be used</td>
</tr>
<tr>
<td>PGDATA</td>
<td>The default is /var/lib/postgresql/data, but if the data volume you’re using is a filesystem mountpoint (like with GCE persistent disks), Postgres initdb recommends a subdirectory (for example /var/lib/postgresql/data/pgdata ) be created to contain the data</td>
</tr>
</tbody>
</table>
<p><br /></p>
<ul>
<li>Run</li>
</ul>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>docker run <span class="nt">--name</span> <span class="o">[</span>CONTAINER_NAME] <span class="nt">-e</span> <span class="nv">POSTGRES_PASSWORD</span><span class="o">=[</span>MY_PASSWORD] <span class="nt">-d</span> postgres
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-006.png" alt="screenshot006" /></p>
<p><br /></p>
<ul>
<li>Check running process</li>
</ul>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>docker ps
</code></pre></div></div>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-007.png" alt="screenshot007" /></p>
<p><br /></p>
<h3 id="3-connection-test">3. Connection Test</h3>
<h4 id="31-connect-postgresql-by-db-tool">3.1. Connect PostgreSQL by DB tool</h4>
<ul>
<li>I used DBeaver which is open-source database tool</li>
</ul>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-008.png" alt="screenshot008" /></p>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-009.png" alt="screenshot009" /></p>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-010.png" alt="screenshot010" /></p>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-011.png" alt="screenshot011" /></p>
<p><br /></p>
<h4 id="32-create-table-test">3.2. Create table test</h4>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-012.png" alt="screenshot012" /></p>
<p><img src="/assets/images/posts/2020/01/2020-01-23-bigdata-sql-sqlrecipeforanalysis-001-013.png" alt="screenshot013" />
docker start -i -p 5432:5432/tcp postgres-da</p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li>데이터 분석을 위한 SQL 레시피 - 한빛미디어</li>
<li><a href="https://hub.docker.com/_/postgres" target="_blank">DockerHub PostgreSQL</a></li>
</ul>
Thu, 23 Jan 2020 00:00:00 +0000
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-001/
https://dorbae.github.io/bigdata/dataanalysis/bigdata-dataanalysis-sqlrecipeforanalysis-001/
bigdata
sql
analyze
data
tutorial
BigData
DataAnalysis
-
[MacOS] Macs Fan Control
<h1 id="goal">Goal</h1>
<ul>
<li>What is <strong>Macs Fan Control</strong>?</li>
<li>How to install</li>
</ul>
<p><br /></p>
<hr />
<h1 id="practice">Practice</h1>
<h3 id="macs-fan-control">Macs Fan Control</h3>
<ul>
<li>Monitors and controls fans on Apple computers</li>
<li>Real-time monitoring of fan speed and temperature sensors including 3rd party HDD/SSD (using S.M.A.R.T.)</li>
<li>Set custom RPM value (revolution per minute) or control fan speed in relation to a temperature sensor</li>
<li>Every model of iMac, MacBook (Pro/Air), Mac mini, Mac Pro is supported</li>
</ul>
<p><br /></p>
<h3 id="1-install">1. Install</h3>
<ul>
<li><a href="https://www.crystalidea.com/macs-fan-control/download">Download Site</a></li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-10-macos-tool-macsfancontrol-001.png" alt="screenshot001" /></p>
<p><br /></p>
<ul>
<li>Unzip file</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-10-macos-tool-macsfancontrol-002.png" alt="screenshot002" /></p>
<p><br /></p>
<ul>
<li>Move app file to Applications directory</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-10-macos-tool-macsfancontrol-003.png" alt="screenshot003" /></p>
<p><br /></p>
<h3 id="2-run">2. Run</h3>
<ul>
<li>You can set fixed rate</li>
<li>Also, can set auto speed followed by specific sensor</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-10-macos-tool-macsfancontrol-004.png" alt="screenshot004" /></p>
<p><img src="/assets/images/posts/2019/09/2019-09-10-macos-tool-macsfancontrol-005.png" alt="screenshot005" /></p>
<p><img src="/assets/images/posts/2019/09/2019-09-10-macos-tool-macsfancontrol-006.png" alt="screenshot006" /></p>
<p><img src="/assets/images/posts/2019/09/2019-09-10-macos-tool-macsfancontrol-007.png" alt="screenshot007" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://www.crystalidea.com/macs-fan-control">Macs Fan Contorl Site</a></li>
</ul>
Tue, 10 Sep 2019 00:00:00 +0000
https://dorbae.github.io/macos/tool/macos-tool-macsfancontrol/
https://dorbae.github.io/macos/tool/macos-tool-macsfancontrol/
macos
mac
tool
fan
MacOS
Tool
-
[MacOS] htop
<h1 id="goal">Goal</h1>
<ul>
<li>What is <strong>htop</strong>?</li>
<li>How to install</li>
</ul>
<p><br /></p>
<hr />
<h1 id="practice">Practice</h1>
<h3 id="htop">HTOP</h3>
<ul>
<li>Process manager to monitor system processes</li>
<li>It was developed to replace <strong>top</strong> which was UNIX basic process manager</li>
<li>It illustrates whole processes which are running, while <strong><em>top</em></strong> displays only several processes that occupy large resources</li>
<li>It enhances visual effect by colors and describes the status of processors, swap, memory and so on</li>
<li>It uses <strong><em>Ncurses</em></strong> libaray and is programmed by <strong><em>C language</em></strong></li>
</ul>
<p><br /></p>
<h3 id="1-install">1. Install</h3>
<ul>
<li>Install using <strong><em>brew</em></strong></li>
</ul>
<pre code="SHELL">
$ brew install htop
</pre>
<p><img src="/assets/images/posts/2019/09/2019-09-10-macos-tool-htop-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h3 id="2-run">2. Run</h3>
<pre code="SHELL">
$ htop
</pre>
<p><img src="/assets/images/posts/2019/09/2019-09-10-macos-tool-htop-002.png" alt="screenshot002" /></p>
<p><br /></p>
<p><img src="/assets/images/posts/2019/09/2019-09-10-macos-tool-htop-004.gif" alt="screenshot004" /></p>
<p><br /></p>
<ul>
<li>top</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-10-macos-tool-htop-003.png" alt="screenshot003" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://ko.wikipedia.org/wiki/Htop">htop wiki</a></li>
</ul>
Tue, 10 Sep 2019 00:00:00 +0000
https://dorbae.github.io/macos/tool/macos-tool-htop/
https://dorbae.github.io/macos/tool/macos-tool-htop/
macos
mac
tool
htop
MacOS
Tool
-
[Java] Jackson JSON 'Unrecognized token ***
<h1 id="problem">Problem</h1>
<ul>
<li>I receive JSON data from Django REST Server</li>
<li>However, it caused ‘Unrecognized token’ error</li>
<li>In my case, this error occured by ‘True’ and ‘None’</li>
</ul>
<div style="background: #272822; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<table><tr><td><pre style="margin: 0; line-height: 125%"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14</pre></td><td><pre style="margin: 0; line-height: 125%"><span style="color: #ae81ff">2019</span><span style="color: #f92672">-</span><span style="color: #ae81ff">09</span><span style="color: #f92672">-</span><span style="color: #ae81ff">06</span> <span style="color: #ae81ff">17</span><span style="color: #f92672">:</span><span style="color: #ae81ff">20</span><span style="color: #f92672">:</span><span style="color: #ae81ff">57.019</span> <span style="color: #ae81ff">28853</span><span style="color: #f92672">-</span><span style="color: #ae81ff">28945</span><span style="color: #f92672">/***</span> <span style="color: #f8f8f2">E</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dorbae:</span> <span style="color: #f8f8f2">Failed</span> <span style="color: #f8f8f2">to</span> <span style="color: #f8f8f2">get</span> <span style="color: #f8f8f2">DB</span> <span style="color: #f8f8f2">data</span><span style="color: #f92672">.</span>
<span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">core</span><span style="color: #f92672">.</span><span style="color: #a6e22e">JsonParseException</span><span style="color: #f92672">:</span> <span style="color: #f8f8f2">Unrecognized</span> <span style="color: #f8f8f2">token</span> <span style="color: #960050; background-color: #1e0010">'</span><span style="color: #f8f8f2">True</span><span style="color: #960050; background-color: #1e0010">'</span><span style="color: #f92672">:</span> <span style="color: #f8f8f2">was</span> <span style="color: #f8f8f2">expecting</span> <span style="color: #f92672">(</span><span style="color: #960050; background-color: #1e0010">'</span><span style="color: #66d9ef">true</span><span style="color: #960050; background-color: #1e0010">'</span><span style="color: #f92672">,</span> <span style="color: #960050; background-color: #1e0010">'</span><span style="color: #66d9ef">false</span><span style="color: #960050; background-color: #1e0010">'</span> <span style="color: #f8f8f2">or</span> <span style="color: #960050; background-color: #1e0010">'</span><span style="color: #66d9ef">null</span><span style="color: #960050; background-color: #1e0010">'</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f92672">[</span><span style="color: #f8f8f2">Source:</span> <span style="color: #f92672">(</span><span style="color: #66d9ef">byte</span><span style="color: #f92672">[])</span><span style="color: #e6db74">"{'name': 'WFS', 'columns': ['time', 'current'], 'values': [['2019-08-24T15:20:31+09:00', 7], ['2019-08-24T11:28:41+09:00', 6], ['2019-08-24T06:29:02+09:00', 4], ['2019-08-24T05:50:00+09:00', 4], ['2019-08-24T02:15:17+09:00', 2], ['2019-08-24T02:15:12+09:00', 2], ['2019-08-23T18:05:16+09:00', 2], ['2019-08-23T17:24:44+09:00', 4], ['2019-08-23T17:22:04+09:00', 2], ['2019-08-23T17:21:59+09:00', 2], ['2019-08-23T06:36:24+09:00', 4], ['2019-08-23T03:45:43+09:00', 2], ['2019-08-23T03:45:38+09:00', 2],"</span><span style="color: #f92672">[</span><span style="color: #f8f8f2">truncated</span> <span style="color: #ae81ff">1953313</span> <span style="color: #f8f8f2">bytes</span><span style="color: #f92672">];</span> <span style="color: #f8f8f2">line:</span> <span style="color: #ae81ff">1</span><span style="color: #f92672">,</span> <span style="color: #f8f8f2">column:</span> <span style="color: #ae81ff">1953814</span><span style="color: #f92672">]</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">core</span><span style="color: #f92672">.</span><span style="color: #a6e22e">JsonParser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">_constructError</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">JsonParser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">1804</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">core</span><span style="color: #f92672">.</span><span style="color: #a6e22e">base</span><span style="color: #f92672">.</span><span style="color: #a6e22e">ParserMinimalBase</span><span style="color: #f92672">.</span><span style="color: #a6e22e">_reportError</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">ParserMinimalBase</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">703</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">core</span><span style="color: #f92672">.</span><span style="color: #a6e22e">json</span><span style="color: #f92672">.</span><span style="color: #a6e22e">UTF8StreamJsonParser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">_reportInvalidToken</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">UTF8StreamJsonParser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">3532</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">core</span><span style="color: #f92672">.</span><span style="color: #a6e22e">json</span><span style="color: #f92672">.</span><span style="color: #a6e22e">UTF8StreamJsonParser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">_handleUnexpectedValue</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">UTF8StreamJsonParser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">2627</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">core</span><span style="color: #f92672">.</span><span style="color: #a6e22e">json</span><span style="color: #f92672">.</span><span style="color: #a6e22e">UTF8StreamJsonParser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">nextFieldName</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">UTF8StreamJsonParser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">1053</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">BeanDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">vanillaDeserialize</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">BeanDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">295</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">BeanDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deserialize</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">BeanDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">151</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">ObjectMapper</span><span style="color: #f92672">.</span><span style="color: #a6e22e">_readMapAndClose</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">ObjectMapper</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">4013</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">ObjectMapper</span><span style="color: #f92672">.</span><span style="color: #a6e22e">readValue</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">ObjectMapper</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">3091</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span>
<span style="color: #f92672">...</span>
</pre></td></tr></table>
</div>
<p><br /></p>
<div style="background: #272822; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<table><tr><td><pre style="margin: 0; line-height: 125%"> 1
2
3
4
5
6
7
8
9
10
11
12</pre></td><td><pre style="margin: 0; line-height: 125%"><span style="color: #ae81ff">2019</span><span style="color: #f92672">-</span><span style="color: #ae81ff">09</span><span style="color: #f92672">-</span><span style="color: #ae81ff">06</span> <span style="color: #ae81ff">17</span><span style="color: #f92672">:</span><span style="color: #ae81ff">30</span><span style="color: #f92672">:</span><span style="color: #ae81ff">03.244</span> <span style="color: #ae81ff">29666</span><span style="color: #f92672">-</span><span style="color: #ae81ff">29758</span><span style="color: #f92672">/***</span> <span style="color: #f8f8f2">E</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dorbae:</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">JsonMappingException</span><span style="color: #f92672">:</span> <span style="color: #f8f8f2">Unrecognized</span> <span style="color: #f8f8f2">token</span> <span style="color: #960050; background-color: #1e0010">'</span><span style="color: #f8f8f2">None</span><span style="color: #960050; background-color: #1e0010">'</span><span style="color: #f92672">:</span> <span style="color: #f8f8f2">was</span> <span style="color: #f8f8f2">expecting</span> <span style="color: #960050; background-color: #1e0010">'</span><span style="color: #66d9ef">null</span><span style="color: #960050; background-color: #1e0010">'</span><span style="color: #f92672">,</span> <span style="color: #960050; background-color: #1e0010">'</span><span style="color: #66d9ef">true</span><span style="color: #960050; background-color: #1e0010">'</span><span style="color: #f92672">,</span> <span style="color: #960050; background-color: #1e0010">'</span><span style="color: #66d9ef">false</span><span style="color: #960050; background-color: #1e0010">'</span> <span style="color: #f8f8f2">or</span> <span style="color: #f8f8f2">NaN</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f92672">[</span><span style="color: #f8f8f2">Source:</span> <span style="color: #f92672">(</span><span style="color: #66d9ef">byte</span><span style="color: #f92672">[])</span><span style="color: #e6db74">"{'name': 'qbsiotseries', 'columns': ['time', 'TEMPERATURE', 'HUMIDITY', 'CO2PPM', 'ILLUMINANCE', 'VALUE00', 'VALUE01', 'VALUE02', 'VALUE03'], 'values': [['2019-08-23T08:00:00Z', None, None, None, None, None, None, None, None], ['2019-08-23T09:00:00Z', None, None, None, None, None, None, None, None], ['2019-08-23T10:00:00Z', None, None, None, None, None, None, None, None], ['2019-08-23T11:00:00Z', None, None, None, None, None, None, None, None], ['2019-08-23T12:00:00Z', None, None, None, None, No"</span><span style="color: #f92672">[</span><span style="color: #f8f8f2">truncated</span> <span style="color: #ae81ff">25509</span> <span style="color: #f8f8f2">bytes</span><span style="color: #f92672">];</span> <span style="color: #f8f8f2">line:</span> <span style="color: #ae81ff">1</span><span style="color: #f92672">,</span> <span style="color: #f8f8f2">column:</span> <span style="color: #ae81ff">179</span><span style="color: #f92672">]</span> <span style="color: #f92672">(</span><span style="color: #f8f8f2">through</span> <span style="color: #f8f8f2">reference</span> <span style="color: #f8f8f2">chain:</span> <span style="color: #f92672">***.</span><span style="color: #a6e22e">InfluxDBResultSet</span><span style="color: #f92672">[</span><span style="color: #e6db74">"values"</span><span style="color: #f92672">]-></span><span style="color: #f8f8f2">java</span><span style="color: #f92672">.</span><span style="color: #a6e22e">lang</span><span style="color: #f92672">.</span><span style="color: #a6e22e">Object</span><span style="color: #f92672">[][</span><span style="color: #ae81ff">0</span><span style="color: #f92672">])</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">std</span><span style="color: #f92672">.</span><span style="color: #a6e22e">ObjectArrayDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deserialize</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">ObjectArrayDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">206</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">std</span><span style="color: #f92672">.</span><span style="color: #a6e22e">ObjectArrayDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deserialize</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">ObjectArrayDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">21</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">impl</span><span style="color: #f92672">.</span><span style="color: #a6e22e">MethodProperty</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deserializeAndSet</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">MethodProperty</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">127</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">BeanDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">vanillaDeserialize</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">BeanDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">288</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deser</span><span style="color: #f92672">.</span><span style="color: #a6e22e">BeanDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">deserialize</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">BeanDeserializer</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">151</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">ObjectMapper</span><span style="color: #f92672">.</span><span style="color: #a6e22e">_readMapAndClose</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">ObjectMapper</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">4013</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span> <span style="color: #f8f8f2">com</span><span style="color: #f92672">.</span><span style="color: #a6e22e">fasterxml</span><span style="color: #f92672">.</span><span style="color: #a6e22e">jackson</span><span style="color: #f92672">.</span><span style="color: #a6e22e">databind</span><span style="color: #f92672">.</span><span style="color: #a6e22e">ObjectMapper</span><span style="color: #f92672">.</span><span style="color: #a6e22e">readValue</span><span style="color: #f92672">(</span><span style="color: #f8f8f2">ObjectMapper</span><span style="color: #f92672">.</span><span style="color: #a6e22e">java</span><span style="color: #f92672">:</span><span style="color: #ae81ff">3091</span><span style="color: #f92672">)</span>
<span style="color: #f8f8f2">at</span>
<span style="color: #f92672">...</span>
</pre></td></tr></table>
</div>
<p><br /></p>
<h1 id="cause">Cause</h1>
<ul>
<li>My architecture</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-09-java-json-unrecognizedtoken-001.png" alt="screenshot001" /></p>
<p><br /></p>
<ul>
<li>Jaskcon libarary was not able to recognize the tokens such as ‘True’, ‘None’ and my django server didn’t nomalize json data</li>
</ul>
<p><br /></p>
<h1 id="solution">Solution</h1>
<h3 id="1-nomalize-json-data-in-django-server">1. Nomalize JSON data in Django server</h3>
<ul>
<li><strong>json.dumps</strong> method nomalizes JSON data followed by <a href="[http://www.ecma-international.org/publications/standards/Ecma-404.htm">ECMA-404</a></li>
<li>True -> true & None -> null</li>
<li>Add this code</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import json
...
json.dumps(jsonObject)
...
</code></pre></div></div>
<p><br /></p>
<div style="background: #090707; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<table><tr><td><pre style="margin: 0; line-height: 125%"> 1
2
3
4
5
6
7
8
9
10
11
12</pre></td><td><pre style="margin: 0; line-height: 125%"> client = InfluxDBClient(host, port, user, password, db_name)
result = client.query(query)
_value = <span style="color: #CD5555">''</span>
_series = result.raw.get(<span style="color: #CD5555">'series'</span>)
<span style="color: #8B008B; font-weight: bold">if</span> _series <span style="color: #8B008B">is</span> <span style="color: #8B008B">not</span> <span style="color: #8B008B; font-weight: bold">None</span>:
<span style="color: #228B22"># None -> Null & Object -> Object[]</span>
_value = json.dumps(_series)
<span style="color: #8B008B; font-weight: bold">return</span> HttpResponse(_value, status=<span style="color: #B452CD">200</span>)
<span style="color: #228B22"># return HTTP Response</span>
<span style="color: #8B008B; font-weight: bold">return</span> HttpResponse(_value, status=<span style="color: #B452CD">404</span>)
</pre></td></tr></table>
</div>
<p><br /></p>
<h3 id="2-skip-null-data-in-android">2. Skip null data in Android</h3>
<ul>
<li>Add this code</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>...
ObjectMapper mapper = new ObjectMapper();
...
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
...
</code></pre></div></div>
<div style="background: #090707; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<table><tr><td><pre style="margin: 0; line-height: 125%">1
2
3
4</pre></td><td><pre style="margin: 0; line-height: 125%">ObjectMapper mapper = <span style="color: #8B008B; font-weight: bold">new</span> ObjectMapper();
mapper.<span style="color: #658b00">configure</span>(JsonParser.<span style="color: #658b00">Feature</span>.<span style="color: #658b00">ALLOW_SINGLE_QUOTES</span>, <span style="color: #8B008B; font-weight: bold">true</span>); <span style="color: #228B22">// 싱글 쿼테이션 허용</span>
mapper.<span style="color: #658b00">setSerializationInclusion</span>(JsonInclude.<span style="color: #658b00">Include</span>.<span style="color: #658b00">NON_NULL</span>);
InfluxDBResultSet[] influxDBResultSetArray = mapper.<span style="color: #658b00">readValue</span>(data, InfluxDBResultSet[].<span style="color: #658b00">class</span>);
</pre></td></tr></table>
</div>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://docs.python.org/3/library/json.html">JSON encoder and decoder</a></li>
<li><a href="http://www.ecma-international.org/publications/standards/Ecma-404.htm">Standard ECMA-404</a></li>
</ul>
Mon, 09 Sep 2019 00:00:00 +0000
https://dorbae.github.io/java/json/java-json-unrecognizedtoken/
https://dorbae.github.io/java/json/java-json-unrecognizedtoken/
java
json
troubleshooting
Java
Json
-
[IoT] What is MQ2?
<h1 id="goal">Goal</h1>
<ul>
<li>What is MQ2</li>
<li>How to operate</li>
</ul>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h3 id="what-is-mq2">What is MQ2</h3>
<ul>
<li>MOS(Metal Oxide Semiconductor) type gas sensor</li>
<li>Can detect LPG, Smoke, Alcohol, Propane, Hydrogen, Methan, Carbon Monoxide(CO)</li>
<li>Detects gas using the change of resistance of the sensing material</li>
</ul>
<p><br /></p>
<h3 id="specification">Specification</h3>
<table>
<thead>
<tr>
<th> </th>
<th> </th>
</tr>
</thead>
<tbody>
<tr>
<td>Operating Voltage</td>
<td>5V</td>
</tr>
<tr>
<td>Load Resistance</td>
<td>20 KΩ</td>
</tr>
<tr>
<td>Heater Resistance</td>
<td>33Ω ± 5%</td>
</tr>
<tr>
<td>Heating Consumption</td>
<td>< 800mw</td>
</tr>
<tr>
<td>Sensing Resistance</td>
<td>10 KΩ - 60 KΩ</td>
</tr>
<tr>
<td>Concentration Scope</td>
<td><del>200</del> 300 - 10,000 ppm)</td>
</tr>
<tr>
<td>Preheat Time</td>
<td>Over 24 hours</td>
</tr>
</tbody>
</table>
<p><br /></p>
<blockquote>
<p>What is <strong>ppm(Parts-per-million)</strong></p>
<ul>
<li>Describe the amount of gas by volume in the air</li>
<li>The ratio of one gas to another</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-04-iot-sensor-mq2-001.png" alt="screenshot001" /></p>
</blockquote>
<p><br /></p>
<h3 id="internal-structure">Internal Structure</h3>
<p><img src="/assets/images/posts/2019/09/2019-09-04-iot-sensor-mq2-002.png" alt="screenshot002" /></p>
<ul>
<li>MQ2 is enclosed in two layers of fine stainless steel mesh. It called <strong>Anti-explosion network</strong></li>
<li>It prevents an explosion by heater element which is inside the sensor
<ul>
<li>MQ2 is sensing flammable gases such as LPG, Propane and so on</li>
</ul>
</li>
<li>It leads only gaseous elements to pass inside the chamber</li>
</ul>
<p><br /></p>
<p><img src="/assets/images/posts/2019/09/2019-09-04-iot-sensor-mq2-003.png" alt="screenshot003" /></p>
<ul>
<li>The star-shaped structure</li>
<li><strong>H</strong>
<ul>
<li>Heats the sensing element and are connected through **Nickel-Chrominum coil(conductive alloy)</li>
</ul>
</li>
<li><strong>A & B</strong>
<ul>
<li>Output signals to platinum wires</li>
<li>It is connected to the body of the sensing element</li>
<li>Conveys small changes in the current</li>
</ul>
</li>
</ul>
<p><br /></p>
<p><img src="/assets/images/posts/2019/09/2019-09-04-iot-sensor-mq2-004.png" alt="screenshot004" /></p>
<p><img src="/assets/images/posts/2019/09/2019-09-04-iot-sensor-mq2-005.png" alt="screenshot005" /></p>
<ul>
<li>The Tin Dioxide(SnO<sub>2</sub>) is the most important material being sensitive towards combustible gases</li>
<li>The ceramic substrate merely increases heating efficiency and ensures the sensor area is heated to a working temperature constantly</li>
</ul>
<p><br /></p>
<h3 id="how-deos-it-work">How deos it work?</h3>
<ul>
<li>The tin dioxide is heated in air at high temperature</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-04-iot-sensor-mq2-006.png" alt="screenshot006" /></p>
<p><br /></p>
<ul>
<li>Oxygen is adsorbed on the surface
<ul>
<li>Donor electrons in the tin dioxide are attracted toward oxygen</li>
<li>This situation prevents electric current flow and the voltage goes down</li>
</ul>
</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-04-iot-sensor-mq2-007.png" alt="screenshot007" /></p>
<p><img src="/assets/images/posts/2019/09/2019-09-04-iot-sensor-mq2-008.png" alt="screenshot008" /></p>
<p><br /></p>
<ul>
<li>Oxygen decreased as it reacts with gases
<ul>
<li>Eletrons are then released into the tin dioxide</li>
<li>Then, it allows current to flow freely through the snesor and the voltage goes up</li>
</ul>
</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-04-iot-sensor-mq2-009.png" alt="screenshot009" /></p>
<p><img src="/assets/images/posts/2019/09/2019-09-04-iot-sensor-mq2-010.png" alt="screenshot010" /></p>
<p><br /></p>
<ul>
<li><strong>i.e.</strong> Cencentration of gases ∝ Voltage
<ul>
<li>Cencentration of gases ↑ -> Voltage ↑</li>
<li>Cencentration of gases ↓ -> Voltage ↓</li>
</ul>
</li>
</ul>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://lastminuteengineers.com/mq2-gas-senser-arduino-tutorial/">How MQ2 Gas/Smoke Sensor Works?</a></li>
</ul>
Wed, 04 Sep 2019 00:00:00 +0000
https://dorbae.github.io/iot/sensor/iot-sensor-mq2/
https://dorbae.github.io/iot/sensor/iot-sensor-mq2/
iot
sensor
mq2
IoT
Sensor
-
[Eclipse RCP] How to fix encoding problem when builing a progrma
<h1 id="problem">Problem</h1>
<ul>
<li>After building my application, text(Korean) in labels were cracked</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-03-eclipsercp-troubleshooting-buildencoding-001.png" alt="screenshoot001" /></p>
<p><br /></p>
<h1 id="cause">Cause</h1>
<ul>
<li>My environment
<ul>
<li>Eclipse workspace encoding : UTF-8</li>
<li>System default encoding : MS949(Windows 10)</li>
</ul>
</li>
<li>When exporting RCP application, it was compiled by default text encoding which was used by the IDE</li>
</ul>
<p><br /></p>
<h1 id="solution">Solution</h1>
<ul>
<li>At first, I tried to add <strong>-Dfile.encoding=UTF8</strong> vm option in [APPLICATION_LAUNCHER_NAME].int file. However, it didn’t work well</li>
<li>Because, text was already cracked when it was compiled</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-03-eclipsercp-troubleshooting-buildencoding-002.png" alt="screenshoot002" /></p>
<p><br /></p>
<ul>
<li>So, I tried to add <strong>javacDefaultEncoding.. = UTF-8</strong> option in <strong>build.properties</strong> file</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-03-eclipsercp-troubleshooting-buildencoding-003.png" alt="screenshoot003" /></p>
<p><br /></p>
<ul>
<li>After that, it did work well</li>
</ul>
<p><img src="/assets/images/posts/2019/09/2019-09-03-eclipsercp-troubleshooting-buildencoding-004.png" alt="screenshoot004" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://translate.google.com/translate?hl=ko&sl=en&tl=ko&u=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F6891079%2Feclipse-rcp-wrong-encoding-when-deploying-the-product&anno=2">Stack Overflow</a></li>
</ul>
Tue, 03 Sep 2019 00:00:00 +0000
https://dorbae.github.io/eclipsercp/eclipsercp-troubleshooting-buildencoding/
https://dorbae.github.io/eclipsercp/eclipsercp-troubleshooting-buildencoding/
eclipse rcp
rcp
eclipse
java
troubleshooting
EclipseRCP
-
[Android] Build error : Execution failed for task ':app:transformDexWithInstantRunslicesApkForDebug after upgrading Android Studio
<h1 id="goal">Goal</h1>
<ul>
<li>Solve the problem error related with build</li>
</ul>
<p><br /></p>
<h1 id="problem">Problem</h1>
<ul>
<li>I upgraded Android Studio 3.2.1 -> 3.4.2</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-13-android-androidstudio-resourcesaperrorafterupgradingandroidstudio-001.png" alt="screenshoot001" /></p>
<p><br /></p>
<ul>
<li>After that, when I built a program, the error occured like below</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-13-android-androidstudio-resourcesaperrorafterupgradingandroidstudio-002.png" alt="screenshoot002" /></p>
<div style="background: #f8f8f8; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<table><tr><td><pre style="margin: 0; line-height: 125%"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182</pre></td><td><pre style="margin: 0; line-height: 125%"><span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">MultipleBuildFailures</span><span style="color: #ce5c00; font-weight: bold">:</span> <span style="color: #000000">Build</span> <span style="color: #000000">completed</span> <span style="color: #000000">with</span> <span style="color: #0000cf; font-weight: bold">1</span> <span style="color: #000000">failures</span><span style="color: #ce5c00; font-weight: bold">.</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">initialization</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultGradleLauncher</span><span style="color: #000000">$ExecuteTasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultGradleLauncher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">386</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #000000">$RunnableBuildOperationWorker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">301</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #000000">$RunnableBuildOperationWorker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">293</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">175</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">91</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DelegatingBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DelegatingBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">31</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">initialization</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultGradleLauncher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">runTasks</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultGradleLauncher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">247</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">initialization</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultGradleLauncher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">doBuildStages</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultGradleLauncher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">159</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">initialization</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultGradleLauncher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">executeTasks</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultGradleLauncher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">134</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">invocation</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">GradleBuildController</span><span style="color: #000000">$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">GradleBuildController</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">58</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">invocation</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">GradleBuildController</span><span style="color: #000000">$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">GradleBuildController</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">55</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">invocation</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">GradleBuildController</span><span style="color: #000000">$3</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">create</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">GradleBuildController</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">82</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">invocation</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">GradleBuildController</span><span style="color: #000000">$3</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">create</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">GradleBuildController</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">75</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">work</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultWorkerLeaseService</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">withLocks</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultWorkerLeaseService</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">183</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">work</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">StopShieldingWorkerLeaseService</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">withLocks</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">StopShieldingWorkerLeaseService</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">40</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">invocation</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">GradleBuildController</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">doBuild</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">GradleBuildController</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">75</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">invocation</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">GradleBuildController</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">GradleBuildController</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">55</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">runner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ClientProvidedBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ClientProvidedBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">55</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ChainingBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ChainingBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">35</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ChainingBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ChainingBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">35</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">BuildOutcomeReportingBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">BuildOutcomeReportingBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">58</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ValidatingBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ValidatingBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">32</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">BuildCompletionNotifyingBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">BuildCompletionNotifyingBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">39</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">RunAsBuildOperationBuildActionRunner</span><span style="color: #000000">$3</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">RunAsBuildOperationBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">49</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">RunAsBuildOperationBuildActionRunner</span><span style="color: #000000">$3</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">RunAsBuildOperationBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">44</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #000000">$CallableBuildOperationWorker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">315</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #000000">$CallableBuildOperationWorker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">305</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">175</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">101</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DelegatingBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DelegatingBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">36</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">RunAsBuildOperationBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">RunAsBuildOperationBuildActionRunner</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">44</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">InProcessBuildActionExecuter</span><span style="color: #000000">$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">transform</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">InProcessBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">49</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">InProcessBuildActionExecuter</span><span style="color: #000000">$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">transform</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">InProcessBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">46</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">composite</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultRootBuildState</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultRootBuildState</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">78</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">InProcessBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">InProcessBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">46</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">InProcessBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">InProcessBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">31</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">BuildTreeScopeBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">BuildTreeScopeBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">42</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">BuildTreeScopeBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">BuildTreeScopeBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">28</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ContinuousBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ContinuousBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">78</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ContinuousBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ContinuousBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">52</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SubscribableBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SubscribableBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">59</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SubscribableBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SubscribableBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">36</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SessionScopeBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SessionScopeBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">68</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SessionScopeBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SessionScopeBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">38</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">GradleThreadBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">GradleThreadBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">37</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">GradleThreadBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">GradleThreadBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">26</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ParallelismConfigurationBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ParallelismConfigurationBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">43</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ParallelismConfigurationBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ParallelismConfigurationBuildActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">29</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">StartParamsValidatingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">StartParamsValidatingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">60</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">StartParamsValidatingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">StartParamsValidatingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">32</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SessionFailureReportingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SessionFailureReportingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">55</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SessionFailureReportingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SessionFailureReportingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">41</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SetupLoggingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SetupLoggingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">48</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tooling</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">provider</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SetupLoggingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SetupLoggingActionExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">32</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ExecuteBuild</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">doBuild</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ExecuteBuild</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">67</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">BuildCommandOnly</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">BuildCommandOnly</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">36</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">proceed</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">104</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">WatchForDisconnection</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">WatchForDisconnection</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">37</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">proceed</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">104</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ResetDeprecationLogger</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ResetDeprecationLogger</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">26</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">proceed</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">104</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">RequestStopIfSingleUsedDaemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">RequestStopIfSingleUsedDaemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">34</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">proceed</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">104</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForwardClientInput</span><span style="color: #000000">$2</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForwardClientInput</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">74</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForwardClientInput</span><span style="color: #000000">$2</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForwardClientInput</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">72</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">Swapper</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">swap</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">Swapper</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">38</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForwardClientInput</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForwardClientInput</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">72</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">proceed</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">104</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">LogAndCheckHealth</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">LogAndCheckHealth</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">55</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">proceed</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">104</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">LogToClient</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">doBuild</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">LogToClient</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">62</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">BuildCommandOnly</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">BuildCommandOnly</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">36</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">proceed</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">104</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">EstablishBuildEnvironment</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">doBuild</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">EstablishBuildEnvironment</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">81</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">BuildCommandOnly</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">BuildCommandOnly</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">36</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">proceed</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DaemonCommandExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">104</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">StartBuildOrRespondWithBusy</span><span style="color: #000000">$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">StartBuildOrRespondWithBusy</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">50</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">launcher</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">daemon</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">server</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DaemonStateCoordinator</span><span style="color: #000000">$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DaemonStateCoordinator</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">295</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ExecutorPolicy</span><span style="color: #000000">$CatchAndRecordFailures</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">onExecute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ExecutorPolicy</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">63</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ManagedExecutorImpl</span><span style="color: #000000">$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ManagedExecutorImpl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">46</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ThreadPoolExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">runWorker</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ThreadPoolExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">1142</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ThreadPoolExecutor</span><span style="color: #000000">$Worker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ThreadPoolExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">617</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ThreadFactoryImpl</span><span style="color: #000000">$ManagedThreadRunnable</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ThreadFactoryImpl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">55</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">lang</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">Thread</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">Thread</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">745</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">Caused</span> <span style="color: #f57900">by:</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">TaskExecutionException</span><span style="color: #ce5c00; font-weight: bold">:</span> <span style="color: #000000">Execution</span> <span style="color: #000000">failed</span> <span style="color: #204a87; font-weight: bold">for</span> <span style="color: #000000">task</span> <span style="color: #a40000; border: 1px solid #ef2929">'</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #f57900">app:</span><span style="color: #000000">transformDexWithInstantRunSlicesApkForDebug</span><span style="color: #a40000; border: 1px solid #ef2929">'</span><span style="color: #ce5c00; font-weight: bold">.</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">95</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ResolveTaskOutputCachingStateExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ResolveTaskOutputCachingStateExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">91</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ValidatingTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ValidatingTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">57</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SkipEmptySourceFilesTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SkipEmptySourceFilesTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">119</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ResolvePreviousStateExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ResolvePreviousStateExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">43</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">CleanupStaleOutputsExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">CleanupStaleOutputsExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">93</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">FinalizePropertiesTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">FinalizePropertiesTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">45</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ResolveTaskArtifactStateTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ResolveTaskArtifactStateTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">94</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SkipTaskWithNoActionsExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SkipTaskWithNoActionsExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">56</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SkipOnlyIfTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SkipOnlyIfTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">55</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">CatchExceptionTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">CatchExceptionTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">36</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">EventFiringTaskExecuter</span><span style="color: #000000">$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">executeTask</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">EventFiringTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">67</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">EventFiringTaskExecuter</span><span style="color: #000000">$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">EventFiringTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">52</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">EventFiringTaskExecuter</span><span style="color: #000000">$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">EventFiringTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">49</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #000000">$CallableBuildOperationWorker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">315</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #000000">$CallableBuildOperationWorker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">305</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">175</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">101</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DelegatingBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DelegatingBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">36</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">EventFiringTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">EventFiringTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">49</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">plan</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">LocalTaskNodeExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">LocalTaskNodeExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">43</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">taskgraph</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultTaskExecutionGraph</span><span style="color: #000000">$InvokeNodeExecutorsAction</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultTaskExecutionGraph</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">355</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">taskgraph</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultTaskExecutionGraph</span><span style="color: #000000">$InvokeNodeExecutorsAction</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultTaskExecutionGraph</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">343</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">taskgraph</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultTaskExecutionGraph</span><span style="color: #000000">$BuildOperationAwareExecutionAction</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultTaskExecutionGraph</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">336</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">taskgraph</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultTaskExecutionGraph</span><span style="color: #000000">$BuildOperationAwareExecutionAction</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultTaskExecutionGraph</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">322</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">plan</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultPlanExecutor</span><span style="color: #000000">$ExecutorWorker$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultPlanExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">134</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">plan</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultPlanExecutor</span><span style="color: #000000">$ExecutorWorker$1</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultPlanExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">129</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">plan</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultPlanExecutor</span><span style="color: #000000">$ExecutorWorker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultPlanExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">202</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">plan</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultPlanExecutor</span><span style="color: #000000">$ExecutorWorker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">executeNextNode</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultPlanExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">193</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">plan</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultPlanExecutor</span><span style="color: #000000">$ExecutorWorker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultPlanExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">129</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #ce5c00; font-weight: bold">...</span> <span style="color: #0000cf; font-weight: bold">6</span> <span style="color: #000000">more</span>
<span style="color: #000000">Caused</span> <span style="color: #f57900">by:</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">lang</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">RuntimeException</span><span style="color: #ce5c00; font-weight: bold">:</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">lang</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">RuntimeException</span><span style="color: #ce5c00; font-weight: bold">:</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">io</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">FileNotFoundException</span><span style="color: #ce5c00; font-weight: bold">:</span> <span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">Users</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">dorbae</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">Desktop</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">dev</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">android</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">dhtcomonitor</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">app</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">build</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">intermediates</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">instant_run_split_apk_resources</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">debug</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">instantRunSplitApkResourcesDebug</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">out</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">slice_5</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">resources_ap</span>
<span style="color: #000000">at</span> <span style="color: #000000">sun</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">reflect</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">NativeConstructorAccessorImpl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">newInstance0</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">Native</span> <span style="color: #000000">Method</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">sun</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">reflect</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">NativeConstructorAccessorImpl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">newInstance</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">NativeConstructorAccessorImpl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">62</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">sun</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">reflect</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DelegatingConstructorAccessorImpl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">newInstance</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DelegatingConstructorAccessorImpl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">45</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">lang</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">reflect</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">Constructor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">newInstance</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">Constructor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">423</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForkJoinTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">getThrowableException</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForkJoinTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">593</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForkJoinTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">reportException</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForkJoinTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">677</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForkJoinTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">join</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForkJoinTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">720</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">com</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">android</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ide</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">common</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">WaitableExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">waitForTasksWithQuickFail</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">WaitableExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">149</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">com</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">android</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">build</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">transforms</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">InstantRunSliceSplitApkBuilder</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">transform</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">InstantRunSliceSplitApkBuilder</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">246</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">com</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">android</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">build</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">pipeline</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">TransformTask</span><span style="color: #000000">$2</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">TransformTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">239</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">com</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">android</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">build</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">pipeline</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">TransformTask</span><span style="color: #000000">$2</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">call</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">TransformTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">235</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">com</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">android</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">builder</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">profile</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ThreadRecorder</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">record</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ThreadRecorder</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">102</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">com</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">android</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">build</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">pipeline</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">TransformTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">transform</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">TransformTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">230</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">sun</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">reflect</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">GeneratedMethodAccessor156</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">invoke</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">Unknown</span> <span style="color: #000000">Source</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">sun</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">reflect</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DelegatingMethodAccessorImpl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">invoke</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DelegatingMethodAccessorImpl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">43</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">lang</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">reflect</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">Method</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">invoke</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">Method</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">498</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">reflect</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">JavaMethod</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">invoke</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">JavaMethod</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">73</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">project</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">taskfactory</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">IncrementalTaskAction</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">doExecute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">IncrementalTaskAction</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">47</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">project</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">taskfactory</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">StandardTaskAction</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">StandardTaskAction</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">41</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">project</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">taskfactory</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">StandardTaskAction</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">StandardTaskAction</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">28</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ExecuteActionsTaskExecuter</span><span style="color: #000000">$2</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">284</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #000000">$RunnableBuildOperationWorker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">301</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #000000">$RunnableBuildOperationWorker</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">293</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">175</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">91</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">operations</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DelegatingBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DelegatingBuildOperationExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">31</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">executeAction</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">273</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">executeActions</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">258</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">access</span><span style="color: #000000">$200</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">67</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ExecuteActionsTaskExecuter</span><span style="color: #000000">$TaskExecution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">145</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ExecuteStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ExecuteStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">49</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">CancelExecutionStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">CancelExecutionStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">34</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">TimeoutStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">executeWithoutTimeout</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">TimeoutStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">69</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">TimeoutStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">TimeoutStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">49</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">CatchExceptionStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">CatchExceptionStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">33</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">CreateOutputsStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">CreateOutputsStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">50</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SnapshotOutputStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SnapshotOutputStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">43</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SnapshotOutputStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SnapshotOutputStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">29</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">CacheStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">executeWithoutCache</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">CacheStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">134</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">CacheStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">lambda</span><span style="color: #000000">$execute$3</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">CacheStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">83</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">Optional</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">orElseGet</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">Optional</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">267</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">CacheStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">CacheStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">82</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">CacheStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">CacheStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">36</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">PrepareCachingStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">PrepareCachingStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">33</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">StoreSnapshotsStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">StoreSnapshotsStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">38</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">StoreSnapshotsStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">StoreSnapshotsStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">23</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SkipUpToDateStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">executeBecause</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SkipUpToDateStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">96</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SkipUpToDateStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">lambda</span><span style="color: #000000">$execute$0</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SkipUpToDateStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">89</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">Optional</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">map</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">Optional</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">215</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SkipUpToDateStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SkipUpToDateStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">52</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">steps</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">SkipUpToDateStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">SkipUpToDateStep</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">36</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">impl</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">DefaultWorkExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">DefaultWorkExecutor</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">34</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">org</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">api</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">tasks</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execution</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">execute</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ExecuteActionsTaskExecuter</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">91</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #ce5c00; font-weight: bold">...</span> <span style="color: #0000cf; font-weight: bold">35</span> <span style="color: #000000">more</span>
<span style="color: #000000">Caused</span> <span style="color: #f57900">by:</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">lang</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">RuntimeException</span><span style="color: #ce5c00; font-weight: bold">:</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">io</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">FileNotFoundException</span><span style="color: #ce5c00; font-weight: bold">:</span> <span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">Users</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">dorbae</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">Desktop</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">dev</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">android</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">dhtcomonitor</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">app</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">build</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">intermediates</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">instant_run_split_apk_resources</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">debug</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">instantRunSplitApkResourcesDebug</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">out</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">slice_5</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">resources_ap</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForkJoinTask</span><span style="color: #000000">$AdaptedCallable</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForkJoinTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">1431</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForkJoinTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">doExec</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForkJoinTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">289</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForkJoinPool</span><span style="color: #000000">$WorkQueue</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">runTask</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForkJoinPool</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">1056</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForkJoinPool</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">runWorker</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForkJoinPool</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">1692</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForkJoinWorkerThread</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">run</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForkJoinWorkerThread</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">157</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">Caused</span> <span style="color: #f57900">by:</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">io</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">FileNotFoundException</span><span style="color: #ce5c00; font-weight: bold">:</span> <span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">Users</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">dorbae</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">Desktop</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">dev</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">android</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">dhtcomonitor</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">app</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">build</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">intermediates</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">instant_run_split_apk_resources</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">debug</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">instantRunSplitApkResourcesDebug</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">out</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">slice_5</span><span style="color: #ce5c00; font-weight: bold">/</span><span style="color: #000000">resources_ap</span>
<span style="color: #000000">at</span> <span style="color: #000000">com</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">android</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">build</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">gradle</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">internal</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">transforms</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">InstantRunSliceSplitApkBuilder</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">lambda</span><span style="color: #000000">$null$1</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">InstantRunSliceSplitApkBuilder</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">233</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #000000">at</span> <span style="color: #000000">java</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">util</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">concurrent</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">ForkJoinTask</span><span style="color: #000000">$AdaptedCallable</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">exec</span><span style="color: #ce5c00; font-weight: bold">(</span><span style="color: #000000">ForkJoinTask</span><span style="color: #ce5c00; font-weight: bold">.</span><span style="color: #c4a000">java</span><span style="color: #ce5c00; font-weight: bold">:</span><span style="color: #0000cf; font-weight: bold">1424</span><span style="color: #ce5c00; font-weight: bold">)</span>
<span style="color: #ce5c00; font-weight: bold">...</span> <span style="color: #0000cf; font-weight: bold">4</span> <span style="color: #000000">more</span>
</pre></td></tr></table>
</div>
<p><br /></p>
<h1 id="solution">Solution</h1>
<h2 id="cause">Cause</h2>
<ul>
<li>Gradle version was too low</li>
</ul>
<p><br /></p>
<h2 id="update-gradle-version">Update Gradle version</h2>
<ul>
<li>Open gradle-wrapper.properties files in project directory</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-13-android-androidstudio-resourcesaperrorafterupgradingandroidstudio-003.png" alt="screenshoot003" /></p>
<p><br /></p>
<ul>
<li>Replace distributionUrl with the URL which contains recent Gradle verion and execute synchronization
<ul>
<li>distributionUrl=https://services.gradle.org/distributions/gradle-<strong>[RECENT_GRADLE_VERSION]</strong>-all.zip
<blockquote>
<p>Ref. <a href="https://gradle.org/releases/">Gradle Releases</a></p>
</blockquote>
</li>
</ul>
</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-13-android-androidstudio-resourcesaperrorafterupgradingandroidstudio-004.png" alt="screenshoot004" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://stackoverflow.com/questions/55802212/error-related-to-resources-ap-after-upgrading-to-android-studio-3-4">StackOverflow</a></li>
<li><a href="https://gradle.org/releases/">Gradle Releases</a></li>
</ul>
Tue, 13 Aug 2019 00:00:00 +0000
https://dorbae.github.io/android/android%20studio/android-androidstudio-resourcesaperrorafterupgradingandroidstudio/
https://dorbae.github.io/android/android%20studio/android-androidstudio-resourcesaperrorafterupgradingandroidstudio/
android
androidstudio
troubleshooting
Android
Android Studio
-
[Android] Bar chart is not visible, nevertheless values of it are visible in MPAndroidChart
<h1 id="goal">Goal</h1>
<ul>
<li>Solve the problem which bars are not visible in chart</li>
</ul>
<p><br /></p>
<h1 id="problem">Problem</h1>
<ul>
<li>Environment
<ul>
<li>Development
<ul>
<li>Android Studio 3.2.1</li>
<li>Compile/Target SDK : 28</li>
<li>Minimum SDJ : 17</li>
</ul>
</li>
<li>Test
<ul>
<li>Xiaomi MI MAX 2</li>
<li>Android 7.1.1</li>
</ul>
</li>
<li>MPAndroidChart 3.1.0</li>
</ul>
</li>
<li>I drew combined graph and the values of bar chart displayed well.</li>
<li>But, the bars didn’t displayed despite of replacing the width of bar trough <strong><em>BarData.setBarWidth(float)</em></strong> method</li>
</ul>
<p><br /></p>
<p><img src="/assets/images/posts/2019/08/2019-08-09-android-mpandroidchart-barchartnotvisible-001.png" alt="screenshoot001" /></p>
<p><br /></p>
<h1 id="solution">Solution</h1>
<h2 id="cause">Cause</h2>
<ul>
<li>I was using millisecond as the unit of X axis</li>
<li>The bars were too thin to be not visible. It was becuase the library drew bars with 1 millisecond width</li>
<li>So, you have to replace the unit of values in X asis with minute or bigger than minute</li>
</ul>
<p><br /></p>
<ul>
<li>My Code</li>
</ul>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
<span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="nc">SimpleDateFormat</span> <span class="no">DISP_SDF_DAY_OF_WEEK</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">SimpleDateFormat</span><span class="o">(</span><span class="s">"E"</span><span class="o">,</span> <span class="nc">Locale</span><span class="o">.</span><span class="na">getDefault</span><span class="o">());</span>
<span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="nc">SimpleDateFormat</span> <span class="no">INFLUXDB_UTC_SDF</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">SimpleDateFormat</span><span class="o">(</span><span class="s">"yyyy-MM-dd'T'HH:mm:ss'Z'"</span><span class="o">);</span>
<span class="o">...</span>
<span class="nc">XAxis</span> <span class="n">xAxis</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="na">chart</span><span class="o">.</span><span class="na">getXAxis</span><span class="o">();</span>
<span class="n">xAxis</span><span class="o">.</span><span class="na">setValueFormatter</span><span class="o">(</span><span class="k">new</span> <span class="nc">ValueFormatter</span><span class="o">()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="nc">String</span> <span class="nf">getFormattedValue</span><span class="o">(</span><span class="kt">float</span> <span class="n">value</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">//</span>
<span class="c1">// Problem</span>
<span class="c1">//</span>
<span class="k">return</span> <span class="no">DISP_SDF_DAY_OF_WEEK</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="nc">Float</span><span class="o">.</span><span class="na">valueOf</span><span class="o">(</span><span class="n">value</span><span class="o">).</span><span class="na">longValue</span><span class="o">()</span> <span class="o">*</span> <span class="mi">1000L</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="o">...</span>
<span class="nc">BarDataSet</span> <span class="n">barDataSet</span><span class="o">;</span>
<span class="nc">YAxis</span> <span class="n">barYAxis</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="na">chart</span><span class="o">.</span><span class="na">getAxis</span><span class="o">(</span><span class="nc">YAxis</span><span class="o">.</span><span class="na">AxisDependency</span><span class="o">.</span><span class="na">LEFT</span><span class="o">);</span>
<span class="n">barYAxis</span><span class="o">.</span><span class="na">setPosition</span><span class="o">(</span><span class="nc">YAxis</span><span class="o">.</span><span class="na">YAxisLabelPosition</span><span class="o">.</span><span class="na">OUTSIDE_CHART</span><span class="o">);</span>
<span class="n">barYAxis</span><span class="o">.</span><span class="na">setDrawGridLines</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>
<span class="n">barYAxis</span><span class="o">.</span><span class="na">setTextColor</span><span class="o">(</span><span class="n">android</span><span class="o">.</span><span class="na">R</span><span class="o">.</span><span class="na">color</span><span class="o">.</span><span class="na">black</span><span class="o">);</span>
<span class="n">barYAxis</span><span class="o">.</span><span class="na">setSpaceTop</span><span class="o">(</span><span class="mi">15</span><span class="n">f</span><span class="o">);</span>
<span class="n">barYAxis</span><span class="o">.</span><span class="na">setAxisMinimum</span><span class="o">(</span><span class="mi">0</span><span class="n">f</span><span class="o">);</span>
<span class="nc">List</span><span class="o"><</span><span class="nc">BarEntry</span><span class="o">></span> <span class="n">barEntryList</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ArrayList</span><span class="o"><>();</span>
<span class="nc">BarEntry</span> <span class="n">barEntry</span><span class="o">;</span>
<span class="nc">ArrayList</span><span class="o"><</span><span class="nc">Object</span><span class="o">></span> <span class="n">list</span><span class="o">;</span>
<span class="kt">long</span> <span class="n">time</span><span class="o">;</span>
<span class="nc">Object</span> <span class="n">temp</span><span class="o">;</span>
<span class="kt">float</span> <span class="n">mean</span><span class="o">;</span>
<span class="k">try</span> <span class="o">{</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">ll</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">ll</span> <span class="o"><</span> <span class="n">values</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="n">ll</span><span class="o">++)</span> <span class="o">{</span>
<span class="n">list</span> <span class="o">=</span> <span class="o">(</span><span class="nc">ArrayList</span><span class="o"><</span><span class="nc">Object</span><span class="o">>)</span> <span class="n">values</span><span class="o">[</span><span class="n">ll</span><span class="o">];</span>
<span class="c1">//</span>
<span class="c1">// Problem</span>
<span class="c1">//</span>
<span class="n">time</span> <span class="o">=</span> <span class="no">INFLUXDB_UTC_SDF</span><span class="o">.</span><span class="na">parse</span><span class="o">((</span><span class="nc">String</span><span class="o">)</span> <span class="n">list</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="mi">0</span><span class="o">)).</span><span class="na">getTime</span><span class="o">()</span> <span class="o">/</span> <span class="mi">1000L</span><span class="o">;</span> <span class="c1">// eg. 2019-08-07T00:00:00Z</span>
<span class="n">temp</span> <span class="o">=</span> <span class="n">list</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="mi">1</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="n">temp</span> <span class="k">instanceof</span> <span class="n">java</span><span class="o">.</span><span class="na">lang</span><span class="o">.</span><span class="na">Double</span><span class="o">)</span> <span class="o">{</span>
<span class="n">mean</span> <span class="o">=</span> <span class="o">((</span><span class="nc">Double</span><span class="o">)</span> <span class="n">temp</span><span class="o">).</span><span class="na">floatValue</span><span class="o">();</span>
<span class="o">}</span> <span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="n">temp</span> <span class="k">instanceof</span> <span class="n">java</span><span class="o">.</span><span class="na">lang</span><span class="o">.</span><span class="na">Integer</span><span class="o">)</span> <span class="o">{</span>
<span class="n">mean</span> <span class="o">=</span> <span class="o">((</span><span class="nc">Integer</span><span class="o">)</span> <span class="n">temp</span><span class="o">).</span><span class="na">floatValue</span><span class="o">();</span>
<span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
<span class="n">mean</span> <span class="o">=</span> <span class="o">(</span><span class="kt">float</span><span class="o">)</span> <span class="n">temp</span><span class="o">;</span>
<span class="o">}</span>
<span class="n">barEntry</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">BarEntry</span><span class="o">(</span><span class="n">time</span><span class="o">,</span> <span class="o">(</span><span class="kt">int</span><span class="o">)</span> <span class="n">list</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="mi">2</span><span class="o">));</span>
<span class="n">barEntryList</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">barEntry</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">java</span><span class="o">.</span><span class="na">text</span><span class="o">.</span><span class="na">ParseException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="nc">Log</span><span class="o">.</span><span class="na">e</span><span class="o">(</span><span class="s">"dorbae"</span><span class="o">,</span> <span class="n">e</span><span class="o">.</span><span class="na">getMessage</span><span class="o">(),</span> <span class="n">e</span><span class="o">);</span>
<span class="o">}</span>
<span class="n">barDataSet</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">BarDataSet</span><span class="o">(</span><span class="n">barEntryList</span><span class="o">,</span> <span class="s">"Accumulation"</span><span class="o">);</span>
<span class="n">barDataSet</span><span class="o">.</span><span class="na">setColor</span><span class="o">(</span><span class="n">getResources</span><span class="o">().</span><span class="na">getColor</span><span class="o">(</span><span class="no">R</span><span class="o">.</span><span class="na">color</span><span class="o">.</span><span class="na">colorPrimary</span><span class="o">));</span>
<span class="n">barDataSet</span><span class="o">.</span><span class="na">setValueTextColor</span><span class="o">(</span><span class="n">getResources</span><span class="o">().</span><span class="na">getColor</span><span class="o">(</span><span class="no">R</span><span class="o">.</span><span class="na">color</span><span class="o">.</span><span class="na">colorPrimary</span><span class="o">));</span>
<span class="n">barDataSet</span><span class="o">.</span><span class="na">setAxisDependency</span><span class="o">(</span><span class="nc">YAxis</span><span class="o">.</span><span class="na">AxisDependency</span><span class="o">.</span><span class="na">LEFT</span><span class="o">);</span>
<span class="n">barDataSet</span><span class="o">.</span><span class="na">setVisible</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="n">barDataSet</span><span class="o">.</span><span class="na">setDrawIcons</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>
<span class="nc">BarData</span> <span class="n">barData</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">BarData</span><span class="o">(</span><span class="n">barDataSet</span><span class="o">);</span>
<span class="c1">//</span>
<span class="c1">// It didn't work well because of other reason</span>
<span class="c1">//</span>
<span class="n">barData</span><span class="o">.</span><span class="na">setBarWidth</span><span class="o">(</span><span class="mi">30</span><span class="n">f</span><span class="o">);</span>
<span class="nc">Legend</span> <span class="n">l</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="na">chart</span><span class="o">.</span><span class="na">getLegend</span><span class="o">();</span>
<span class="n">l</span><span class="o">.</span><span class="na">setDrawInside</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="n">l</span><span class="o">.</span><span class="na">setVerticalAlignment</span><span class="o">(</span><span class="nc">Legend</span><span class="o">.</span><span class="na">LegendVerticalAlignment</span><span class="o">.</span><span class="na">BOTTOM</span><span class="o">);</span>
<span class="n">l</span><span class="o">.</span><span class="na">setHorizontalAlignment</span><span class="o">(</span><span class="nc">Legend</span><span class="o">.</span><span class="na">LegendHorizontalAlignment</span><span class="o">.</span><span class="na">RIGHT</span><span class="o">);</span>
<span class="n">l</span><span class="o">.</span><span class="na">setTextColor</span><span class="o">(</span><span class="nc">Color</span><span class="o">.</span><span class="na">BLACK</span><span class="o">);</span>
<span class="nc">CombinedData</span> <span class="n">combinedData</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">CombinedData</span><span class="o">();</span>
<span class="n">combinedData</span><span class="o">.</span><span class="na">setData</span><span class="o">(</span><span class="n">barData</span><span class="o">);</span>
<span class="n">combinedData</span><span class="o">.</span><span class="na">setData</span><span class="o">(</span><span class="n">lineData</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="na">chart</span><span class="o">.</span><span class="na">setData</span><span class="o">(</span><span class="n">combinedData</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="na">chart</span><span class="o">.</span><span class="na">getAxisLeft</span><span class="o">().</span><span class="na">setEnabled</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="na">chart</span><span class="o">.</span><span class="na">setVisibility</span><span class="o">(</span><span class="nc">View</span><span class="o">.</span><span class="na">VISIBLE</span><span class="o">);</span>
<span class="k">this</span><span class="o">.</span><span class="na">chart</span><span class="o">.</span><span class="na">invalidate</span><span class="o">();</span>
<span class="k">this</span><span class="o">.</span><span class="na">chart</span><span class="o">.</span><span class="na">notifyDataSetChanged</span><span class="o">();</span>
<span class="o">...</span>
</code></pre></div></div>
<h2 id="1-change-the-unit-of-x-value-as-hour">1. Change the unit of x value as hour</h2>
<ul>
<li>MyCode</li>
</ul>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
<span class="o">...</span>
<span class="n">xAxis</span><span class="o">.</span><span class="na">setValueFormatter</span><span class="o">(</span><span class="k">new</span> <span class="nc">ValueFormatter</span><span class="o">()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="nc">String</span> <span class="nf">getFormattedValue</span><span class="o">(</span><span class="kt">float</span> <span class="n">value</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">//</span>
<span class="c1">// Solved </span>
<span class="c1">//</span>
<span class="k">return</span> <span class="no">DISP_SDF_DAY_OF_WEEK</span><span class="o">.</span><span class="na">format</span><span class="o">(</span><span class="nc">Float</span><span class="o">.</span><span class="na">valueOf</span><span class="o">(</span><span class="n">value</span><span class="o">).</span><span class="na">longValue</span><span class="o">()</span> <span class="o">*</span> <span class="mi">1000L</span> <span class="o">*</span> <span class="mi">60L</span> <span class="o">*</span> <span class="mi">60L</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="o">...</span>
<span class="k">try</span> <span class="o">{</span>
<span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">ll</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">ll</span> <span class="o"><</span> <span class="n">values</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="n">ll</span><span class="o">++)</span> <span class="o">{</span>
<span class="n">list</span> <span class="o">=</span> <span class="o">(</span><span class="nc">ArrayList</span><span class="o"><</span><span class="nc">Object</span><span class="o">>)</span> <span class="n">values</span><span class="o">[</span><span class="n">ll</span><span class="o">];</span>
<span class="c1">//</span>
<span class="c1">// Solved (second -> hour)</span>
<span class="c1">//</span>
<span class="n">time</span> <span class="o">=</span> <span class="no">INFLUXDB_UTC_SDF</span><span class="o">.</span><span class="na">parse</span><span class="o">((</span><span class="nc">String</span><span class="o">)</span> <span class="n">list</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="mi">0</span><span class="o">)).</span><span class="na">getTime</span><span class="o">()</span> <span class="o">/</span> <span class="mi">1000L</span> <span class="o">/</span> <span class="mi">60L</span> <span class="o">/</span> <span class="mi">60L</span><span class="o">);</span> <span class="c1">// eg. 2019-08-07T00:00:00Z</span>
<span class="o">...</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">...</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-09-android-mpandroidchart-barchartnotvisible-002.png" alt="screenshoot002" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://github.com/PhilJay/MPAndroidChart/issues/2892">MPAndroidChart GitHub</a></li>
</ul>
Fri, 09 Aug 2019 00:00:00 +0000
https://dorbae.github.io/android/mpandroidchart/android-mpandroidchart-barchartnotvisible/
https://dorbae.github.io/android/mpandroidchart/android-mpandroidchart-barchartnotvisible/
android
mpandroidchart
troubleshooting
Android
MPAndroidChart
-
[ESP32] How to flash a firmware into ESP32(LOLIN D32 PRO ver.2.0.0) on MacOS?
<h1 id="goal">Goal</h1>
<ul>
<li>Flash firmware into ESP32</li>
</ul>
<p><br /></p>
<h1 id="intro">Intro</h1>
<ul>
<li><a href="https://riot-os.org/api/group__boards__esp32__wemos-lolin-d32-pro.html">Wemos LOLIN D32 PRO</a></li>
<li>macOS Mojave 10.14.6</li>
</ul>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h3 id="setup-of-toolchain">Setup of Toolchain</h3>
<ul>
<li>ESP-IDF will use Python</li>
<li>ESP-IDF essentially contains API (software libraries and source code) for ESP32 and scripts to operate the Toolchain</li>
<li>If, you need to install pip
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>easy_install pip
</code></pre></div> </div>
</li>
</ul>
<h4 id="install-pyserial">Install pyserial</h4>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip <span class="nb">install</span> <span class="nt">--user</span> pyserial
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h4 id="install-cmake--ninja">Install Cmake & Ninja</h4>
<ul>
<li>Ninja is a small build system with a focus on speed</li>
<li>Ninja’s low-level approach makes it perfect for embedding into more featureful build systems</li>
<li>Ninja is used to build Google Chrome, parts of Android, LLVM, and can be used in many other projects due to CMake’s Ninja backend.</li>
<li>ccache is optional. However, it is strongly recommended for faster builds</li>
</ul>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">install </span>cmake ninja ccache
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-002.png" alt="screenshot003" /></p>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-003.png" alt="screenshot003" /></p>
<p><br /></p>
<h3 id="get-esp-idf">Get ESP-IDF</h3>
<ul>
<li>To build applications for the ESP32, you need the software libraries provided by Espressif in <a href="https://github.com/espressif/esp-idf">ESP-IDF repository</a></li>
</ul>
<h4 id="create-local-repository-directory-and-clone">Create local repository directory and clone</h4>
<ul>
<li>If you execute below commands, ~/esp/esp-idf directory will be created</li>
<li>You can use any directory, but you will need to adjust paths for the commands respectively</li>
<li>Keep in mind that ESP-IDF does not support spaces in paths.</li>
</ul>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir</span> ~/esp
<span class="nb">cd</span> ~/esp
git clone <span class="nt">--recursive</span> https://github.com/espressif/esp-idf.git
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-004.png" alt="screenshot004" /></p>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-005.png" alt="screenshot005" /></p>
<p><br /></p>
<h3 id="set-up-the-tools">Set up the tools</h3>
<h4 id="execute-esp-idf-tools-installer">Execute ESP-IDF Tools installer</h4>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/esp/esp-idf
sh ./install.sh
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-006.png" alt="screenshot006" /></p>
<p><br /></p>
<h3 id="set-up-the-environment-variables">Set up the environment variables</h3>
<ul>
<li>The installed tools are not yet added to the PATH environment variable</li>
<li>To make the tools usable from the command line some environment variables must be set</li>
<li>You can just execute script which set up variables or add that script in ./profile or .bash_profile</li>
</ul>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/esp/esp-idf
sh ./export.sh
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-007.png" alt="screenshot007" /></p>
<p><br /></p>
<h3 id="start-an-nexample-project">Start an nexample project</h3>
<h4 id="copy-an-example-project-to-esp-directory">Copy an example project to ~/esp directory</h4>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/esp
<span class="nb">cp</span> <span class="nt">-r</span> <span class="nv">$IDF_PATH</span>/examples/get-started/hello_world <span class="nb">.</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-008.png" alt="screenshot008" /></p>
<p><br /></p>
<h3 id="connect-your-device">Connect Your Device</h3>
<ul>
<li>Serial ports have the following patterns in their names</li>
</ul>
<table>
<thead>
<tr>
<th>OS</th>
<th>Pattern</th>
</tr>
</thead>
<tbody>
<tr>
<td>Windows</td>
<td>likes <strong>__<em>COM1</em>__</strong></td>
</tr>
<tr>
<td>Linux</td>
<td>starting with <strong>__<em>/dev/tty</em>__</strong></td>
</tr>
<tr>
<td>macOS</td>
<td>starting with <strong>__<em>/dev/cu.</em>__</strong></td>
</tr>
</tbody>
</table>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">ls</span> /dev/cu<span class="k">*</span>
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-009.png" alt="screenshot009" /></p>
<p><br /></p>
<h3 id="build-the-project">Build the project</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>idf.py build
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-010.png" alt="screenshot010" /></p>
<p><br /></p>
<h3 id="flash-onto-the-device">Flash onto the device</h3>
<ul>
<li>Flash the binaries that you just built onto your ESP32 board by running</li>
<li>-b option is optional and default value is 460800</li>
<li>I set up baud as 115200</li>
</ul>
<blockquote>
<p>The option flash automatically builds and flashes the project, so running idf.py build is not necessary</p>
</blockquote>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>idf.py <span class="nt">-p</span> <span class="o">[</span>PORT_PATH] <span class="o">{</span><span class="nt">-b</span> <span class="o">[</span>BAUD]<span class="o">}</span> flash
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-011.png" alt="screenshot011" /></p>
<p><br /></p>
<h3 id="monitor">Monitor</h3>
<ul>
<li>Check if “hello_world” is indeed running
<blockquote>
<p>If you want to stop monitoring, type <strong>Ctrl + ]</strong></p>
</blockquote>
</li>
</ul>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>idf.py <span class="nt">-p</span> <span class="o">[</span>PORT_PATH] monitor
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-012.png" alt="screenshot012" /></p>
<p><br /></p>
<h3 id="if-the-messages-were-not-normal">If the messages were not normal</h3>
<ul>
<li>Your board is likely using a 26MHz crystal</li>
<li>Most development board designs use 40MHz, so ESP-IDF uses this frequency as a default value</li>
</ul>
<p><br /></p>
<h4 id="menu-config">Menu config</h4>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cd</span> ~/esp/hello_world
idf.py menuconfig
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-013.png" alt="screenshot013" /></p>
<p><br /></p>
<h4 id="component-config---esp32-specific">Component config -> ESP32-specific</h4>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-014.png" alt="screenshot014" /></p>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-015.png" alt="screenshot015" /></p>
<p><br /></p>
<h4 id="main-xtal-frequency">Main XTAL frequency</h4>
<ul>
<li>Change <strong>CONFIG_ESP32_XTAL_FREQ_SEL</strong> to 26MHz</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-016.png" alt="screenshot016" /></p>
<p><img src="/assets/images/posts/2019/08/2019-08-05-iot-esp32-setupfirmware-017.png" alt="screenshot017" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://docs.espressif.com/projects/esp-idf/en/latest/get-started/index.html">ESPRESSIF Get Started</a></li>
<li><a href="https://riot-os.org/api/group__boards__esp32__wemos-lolin-d32-pro.html">Wemos LOLIN D32 Pro</a></li>
<li><a href="https://ninja-build.org/">Ninja</a></li>
</ul>
Mon, 05 Aug 2019 00:00:00 +0000
https://dorbae.github.io/iot/esp32/iot-esp32-setupfirmware/
https://dorbae.github.io/iot/esp32/iot-esp32-setupfirmware/
iot
esp32
IoT
ESP32
-
[OpenCV] What is the Mat?
<h1 id="goal">Goal</h1>
<ul>
<li>What is the mat</li>
<li>How it works</li>
<li>How to convert a matrix to a bytes array</li>
<li>The method for storing image data</li>
</ul>
<p><br /></p>
<h1 id="intro">Intro</h1>
<ul>
<li>I had a problem to diplay the image which was serialized.</li>
<li>So, I need to understand how OpenCV handles the matrix exactly</li>
</ul>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h3 id="change-of-way-to-handle-the-image">Change of way to handle the image</h3>
<ul>
<li>OpenCV 1.0
<ul>
<li>C language base</li>
<li>You have to manage the momory manually</li>
<li>It use <strong>IplImage</strong> for handling the image
<blockquote>
<p>IplImage : C structure for storing the image in the memory</p>
</blockquote>
</li>
</ul>
</li>
<li>OpenCV 2.0
<ul>
<li>It introduce a new C++ interface</li>
<li>Nevertheless, it is fully compatible with C</li>
<li>No need to fiddle with the memory management</li>
<li>However, a lot of embedded developments support only C</li>
<li>As using the Mat, you don’t need to allocated and release the memory manually. This is because the Mat manages the memory automatically</li>
</ul>
<p><br /></p>
</li>
</ul>
<h3 id="mat-structure">Mat Structure</h3>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h3 id="sharing-a-matrix">Sharing a matrix</h3>
<ul>
<li>To solve the performance issue by unnecessary copies of potentially large images</li>
<li>OpenCV uses a reference counting system</li>
<li>It copy only header generally and support deep copy as well</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-002.png" alt="screenshot002" /></p>
<p><br /></p>
<h4 id="general-copy">General Copy</h4>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Mat A = imread(...);
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-003.png" alt="screenshot003" /></p>
<p><br /></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Mat B = Mat(A);
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-004.png" alt="screenshot004" /></p>
<p><br /></p>
<h4 id="deep-copy">Deep Copy</h4>
<ul>
<li>Copy not only heaer but also matrix</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Mat F = A.clone();
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-005.png" alt="screenshot005" /></p>
<p><br /></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Mat G;
A.copyTo(G);
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-006.png" alt="screenshot006" /></p>
<p><br /></p>
<h3 id="when-a-matrix-object-is-free-in-the-memory">When a matrix object is free in the memory?</h3>
<ul>
<li>I mentioned, OpenCV uses counting references</li>
<li>So, If the count of pointers which indicate the matrix, it’ll be free automaticlly</li>
</ul>
<h4 id="example">Example</h4>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Mat a = imread(...);
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-007.png" alt="screenshot007" /></p>
<p><br /></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Mat B = Mat(A);
Mat C = Mat(A);
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-008.png" alt="screenshot008" /></p>
<p><br /></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>free(A);
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-009.png" alt="screenshot009" /></p>
<p><br /></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>free(B);
free(C);
</code></pre></div></div>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-010.png" alt="screenshot010" /></p>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-011.png" alt="screenshot011" /></p>
<p><br /></p>
<h3 id="storing-methods">Storing methods</h3>
<h4 id="gray-scale">Gray scale</h4>
<ul>
<li>White/Black</li>
<li>Create many shades of gray</li>
</ul>
<h4 id="rgb">RGB</h4>
<ul>
<li>The most common method</li>
<li>Similar to our eyes</li>
</ul>
<h4 id="hsvhls">HSV/HLS</h4>
<ul>
<li>Decompose colors into hue/Saturation and value/luminance components</li>
<li>More natural way to decribe colors</li>
</ul>
<h4 id="ycrcb">YCrCb</h4>
<ul>
<li>Used by JPEG image format</li>
</ul>
<blockquote>
<p>The smallest data type of each component is char = 1 byte = 8 bits</p>
</blockquote>
<blockquote>
<p>value range of signed char is -127 and 127</p>
</blockquote>
<blockquote>
<p>value range of unsigned char is 0 ~ 255</p>
</blockquote>
<blockquote>
<p>Can use other types like float(4 bytes or 32 bits) and double(8 bytes or 64 bits) and they can provide ever finer control</p>
</blockquote>
<blockquote>
<p>However, the size of image will be increased as using them</p>
</blockquote>
<p><br /></p>
<h3 id="creating-mat">Creating Mat</h3>
<ul>
<li>Mat is a image container and also a general matrix class, that is, 2-dimentional marices</li>
<li>Mat(row, column, store_method)
<ul>
<li>Store method
<ul>
<li>CV_<strong>[The number of bits per item]</strong> <strong>[Signed or Unsigned]</strong> <strong>__<em>{[Type Prefix]}</em>__</strong>C<strong>[The channel number]</strong></li>
</ul>
<blockquote>
<p>eg. CV_8UC3 : Unsigned 8bits(unsigned char) and 3 channles</p>
</blockquote>
<blockquote>
<p>eg. CV_32UC1 : Unsigned 32bits(usigned float) and 1 channel</p>
</blockquote>
</li>
</ul>
</li>
</ul>
<p><br /></p>
<h3 id="how-to-store-n-dimensions">How to store N-dimensions</h3>
<ul>
<li>Convert N-dimensions matrices to 1-D aaray</li>
</ul>
<h4 id="1-d-matrix-to-1-d-array">1-D Matrix to 1-D Array</h4>
<ul>
<li>
<p>eg. 3x3</p>
</li>
<li>
<p>Matrix</p>
</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-012.png" alt="screenshot012" /></p>
<ul>
<li>Array(Bytes Array)</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-016.png" alt="screenshot016" /></p>
<p><br /></p>
<h4 id="contiguous">Contiguous</h4>
<ul>
<li>The way to order the data in memory</li>
<li>There are C-contiguous, Fortran-contiguous and so on</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-013.png" alt="screenshot013" /></p>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-014.png" alt="screenshot014" /></p>
<p><br /></p>
<h3 id="n-d-matrices-to-1-d-array">N-d Matrices to 1-D Array</h3>
<ul>
<li>
<p>eg. RGB(CV_8UC3/) 3-Dimensions</p>
</li>
<li>
<p>Matrices</p>
</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-015.png" alt="screenshot015" /></p>
<ul>
<li>Array(Bytes Array)</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-01-opencv-whatisthemat-017.png" alt="screenshot017" /></p>
<blockquote>
<p>Mat manages RGB as BGR</p>
</blockquote>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://docs.opencv.org/3.4.7/d6/d6d/tutorial_mat_the_basic_image_container.html">OpenCV Doc</a></li>
<li><a href="http://blog.comart.io/posts/opencv-rgba-image-blending">W. Kang’s Dev Blog</a></li>
<li><a href="http://opencvpython.blogspot.com/2012/06/difference-between-matrix-arithmetic-in.html">opencvpython</a></li>
</ul>
Thu, 01 Aug 2019 00:00:00 +0000
https://dorbae.github.io/opencv/opencv-whatisthemat/
https://dorbae.github.io/opencv/opencv-whatisthemat/
opencv
cv
mat
OpenCV
-
[MacOS] How to save as a image file from Keynote
<h1 id="goal">Goal</h1>
<ul>
<li>Save images or figures in a Keynote page as image file by Preview.app</li>
</ul>
<p><br /></p>
<h1 id="intro">Intro</h1>
<ul>
<li>I drew a structure using figures, text boxes and arrows.</li>
<li>They need to be a image file such as .jpeg, .png</li>
</ul>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h3 id="copy-the-figures-that-you-want-to-save">Copy the figures that you want to save</h3>
<ul>
<li>Select figures -> Mouse right click -> Copy</li>
<li>Select figures -> CMD + C</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-01-macos-keynote-howtosaveasimagefilefromkeynote-001.png" alt="screenshot001" /></p>
<h3 id="open-previewapp-and-paste-image-from-clipboard">Open Preview.app and paste image from clipboard</h3>
<ul>
<li>Open Preivew.app</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-01-macos-keynote-howtosaveasimagefilefromkeynote-002.png" alt="screenshot002" /></p>
<p><br /></p>
<ul>
<li>File > New from Clipboard</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-01-macos-keynote-howtosaveasimagefilefromkeynote-003.png" alt="screenshot003" /></p>
<p><img src="/assets/images/posts/2019/08/2019-08-01-macos-keynote-howtosaveasimagefilefromkeynote-004.png" alt="screenshot004" /></p>
<p><br /></p>
<h3 id="save-as-a-image-file">Save as a image file</h3>
<ul>
<li>CMD + S</li>
</ul>
<p><img src="/assets/images/posts/2019/08/2019-08-01-macos-keynote-howtosaveasimagefilefromkeynote-005.png" alt="screenshot005" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://instructionaltechtalk.com/how-to-save-images-from-keynote/">instructionaltechtalk</a></li>
</ul>
Thu, 01 Aug 2019 00:00:00 +0000
https://dorbae.github.io/macos/keynote/macos-keynote-howtosaveasimagefilefromkeynote/
https://dorbae.github.io/macos/keynote/macos-keynote-howtosaveasimagefilefromkeynote/
macos
keynote
MacOS
Keynote
-
[Linux] How to remove specific files and directories
<h1 id="goal">Goal</h1>
<ul>
<li>Remove old video, data, log files in my CCTV server</li>
</ul>
<p><br /></p>
<h1 id="intro">Intro</h1>
<ul>
<li>My CCTV server directory tree</li>
</ul>
<pre>
CCTV_HOME
|
|__ bin
|__ cctv
| |__ cam01
| | |__ data
| | | |__ <b>201905</b>
| | | |__ <b>201906</b>
| | | |__ <b>201907</b>
| | | | |__ <b>20190701</b>
| | | | |__ <b>20190702</b>
| | | | |__ <b>...</b>
| | | | |__ <b>20190730</b>
| | | | |__ <b>20190731</b>
| | | | | | <b>cctv_20190731001231123.avi</b>
| | | | | | <b>cctv_20190731001431145.avi</b>
| | | | | | <b>...</b>
|__ log
| | <b>cctv_20190415212234567.log</b>
| | <b>cctv_20190613112834139.log</b>
| | <b>cctv_20190711082932345.log</b>
| | <b>...</b>
|__ tmp
| | <b>temp_20190415212234567.dat</b>
| | <b>temp_20190613112834139.dat</b>
| | <b>temp_20190711082932345.dat</b>
| | <b>...</b>
</pre>
<p><br /></p>
<h1 id="practice">Practice</h1>
<ul>
<li>script</li>
</ul>
<div style="background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<table><tr><td><pre style="margin: 0; line-height: 125%"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57</pre></td><td><pre style="margin: 0; line-height: 125%"><span style="color: #228B22">#!/bin/bash</span>
<span style="color: #228B22">###########################################################################</span>
<span style="color: #228B22">#</span>
<span style="color: #228B22"># Remove old files including .avi, .dat, .ini, .log and temporary files</span>
<span style="color: #228B22">#</span>
<span style="color: #228B22">###########################################################################</span>
<span style="color: #228B22"># 1.0.0 2019-07-31 dorbae Initialize</span>
<span style="color: #228B22">###########################################################################</span>
<span style="color: #228B22"># Home directory</span>
<span style="color: #00688B">MY_CAMERA_HOME</span>=/home/dorbae/cctvhome
<span style="color: #228B22"># Define how many days you keep the files</span>
<span style="color: #00688B">KEEP_DAYS</span>=7
<span style="color: #228B22"># Remove old temporary files which were modified more than a day ago</span>
find <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">MY_CAMERA_HOME</span><span style="color: #8B008B; font-weight: bold">}</span>/tmp/ -name <span style="color: #CD5555">'temp_*'</span> -mtime +1 -exec rm -f {} <span style="color: #CD5555">\;</span>
<span style="color: #228B22"># Remove old log files which were modified more than n days ago</span>
find <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">MY_CAMERA_HOME</span><span style="color: #8B008B; font-weight: bold">}</span>/log/ -name <span style="color: #CD5555">'*.log'</span> -mtime +<span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">KEEP_DAYS</span><span style="color: #8B008B; font-weight: bold">}</span> -exec rm -f {} <span style="color: #CD5555">\;</span>
<span style="color: #228B22"># Remove old video and data files which were modified more than n days ago</span>
find <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">MY_CAMERA_HOME</span><span style="color: #8B008B; font-weight: bold">}</span>/cctv/ -name <span style="color: #CD5555">'cctv_*'</span> -mtime +<span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">KEEP_DAYS</span><span style="color: #8B008B; font-weight: bold">}</span> -exec rm -f {} <span style="color: #CD5555">\;</span>
<span style="color: #228B22"># Remove old YYYYMMDD(daily) directory</span>
<span style="color: #228B22"># eg. if today is 2019-07-31, remove ${MY_CAMERA_HOME}/cctv/*/data/201907/20190724</span>
<span style="color: #00688B">OLD_DAILY_DIRECTORY</span>=<span style="color: #CD5555">`</span>date <span style="color: #CD5555">'+%Y%m%d'</span> -d <span style="color: #CD5555">"${KEEP_DAYS} day ago"`</span>
<span style="color: #00688B">OLD_MONTH_DIRECTORY</span>=<span style="color: #CD5555">`</span>date <span style="color: #CD5555">'+%Y%m'</span> -d <span style="color: #CD5555">"${KEEP_DAYS} day ago"`</span>
rm -rf <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">MY_CAMERA_HOME</span><span style="color: #8B008B; font-weight: bold">}</span>/cctv/*/data/<span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">OLD_MONTH_DIRECTORY</span><span style="color: #8B008B; font-weight: bold">}</span>/<span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">OLD_DAILY_DIRECTORY</span><span style="color: #8B008B; font-weight: bold">}</span>
<span style="color: #228B22"># Remove old YYYYMM(monthly) directory</span>
<span style="color: #228B22"># Also, remove directory which were created 2 month ago.</span>
<span style="color: #228B22"># Because I want to remove unnecessary directories certainly if it was not deleted accidently by any reason.</span>
<span style="color: #228B22"># - option : remove a padding(0)</span>
<span style="color: #228B22"># eg. %d -> 07, 08, 11 / %-d -> 7, 8, 11</span>
<span style="color: #00688B">TODAY</span>=<span style="color: #CD5555">`</span>date <span style="color: #CD5555">'+%-d'`</span>
<span style="color: #8B008B; font-weight: bold">if</span> [ <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">TODAY</span><span style="color: #8B008B; font-weight: bold">}</span> -gt <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">KEEP_DAYS</span><span style="color: #8B008B; font-weight: bold">}</span> ]; <span style="color: #8B008B; font-weight: bold">then</span>
<span style="color: #8B008B; font-weight: bold"> </span><span style="color: #00688B">MONTH_AGO_1_DIRECTORY</span>=<span style="color: #CD5555">`</span>date <span style="color: #CD5555">'+%Y%m'</span> -d <span style="color: #CD5555">"1 month ago"`</span>
<span style="color: #00688B">MONTH_AGO_1_YYYY</span>=<span style="color: #CD5555">`</span>date <span style="color: #CD5555">'+%Y'</span> -d <span style="color: #CD5555">"1 month ago"`</span>
<span style="color: #00688B">CURRENT_YYYY</span>=<span style="color: #CD5555">`</span>date <span style="color: #CD5555">'+%Y'`</span>
<span style="color: #228B22"># I don't know why it works like that exactly</span>
<span style="color: #228B22"># When I execute `date '+%Y%m' -d "1 month ago"` command on 31th July </span>
<span style="color: #228B22"># It returns not 06 but 07</span>
<span style="color: #228B22"># I think it maybe depends on Timezone</span>
<span style="color: #228B22"># So, check the month again manually</span>
<span style="color: #8B008B; font-weight: bold">if</span> [ <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">CURRENT_YYYY</span><span style="color: #8B008B; font-weight: bold">}</span> -ne <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">MONTH_AGO_1_YYYY</span><span style="color: #8B008B; font-weight: bold">}</span> ]; <span style="color: #8B008B; font-weight: bold">then</span>
<span style="color: #228B22"># Remove YYYYMMDD directory</span>
rm -rf <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">MY_CAMERA_HOME</span><span style="color: #8B008B; font-weight: bold">}</span>/cctv/*/data/<span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">MONTH_AGO_1_DIRECTORY</span><span style="color: #8B008B; font-weight: bold">}</span>
<span style="color: #8B008B; font-weight: bold">fi</span>
<span style="color: #228B22"># Remove the directory which were created 2 month ago</span>
<span style="color: #00688B">MONTH_AGO_2_DIRECTORY</span>=<span style="color: #CD5555">`</span>date <span style="color: #CD5555">'+%Y%m'</span> -d <span style="color: #CD5555">"2 month ago"`</span>
rm -rf <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">MY_CAMERA_HOME</span><span style="color: #8B008B; font-weight: bold">}</span>/cctv/*/data/<span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">MONTH_AGO_2_DIRECTORY</span><span style="color: #8B008B; font-weight: bold">}</span>
<span style="color: #8B008B; font-weight: bold">fi</span>
<span style="color: #658b00">exit </span>0
</pre></td></tr></table>
</div>
Wed, 31 Jul 2019 00:00:00 +0000
https://dorbae.github.io/linux/shellscript/linux-shellscript-howtoremovespecficfilesanddirectories/
https://dorbae.github.io/linux/shellscript/linux-shellscript-howtoremovespecficfilesanddirectories/
linux
shellscript
shell
Linux
Shellscript
-
[Linux] How to remove unnecessary backup files periodically
<h1 id="goal">Goal</h1>
<ul>
<li>Remove unnecessary MariaDB backup files which were modified more 6 days ago</li>
</ul>
<p><br /></p>
<h1 id="intro">Intro</h1>
<ul>
<li>I have created the backup file from MariaDB once a week</li>
<li><a href="https://dorbae.github.io/dbms/mariadb/dbms-mariadb-backupscript/">How to dump the backup file from MariaDB</a></li>
</ul>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h2 id="1-create-old-files">1. Create old files</h2>
<ul>
<li>I have to create files which have a similar name pattern and were modified more 6 days ago</li>
<li>You can use <strong>__<em>touch</em>__</strong> command</li>
</ul>
<div style="background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #888888">touch -t [[CC]YY]MMDDhhmm[.ss]</span>
</pre>
</div>
<p><br /></p>
<div style="background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><pre style="margin: 0; line-height: 125%"><span style="color: #888888">$ touch -t 201907150700 backup_mariadb_agriculture_19.07.15.0700.sql</span>
<span style="color: #888888">$ touch -t 201907220700 backup_mariadb_agriculture_19.07.22.0700.sql</span>
</pre></div>
<p><br /></p>
<p><img src="/assets/images/posts/2019/07/2019-07-29-linux-shellscript-howtoremovebackupfileperiodically-001.png" alt="screenshoot001" /></p>
<p><br /></p>
<h2 id="2-remove-old-files">2. Remove old files</h2>
<ul>
<li>You can find only the files that you want and execute a specific command to them by <strong>__<em>find</em>__</strong> command</li>
</ul>
<div style="background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #888888">$ find [DIRECTORY] -name [FILE_NAME] -mtime +[DAYS] -exec rm -f {} </span><span style="color: #CD5555">\;</span>
</pre>
</div>
<p><br /></p>
<div style="background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #888888">$ find ~/ -name </span><span style="color: #CD5555">'backup_mariadb_agriculture_*.sql'</span><span style="color: #888888"> -mtime +6 -exec rm -f {} </span><span style="color: #CD5555">\;</span>
</pre>
</div>
<p><br /></p>
<p><img src="/assets/images/posts/2019/07/2019-07-29-linux-shellscript-howtoremovebackupfileperiodically-002.png" alt="screenshoot002" /></p>
<p><br /></p>
<h2 id="3-register-in-cron">3. Register in Cron</h2>
<h3 id="31-edit-the-cron-table">3.1. Edit the cron table</h3>
<div style="background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><pre style="margin: 0; line-height: 125%"><span style="color: #888888">$ crontab -e</span>
</pre></div>
<p><br /></p>
<h3 id="32-register-the-schedule">3.2. Register the schedule</h3>
<ul>
<li>Cron pattern</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[MINUTE] [HOUR] [DAY] [MONTH] [DAY OF WEEK] [COMMAND]
</code></pre></div></div>
<p><br /></p>
<ul>
<li>I tried to execute backup script at 7 O’clock every day</li>
</ul>
<div style="background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #888888">0 7 * * * find ~/ -name 'backup_mariadb_agriculture_*.sql' -mtime +6 -exec rm -f {} \;</span>
</pre>
</div>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%82%A0%EC%A7%9C_%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C_%ED%8C%8C%EC%9D%BC_%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0">ZetaWiki</a></li>
<li><a href="https://joont.tistory.com/129">Toward the Developer</a></li>
</ul>
Mon, 29 Jul 2019 00:00:00 +0000
https://dorbae.github.io/linux/shellscript/linux-shellscript-howtoremovebackupfileperiodically/
https://dorbae.github.io/linux/shellscript/linux-shellscript-howtoremovebackupfileperiodically/
linux
shellscript
Linux
Shellscript
-
[MariaDB/MySQL] How to backup the data weekly
<h1 id="goal">Goal</h1>
<ul>
<li>Creat MariaDB backup shell script</li>
<li>Register in Cron</li>
</ul>
<p><br /></p>
<h1 id="intro">Intro</h1>
<ul>
<li>I wanted to dump the data which was in MariaDB for stability</li>
</ul>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h2 id="1-dump-shell-script">1. Dump shell script</h2>
<ul>
<li>Script</li>
</ul>
<div style="background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<table><tr><td><pre style="margin: 0; line-height: 125%"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26</pre></td><td><pre style="margin: 0; line-height: 125%"><span style="color: #228B22">#####################################################################</span>
<span style="color: #228B22"># Date Name Desc</span>
<span style="color: #228B22">#####################################################################</span>
<span style="color: #228B22"># 2019-07-29 SeongbaeChang Initialize</span>
<span style="color: #228B22"># 2018-07-17 SeongbaeChang Initialize</span>
<span style="color: #228B22">#####################################################################</span>
<span style="color: #228B22">#!/bin/bash</span>
<span style="color: #228B22"># Set current datetime</span>
<span style="color: #00688B">TIMESTAMP</span>=<span style="color: #CD5555">`</span>date +<span style="color: #CD5555">"%y.%m.%d.%H%M"`</span>
<span style="color: #00688B">BACKUP_FILENAME</span>=backup_mariadb_agriculture_<span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">TIMESTAMP</span><span style="color: #8B008B; font-weight: bold">}</span>.sql
<span style="color: #00688B">ROOT_HOME</span>=<span style="color: #CD5555">"/root"</span>
<span style="color: #00688B">MY_USER_HOME</span>=<span style="color: #CD5555">"/home/dorbae"</span>
<span style="color: #658b00">echo</span> <span style="color: #CD5555">"[`date +"</span>%Y-%m-%d %H:%M:%S<span style="color: #CD5555">"`] Start Backup..."</span>
<span style="color: #658b00">echo</span> <span style="color: #CD5555">"[`date +"</span>%Y-%m-%d %H:%M:%S<span style="color: #CD5555">"`] Backup File Name = ${BACKUP_FILENAME}"</span>
<span style="color: #228B22"># Backup MariaDB data as SQL format</span>
mysqldump -uagric -pagriculture agriculture > <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">ROOT_HOME</span><span style="color: #8B008B; font-weight: bold">}</span>/<span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">BACKUP_FILENAME</span><span style="color: #8B008B; font-weight: bold">}</span>
<span style="color: #658b00">echo</span> <span style="color: #CD5555">"[`date +"</span>%Y-%m-%d %H:%M:%S<span style="color: #CD5555">"`] Moving file ${ROOT_HOME} to ${MY_USER_HOME}"</span>
<span style="color: #228B22"># Move to another user home directory</span>
mv <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">ROOT_HOME</span><span style="color: #8B008B; font-weight: bold">}</span>/<span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">BACKUP_FILENAME</span><span style="color: #8B008B; font-weight: bold">}</span> <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">MY_USER_HOME</span><span style="color: #8B008B; font-weight: bold">}</span>/<span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">BACKUP_FILENAME</span><span style="color: #8B008B; font-weight: bold">}</span>
<span style="color: #228B22"># Change the owner managing the backup file</span>
chown dorbae:dorbae <span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">MY_USER_HOME</span><span style="color: #8B008B; font-weight: bold">}</span>/<span style="color: #8B008B; font-weight: bold">${</span><span style="color: #00688B">BACKUP_FILENAME</span><span style="color: #8B008B; font-weight: bold">}</span>
<span style="color: #658b00">echo</span> <span style="color: #CD5555">"[`date +"</span>%Y-%m-%d %H:%M:%S<span style="color: #CD5555">"`] Finished Backup."</span>
</pre></td></tr></table>
</div>
<p><br /></p>
<h2 id="2-register-in-cron">2. Register in Cron</h2>
<h3 id="21-edit-the-cron-table">2.1. Edit the cron table</h3>
<div style="background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><pre style="margin: 0; line-height: 125%"><span style="color: #888888"># crontab -e</span>
</pre></div>
<p><br /></p>
<h3 id="22-register-the-schedule">2.2. Register the schedule</h3>
<ul>
<li>Cron pattern</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[MINUTE] [HOUR] [DAY] [MONTH] [DAY OF WEEK] [COMMAND]
</code></pre></div></div>
<p><br /></p>
<ul>
<li>I tried to execute backup script at 7 O’clock every day</li>
</ul>
<p><img src="/assets/images/posts/2019/07/2019-07-29-dbms-mariadb-backupscript-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h2 id="3-result">3. Result</h2>
<p><img src="/assets/images/posts/2019/07/2019-07-29-dbms-mariadb-backupscript-002.png" alt="screenshot002" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
Mon, 29 Jul 2019 00:00:00 +0000
https://dorbae.github.io/dbms/mariadb/dbms-mariadb-backupscript/
https://dorbae.github.io/dbms/mariadb/dbms-mariadb-backupscript/
dbms
mariadb
mysql
backup
DBMS
MariaDB
-
[Android] Cleartext HTTP traffic to X.X.X not permitted
<h1 id="goal">Goal</h1>
<ul>
<li>Solve ‘Cleartext HTTP traffic to X.X.X not permitted’ error</li>
</ul>
<p><br /></p>
<h1 id="problem">Problem</h1>
<ul>
<li>I replaced the target SDK 27 with 28(Pie 9.0)</li>
<li>After that, when trying to communicate with server by HTTP protocol, this error occured</li>
</ul>
<p><img src="/assets/images/posts/2019/07/2019-07-11-android-security-cleartexthttptraffictonotpermitted.md-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h1 id="solution">Solution</h1>
<h2 id="cause">Cause</h2>
<ul>
<li>From API level 28(Pie 9.0) it has been default to prevent unencrypted HTTP protocl</li>
</ul>
<p><img src="/assets/images/posts/2019/07/2019-07-11-android-security-cleartexthttptraffictonotpermitted.md-002.png" alt="screenshot002" /></p>
<blockquote>
<p><a href="https://developer.android.com/training/articles/security-config#CleartextTrafficPermitted">AndroidDeveloper</a></p>
</blockquote>
<p><br /></p>
<h2 id="1-add-a-network-security-configuration-file">1. Add a Network Security Configuration file</h2>
<ul>
<li>The Network Security Configuration feature uses an XML file where you specify the settings for your app</li>
</ul>
<h3 id="11-add-xml-file-in-resxml">1.1 Add xml file in res/xml</h3>
<ul>
<li>Create <strong>network_security_config.xml</strong> file in src/res/xml directory</li>
</ul>
<p><img src="/assets/images/posts/2019/07/2019-07-11-android-security-cleartexthttptraffictonotpermitted.md-003.png" alt="screenshot003" /></p>
<p><img src="/assets/images/posts/2019/07/2019-07-11-android-security-cleartexthttptraffictonotpermitted.md-004.png" alt="screenshot004" /></p>
<p><br /></p>
<h3 id="12-add-options">1.2. Add options</h3>
<ul>
<li>Recommend to allow only specific domains</li>
</ul>
<div style="background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<table><tr><td><pre style="margin: 0; line-height: 125%"> 1
2
3
4
5
6
7
8
9
10
11
12
13</pre></td><td><pre style="margin: 0; line-height: 125%"><span style="color: #1e889b"><?xml version="1.0" encoding="utf-8"?></span>
<span style="color: #8B008B; font-weight: bold"><network-security-config></span>
<span style="color: #228B22"><!-- Allow specific domains --></span>
<span style="color: #8B008B; font-weight: bold"><domain-config</span> <span style="color: #658b00">cleartextTrafficPermitted=</span><span style="color: #CD5555">"true"</span><span style="color: #8B008B; font-weight: bold">></span>
<span style="color: #8B008B; font-weight: bold"><domain</span> <span style="color: #658b00">includeSubdomains=</span><span style="color: #CD5555">"true"</span><span style="color: #8B008B; font-weight: bold">></span>iot.qubics.kr<span style="color: #8B008B; font-weight: bold"></domain></span>
<span style="color: #8B008B; font-weight: bold"></domain-config></span>
<span style="color: #228B22"><!-- Allow all domains --></span>
<span style="color: #228B22"><!--</span>
<span style="color: #228B22"> <base-config cleartextTrafficPermitted="true" /></span>
<span style="color: #228B22"> --></span>
<span style="color: #8B008B; font-weight: bold"></network-security-config></span>
</pre></td></tr></table>
</div>
<p><br /></p>
<h3 id="13-edit-androidmanifestxml">1.3. Edit AndroidManifest.xml</h3>
<ul>
<li>Add <strong>android:networkSecurityConfig=”@xml/network_security_config”</strong> option</li>
</ul>
<div style="background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><table><tr><td><pre style="margin: 0; line-height: 125%">1
2
3
4
5
6
7
8
9</pre></td><td><pre style="margin: 0; line-height: 125%"><span style="color: #1e889b"><?xml version="1.0" encoding="utf-8"?></span>
<span style="color: #8B008B; font-weight: bold"><manifest</span> <span style="color: #658b00">xmlns:android=</span><span style="color: #CD5555">"http://schemas.android.com/apk/res/android"</span>
<span style="color: #658b00">package=</span><span style="color: #CD5555">"io.dorbae.android"</span><span style="color: #8B008B; font-weight: bold">></span>
<span style="color: #8B008B; font-weight: bold"><application</span>
<span style="color: #658b00">android:networkSecurityConfig=</span><span style="color: #CD5555">"@xml/network_security_config"</span>
<span style="color: #a61717; background-color: #e3d2d2">...</span><span style="color: #8B008B; font-weight: bold">></span>
....
<span style="color: #8B008B; font-weight: bold"></application></span>
<span style="color: #8B008B; font-weight: bold"></manifest></span>
</pre></td></tr></table></div>
<p><img src="/assets/images/posts/2019/07/2019-07-11-android-security-cleartexthttptraffictonotpermitted.md-005.png" alt="screenshot005" /></p>
<p><br /></p>
<h2 id="2-edit-only-androidmaniofestxml">2. Edit only AndroidManiofest.xml</h2>
<ul>
<li>Add <strong>android:useCleartextTraffic=”true”</strong> option</li>
</ul>
<p>div style=”background: #eeeedd; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;”><table><tr><td><pre style="margin: 0; line-height: 125%">1
2
3
4
5
6
7
8
9</pre></td><td><pre style="margin: 0; line-height: 125%"><span style="color: #1e889b"><?xml version="1.0" encoding="utf-8"?></span>
<span style="color: #8B008B; font-weight: bold"><manifest</span> <span style="color: #658b00">xmlns:android=</span><span style="color: #CD5555">"http://schemas.android.com/apk/res/android"</span>
<span style="color: #658b00">package=</span><span style="color: #CD5555">"io.dorbae.android"</span><span style="color: #8B008B; font-weight: bold">></span>
<span style="color: #8B008B; font-weight: bold"><application</span>
<span style="color: #658b00">android:usesCleartextTraffic=</span><span style="color: #CD5555">"true"</span>
<span style="color: #a61717; background-color: #e3d2d2">…</span><span style="color: #8B008B; font-weight: bold">></span>
….
<span style="color: #8B008B; font-weight: bold"></application></span>
<span style="color: #8B008B; font-weight: bold"></manifest></span>
</pre></td></tr></table></div></p>
<p><img src="/assets/images/posts/2019/07/2019-07-11-android-security-cleartexthttptraffictonotpermitted.md-006.png" alt="screenshot006" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://developer.android.com/reference/android/security/NetworkSecurityPolicy.html#isCleartextTrafficPermitted()">AndroidDeveloper NetworkSecurityPolicy</a></li>
<li><a href="https://stackoverflow.com/questions/50334686/cleartext-http-traffic-to-192-168-1-2-not-permitted">StackOverflow</a></li>
<li><a href="https://gun0912.tistory.com/80">박상권의 삽질블로그</a></li>
</ul>
Thu, 11 Jul 2019 00:00:00 +0000
https://dorbae.github.io/android/security/android-security-cleartexthttptraffictonotpermitted/
https://dorbae.github.io/android/security/android-security-cleartexthttptraffictonotpermitted/
android
pie
troubleshooting
Android
Security
-
[Django] Download files
<h1 id="goal">Goal</h1>
<ul>
<li>How to impletement the function which support file download in Django</li>
</ul>
<p><br /></p>
<h1 id="intro">Intro</h1>
<ul>
<li>I wanted to make people download apk file in my REST server</li>
</ul>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h2 id="1-create-app-and-setup-files">1. Create App and setup files</h2>
<h3 id="11-start-app">1.1. Start app</h3>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #d0d0d0">(venv) $ python manage.py startapp [APP_NAME]</span>
</pre>
</div>
<p><img src="/assets/images/posts/2019/06/2019-06-26-python-django-downloadfile-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h3 id="12-setup-files-to-be-downloaded">1.2 Setup files to be downloaded</h3>
<ul>
<li>You can put files in anywhere, but I made ‘files’ directory in created app directory. And I put my files in there.</li>
<li>In my case, I created new sub directory name ‘apk’ and put my apk files in there.</li>
</ul>
<p><img src="/assets/images/posts/2019/06/2019-06-26-python-django-downloadfile-002.png" alt="screenshot002" /></p>
<p><br /></p>
<h2 id="2-create-function-for-download">2. Create function for download</h2>
<ul>
<li>Code</li>
</ul>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<table><tr><td><pre style="margin: 0; line-height: 125%"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31</pre></td><td><pre style="margin: 0; line-height: 125%"><span style="color: #999999; font-style: italic">############################################################</span>
<span style="color: #999999; font-style: italic">#</span>
<span style="color: #999999; font-style: italic"># Request for downloading</span>
<span style="color: #999999; font-style: italic">#</span>
<span style="color: #999999; font-style: italic">############################################################</span>
<span style="color: #999999; font-style: italic"># Version Date Author Description</span>
<span style="color: #999999; font-style: italic">############################################################</span>
<span style="color: #999999; font-style: italic"># 1.0.0 2019-06-26 dorbae Initialize</span>
<span style="color: #999999; font-style: italic">############################################################</span>
<span style="color: #6ab825; font-weight: bold">from</span> <span style="color: #447fcf; text-decoration: underline">django.http</span> <span style="color: #6ab825; font-weight: bold">import</span> <span style="color: #d0d0d0">HttpResponse,</span> <span style="color: #d0d0d0">Http404</span>
<span style="color: #6ab825; font-weight: bold">import</span> <span style="color: #447fcf; text-decoration: underline">os</span>
<span style="color: #999999; font-style: italic"># Django project base directory</span>
<span style="color: #d0d0d0">BASE_DIR</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">os.path.dirname(os.path.dirname(os.path.abspath(__file__)))</span>
<span style="color: #999999; font-style: italic">#</span>
<span style="color: #999999; font-style: italic"># Download APK file</span>
<span style="color: #999999; font-style: italic">#</span>
<span style="color: #6ab825; font-weight: bold">def</span> <span style="color: #447fcf">download_apk</span><span style="color: #d0d0d0">(request,</span> <span style="color: #d0d0d0">file_base_name):</span>
<span style="color: #24909d">print</span><span style="color: #d0d0d0">(</span><span style="color: #ed9d13">'Download '</span> <span style="color: #d0d0d0">+</span> <span style="color: #d0d0d0">file_base_name</span> <span style="color: #d0d0d0">+</span> <span style="color: #ed9d13">'.apk...'</span><span style="color: #d0d0d0">)</span>
<span style="color: #999999; font-style: italic"># Full path of file</span>
<span style="color: #d0d0d0">file_path</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">BASE_DIR</span> <span style="color: #d0d0d0">+</span> <span style="color: #ed9d13">'/download/files/apk/'</span> <span style="color: #d0d0d0">+</span> <span style="color: #d0d0d0">file_base_name</span> <span style="color: #d0d0d0">+</span> <span style="color: #ed9d13">'.apk'</span>
<span style="color: #6ab825; font-weight: bold">if</span> <span style="color: #d0d0d0">os.path.exists(file_path):</span>
<span style="color: #6ab825; font-weight: bold">with</span> <span style="color: #24909d">open</span><span style="color: #d0d0d0">(file_path,</span> <span style="color: #ed9d13">'rb'</span><span style="color: #d0d0d0">)</span> <span style="color: #6ab825; font-weight: bold">as</span> <span style="color: #d0d0d0">fh:</span>
<span style="color: #d0d0d0">response</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">HttpResponse(fh.read(),</span> <span style="color: #d0d0d0">content_type=</span><span style="color: #ed9d13">"application/force_download"</span><span style="color: #d0d0d0">)</span>
<span style="color: #d0d0d0">response[</span><span style="color: #ed9d13">'Content-Disposition'</span><span style="color: #d0d0d0">]</span> <span style="color: #d0d0d0">=</span> <span style="color: #ed9d13">'inline; filename='</span> <span style="color: #d0d0d0">+</span> <span style="color: #d0d0d0">os.path.basename(file_path)</span>
<span style="color: #6ab825; font-weight: bold">return</span> <span style="color: #d0d0d0">response</span>
<span style="color: #999999; font-style: italic"># If file is not exists</span>
<span style="color: #6ab825; font-weight: bold">raise</span> <span style="color: #d0d0d0">Http404</span>
</pre></td></tr></table>
</div>
<p><br /></p>
<h2 id="3-url-mapping">3. URL Mapping</h2>
<h3 id="31-edit-appurlspy">3.1. Edit [APP]/urls.py</h3>
<ul>
<li>Code</li>
</ul>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><table><tr><td><pre style="margin: 0; line-height: 125%">1
2
3
4
5
6
7</pre></td><td><pre style="margin: 0; line-height: 125%"><span style="color: #6ab825; font-weight: bold">from</span> <span style="color: #447fcf; text-decoration: underline">django.urls</span> <span style="color: #6ab825; font-weight: bold">import</span> <span style="color: #d0d0d0">path</span>
<span style="color: #6ab825; font-weight: bold">from</span> <span style="color: #447fcf; text-decoration: underline">.</span> <span style="color: #6ab825; font-weight: bold">import</span> <span style="color: #d0d0d0">views</span>
<span style="color: #d0d0d0">urlpatterns</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">[</span>
<span style="color: #d0d0d0">path(</span><span style="color: #ed9d13">'apks/<str:file_base_name>/'</span><span style="color: #d0d0d0">,</span> <span style="color: #d0d0d0">views.download_apk,</span> <span style="color: #d0d0d0">name=</span><span style="color: #ed9d13">'download_apk'</span><span style="color: #d0d0d0">),</span>
<span style="color: #d0d0d0">]</span>
</pre></td></tr></table></div>
<p><br /></p>
<h3 id="32-edit-projecturlspy">3.2. Edit [PROJECT]/urls.py</h3>
<ul>
<li>Add URL Pattern</li>
</ul>
<p><img src="/assets/images/posts/2019/06/2019-06-26-python-django-downloadfile-003.png" alt="screenshot003" /></p>
<p><br /></p>
<h2 id="4-test">4. Test</h2>
<p><img src="/assets/images/posts/2019/06/2019-06-26-python-django-downloadfile-004.png" alt="screenshot004" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://stackoverflow.com/questions/36392510/django-download-a-file">Stackoverflow</a></li>
</ul>
Wed, 26 Jun 2019 00:00:00 +0000
https://dorbae.github.io/python/django/python-django-downloadfile/
https://dorbae.github.io/python/django/python-django-downloadfile/
python
django
download
Python
Django
-
[Django] Setup virtual enviroment
<h1 id="goal">Goal</h1>
<ul>
<li>How to setup Python virtual environment</li>
</ul>
<p><br /></p>
<h1 id="intro">Intro</h1>
<ul>
<li>I had a plan to deploy my Django project on server</li>
<li>However, there were already a lot of Python programs</li>
<li>So, I wanted to make a special python environment containing packages which will be used in only my project</li>
</ul>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h2 id="1-install-venv">1. Install venv</h2>
<ul>
<li>venv : the module used to create and manage virtual environments</li>
</ul>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #999999; font-style: italic"># apt-get install python3-venv</span>
</pre>
</div>
<p><img src="/assets/images/posts/2019/06/2019-06-21-python-django-setupvirtualenv-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h2 id="2-setup-virtual-environment">2. Setup virtual environment</h2>
<h3 id="21-create-virtual">2.1. Create virtual</h3>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #d0d0d0">$ python3 -m venv [VENV_DIRECTORY]</span>
</pre>
</div>
<p><img src="/assets/images/posts/2019/06/2019-06-21-python-django-setupvirtualenv-002.png" alt="screenshot002" /></p>
<h3 id="22-activate-virtual-environment">2.2. Activate virtual environment</h3>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><pre style="margin: 0; line-height: 125%"><span style="color: #d0d0d0">$ source [VENV_DIRECTORY/bin/activate</span>
</pre></div>
<p><img src="/assets/images/posts/2019/06/2019-06-21-python-django-setupvirtualenv-003.png" alt="screenshot003" /></p>
<p><br /></p>
<p><img src="/assets/images/posts/2019/06/2019-06-21-python-django-setupvirtualenv-004.png" alt="screenshot004" /></p>
<p><img src="/assets/images/posts/2019/06/2019-06-21-python-django-setupvirtualenv-005.png" alt="screenshot005" /></p>
<p><img src="/assets/images/posts/2019/06/2019-06-21-python-django-setupvirtualenv-006.png" alt="screenshot006" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://docs.python.org/ko/3/tutorial/venv.html">https://docs.python.org/ko/3/tutorial/venv.html</a></li>
</ul>
Fri, 21 Jun 2019 00:00:00 +0000
https://dorbae.github.io/python/django/python-django-setupvirtualenv/
https://dorbae.github.io/python/django/python-django-setupvirtualenv/
python
virtual
django
Python
Django
-
[Django] Invalid HTTP_HOST header: '[HOST]'. You may need add '[HOST]' to ALLOWED_HOSTS
<h1 id="goal">Goal</h1>
<ul>
<li>To solve “Invalid HTTP_HOST header: ‘[HOST]’. You may need add ‘[HOST]’ to ALLOWED_HOSTS”’ problem.</li>
</ul>
<p><br /></p>
<h1 id="intro">Intro</h1>
<ul>
<li>When I connected my Django REST server by domain likes this ‘http://iot.dorbae.kr:8000/~’, this error occured and I wasn’t able to connect the server.</li>
</ul>
<p><img src="/assets/images/posts/2019/06/2019-06-19-Python-Django-Youmayneedtoaddtoallowedhosts-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h2 id="1-add-allowed-host">1. Add allowed host</h2>
<h3 id="11-open-settingpy-file-in-your-djang-project">1.1. Open setting.py file in your djang project</h3>
<h3 id="12-add-allowed-hosts">1.2. Add allowed hosts</h3>
<ul>
<li>[‘*’] : Allow all</li>
<li>[‘localhost’] or [‘localhost’, ‘iot.dorbae.kr’, ‘10.12.33.55’] : Allow specific hosts</li>
</ul>
<p><img src="/assets/images/posts/2019/06/2019-06-19-Python-Django-Youmayneedtoaddtoallowedhosts-002.gif" alt="screenshot002" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://programmers.co.kr/learn/questions/1025">https://programmers.co.kr/learn/questions/1025</a></li>
</ul>
Wed, 19 Jun 2019 00:00:00 +0000
https://dorbae.github.io/python/django/Python-Django-Youmayneedtoaddtoallowedhosts/
https://dorbae.github.io/python/django/Python-Django-Youmayneedtoaddtoallowedhosts/
python
django
troubleshooting
Python
Django
-
[Telephone English] Learning English by phone #032
<h1 id="전화영어---day-032-20190618">전화영어 - Day 032 (20190618)</h1>
<h2 id="part-1">Part 1</h2>
<ul>
<li>Question
<ul>
<li>Do you like to smile?</li>
</ul>
</li>
<li>Answer (In my case)
<ul>
<li>Yes, I love to smiling. Because it makes people happy or makes more funny. And it is also addiction. So some people smile, Many people smile, other people also smile.</li>
</ul>
</li>
<li>Answer (Correction)
<ul>
<li>Yes, I love to smiling. Because it makes people happy. Smiling is contagious which means when you smile, others smile as well.</li>
</ul>
<blockquote>
<p>funny : Gag, Humor에 즐거워하는 것
addiction -> contagious : 전염성의</p>
</blockquote>
</li>
</ul>
<p><br /></p>
<ul>
<li>Question
<ul>
<li>When people smile at each other?</li>
</ul>
</li>
<li>Answer (In my case)
<ul>
<li>Many people smile when they see small babies and behavior of themWhen they. In my case, I smile when I see my puppies.</li>
</ul>
<blockquote>
<p>smile == laugh</p>
</blockquote>
</li>
</ul>
<p><br /></p>
<ul>
<li>Question
<ul>
<li>Do you smile, when others take pictures of you?</li>
</ul>
</li>
<li>Answer (In my case)
<ul>
<li>No, I don’t. Because I’m not familliar with the picture. So, other people can smile when taking picture. On the other hand, I don’t smile when other take a picture of me.</li>
</ul>
</li>
</ul>
<p><br /></p>
<hr />
<h2 id="part-2">Part 2</h2>
<ul>
<li>Question
<ul>
<li>Describe an impressive work of art such as painting or sculpture you saw</li>
<li>You should say:
<ul>
<li>What it is</li>
<li>When and where you first saw this work or art</li>
<li>What it looks like</li>
<li>And explain why you like it</li>
</ul>
</li>
</ul>
</li>
<li>Answer (In my case)
<ul>
<li>I’d like to talk about some impressive work of art. When I was young, I went to Paris over 1 month. Because my father was studying in Paris over 1 year. So, I went to there with my family. And I was able to have change to go to museum of Louvre. And then I saw 4 paintings which had the face of men which represented the weather. One of them represented Spring and it was composed of fruit and vegetable which grew up in Spring. It was very fresh painting and I deeply moved by the painter’s idea. I saw many works of art in the museum.</li>
</ul>
</li>
<li>Answer (Correction)
<ul>
<li>I’d like to talk about some impressivev work of art. When I was young, I went to Paris and stayed there for over a month because my father was studying there. Because of that, I was able to have a chance to go to the Louvre Museum where I saw a set of paintings which had faces of men representing the four seasons, thus it is called The Four Seasons. Since it depicted the four seasons, each painting had the elements of each season. For instance, the painting about spring had some vegetables and fruits that made up the man’s face while the winner shows the face of a man with a tree consisting of few leaves. It was something new to me so I was really impressed. I think the idea was unique but excellent so it kind of moved me compared to the paintings in that museum.</li>
</ul>
<blockquote>
<p>grew up (X) -> grew(O)</p>
</blockquote>
</li>
</ul>
<p><br /></p>
<hr />
<h2 id="correction-others">Correction Others</h2>
<ul>
<li>furnitures(X) : 셀 수 없는 명사</li>
</ul>
Tue, 18 Jun 2019 00:00:00 +0000
https://dorbae.github.io/english/telephone/english-telephone-032/
https://dorbae.github.io/english/telephone/english-telephone-032/
english
telephone
telephone english
English
Telephone
-
[PyCharm] How to disable editor vim mode
<h1 id="goal">Goal</h1>
<ul>
<li>To set Vim mode in editor disabled.</li>
</ul>
<p><br /></p>
<h1 id="intro">Intro</h1>
<ul>
<li>I felt very uncomportable when using vim mode in editor. So, I wanted to disable this function.</li>
</ul>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h2 id="1-prefences--plugins--installed">1. Prefences > plugins > installed</h2>
<p><img src="/assets/images/posts/2019/05/2019-05-31-Python-Pycharm-Disableideavimplugin-001.png" alt="screenshot001" /></p>
<h2 id="2-disable-ideavim">2. Disable IdeaVim</h2>
<p><img src="/assets/images/posts/2019/05/2019-05-31-Python-Pycharm-Disableideavimplugin-002.png" alt="screenshot002" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<p><a href="http://egloos.zum.com/geneus/v/3536401">http://egloos.zum.com/geneus/v/3536401</a></p>
Fri, 31 May 2019 00:00:00 +0000
https://dorbae.github.io/python/pycharm/Python-Pycharm-Disableideavimplugin/
https://dorbae.github.io/python/pycharm/Python-Pycharm-Disableideavimplugin/
python
pycharm
ideavim
Python
PyCharm
-
[Python] SELECT data from InfluxDB
<h1 id="goal">Goal</h1>
<ul>
<li>To select data from InfluxDB</li>
</ul>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h2 id="1-install-influxdb-module">1. Install InfluxDB module</h2>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><pre style="margin: 0; line-height: 125%"><span style="color: #d0d0d0">$ pip install influxdb</span>
</pre></div>
<p><img src="/assets/images/posts/2019/05/2019-05-31-Python-Influxdb-Selectdatatutorial-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h2 id="2-select-data">2. Select data</h2>
<ul>
<li>Code</li>
</ul>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"><table><tr><td><pre style="margin: 0; line-height: 125%"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31</pre></td><td><pre style="margin: 0; line-height: 125%"><span style="color: #999999; font-style: italic">############################################################</span>
<span style="color: #999999; font-style: italic">#</span>
<span style="color: #999999; font-style: italic"># InfluxDB SELECT sample</span>
<span style="color: #999999; font-style: italic">#</span>
<span style="color: #999999; font-style: italic">############################################################</span>
<span style="color: #999999; font-style: italic"># Version Date Author Description</span>
<span style="color: #999999; font-style: italic">############################################################</span>
<span style="color: #999999; font-style: italic"># 1.0.0 2019-05-31 dorbae Initialize</span>
<span style="color: #999999; font-style: italic">############################################################</span>
<span style="color: #6ab825; font-weight: bold">from</span> <span style="color: #447fcf; text-decoration: underline">influxdb</span> <span style="color: #6ab825; font-weight: bold">import</span> <span style="color: #d0d0d0">InfluxDBClient</span>
<span style="color: #6ab825; font-weight: bold">def</span> <span style="color: #447fcf">main</span><span style="color: #d0d0d0">():</span>
<span style="color: #ed9d13">"""Instantiate a connection to the InfluxDB."""</span>
<span style="color: #d0d0d0">host</span> <span style="color: #d0d0d0">=</span> <span style="color: #ed9d13">'localhost'</span>
<span style="color: #d0d0d0">port</span> <span style="color: #d0d0d0">=</span> <span style="color: #3677a9">8086</span>
<span style="color: #d0d0d0">user</span> <span style="color: #d0d0d0">=</span> <span style="color: #ed9d13">'root'</span>
<span style="color: #d0d0d0">password</span> <span style="color: #d0d0d0">=</span> <span style="color: #ed9d13">'root'</span>
<span style="color: #d0d0d0">dbname</span> <span style="color: #d0d0d0">=</span> <span style="color: #ed9d13">'iotdb'</span>
<span style="color: #d0d0d0">query</span> <span style="color: #d0d0d0">=</span> <span style="color: #ed9d13">'SELECT mean(*) FROM "iotseries" WHERE time > now() - 1d AND mGroupID = \'sample\' and mDeviceID = \'2435839\' GROUP BY time(1h);'</span>
<span style="color: #d0d0d0">client</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">InfluxDBClient(host,</span> <span style="color: #d0d0d0">port,</span> <span style="color: #d0d0d0">user,</span> <span style="color: #d0d0d0">password,</span> <span style="color: #d0d0d0">dbname)</span>
<span style="color: #24909d">print</span><span style="color: #d0d0d0">(</span><span style="color: #ed9d13">"Querying data: "</span> <span style="color: #d0d0d0">+</span> <span style="color: #d0d0d0">query)</span>
<span style="color: #d0d0d0">result</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">client.query(query)</span>
<span style="color: #6ab825; font-weight: bold">for</span> <span style="color: #d0d0d0">point</span> <span style="color: #6ab825; font-weight: bold">in</span> <span style="color: #d0d0d0">result.get_points():</span>
<span style="color: #24909d">print</span><span style="color: #d0d0d0">(point)</span>
<span style="color: #6ab825; font-weight: bold">if</span> <span style="color: #d0d0d0">__name__</span> <span style="color: #d0d0d0">==</span> <span style="color: #ed9d13">'__main__'</span><span style="color: #d0d0d0">:</span>
<span style="color: #d0d0d0">main()</span>
</pre></td></tr></table></div>
<ul>
<li>Result</li>
</ul>
<p><img src="/assets/images/posts/2019/05/2019-05-31-Python-Influxdb-Selectdatatutorial-002.png" alt="screenshot002" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="https://influxdb-python.readthedocs.io/en/latest/examples.html">https://influxdb-python.readthedocs.io/en/latest/examples.html</a></li>
</ul>
Fri, 31 May 2019 00:00:00 +0000
https://dorbae.github.io/python/influxdb/Python-Influxdb-Selectdatatutorial/
https://dorbae.github.io/python/influxdb/Python-Influxdb-Selectdatatutorial/
python
influxdb
influxdb
Python
InfluxDB
-
[Telephone English] Learning English by phone #030
<h1 id="전화영어---day-030-20190530">전화영어 - Day 030 (20190530)</h1>
<h2 id="part-1">Part 1</h2>
<ul>
<li>Question
<ul>
<li>Where do people usually go during festival?</li>
</ul>
</li>
<li>Answer (In my case)
<ul>
<li>Many people usally go countryside during festival. Because there are many festivals in countryside such as flower festival, music festival.</li>
</ul>
</li>
<li>Answer (Correction)
<ul>
<li>I think most people go to the countryside since most festivals are held there.</li>
</ul>
</li>
</ul>
<p><br /></p>
<hr />
<h2 id="part-2">Part 2</h2>
<ul>
<li>Question
<ul>
<li>Describe a newly built public facility (such as parks, cinemas, etc.) that influences your city</li>
<li>You should say:
<ul>
<li>Where this facility is</li>
<li>When it was built</li>
<li>What people can do there</li>
<li>What influence this facility has</li>
</ul>
</li>
</ul>
</li>
<li>Answer (In my case)
<ul>
<li>I’d like to talk about the park in my city. Many people called it as Yeonam-Park. Because it is in Yeonam-dong. In the past, there was train track which was not used for a long time. And three years ago, the goverment rebuilt the park in there. Nowadays, many people take a rest in there drinking beer, playing music, just talking with their friends. After rebuiling the park, many people can relieve their stress taking a break. And also there are many stores such as food restaraunts, accessory shops. Because due to new park, many people go there.</li>
</ul>
</li>
<li>Answer (Correction)
<ul>
<li>I’d like to talk about the park in my city. Many people call it as Yonam Park because it is in Yonamdong and in the past, there was train track in there which was not used for a long time until 3 years ago when the government rebuilt the park in there, nowadays many people take a rest in there, drinking beer or playing music or just talking with their friends. So this park provided people with a place where they can relieve their stress, bond with their friends and spend quality time with their family. Around the park, there are some some stores such as restaurants, convenience stores, boutiques and more which means this park also allowed people to start their own business and help those who are unemployed. So I think this park has a lot of influences to the people and our society.</li>
</ul>
<blockquote>
<p>boutique : 옷, 악세서리 파는 가게</p>
</blockquote>
</li>
</ul>
<p><br /></p>
<hr />
<h2 id="part-3">Part 3</h2>
<ul>
<li>Question
<ul>
<li>What measures should be taken to deal with damage on public facilities?</li>
</ul>
</li>
<li>Answer (In my case)
<ul>
<li>I think if someone damages public facilities, administrator of them or the goverment should take fine about that to him or her. And, the goverment should think about preventing the damages. For example, they should warn to people by setting up warning sign in there.</li>
</ul>
</li>
<li>Answer (Correction)
<ul>
<li>I think the administrator of those public facilities should impose the rules and regulations strictly. For example, those offenders should pay some fine or even go to jail. It would also be helpful to set up some warning signs and CCTV cameras to prevent people from damaging public facilities.</li>
</ul>
<blockquote>
<p>impose : 재정하다, 부과하다</p>
</blockquote>
</li>
</ul>
<p><br /></p>
<ul>
<li>Question
<ul>
<li>What are the differences between old facilities and new facilities?</li>
</ul>
</li>
<li>Answer (In my case)
<ul>
<li>I think there are many differences between old ones and new ones. At first, the old facilities have long history of them. Many feel comportable in there, becuase they are very familiar with many people. On the other hand, the new facilities provide more thinks for people. And there are more facilities in there such as toilets and the places for baby. For example, the new shopping complex usually has the place where babies can play and from it many parents can take a shopping freely. Also there are leisure facilities in there such as cinema, boutique, electronic shop, so on.</li>
</ul>
</li>
<li>Answer (Correction)
<ul>
<li>First, old facilities usually have long history so people feel more comfortable when visiting them since they have become very familiar to them. On the other, new facilities offer much more convenience to people because they have a lot of new places, activities and more to offer. For example, they have feeding stations for moms and their babies however, old facilities do not. In addition, new shopping malls have more shops to choose from including international ones, but old shopping malls usually have local stores.</li>
</ul>
<blockquote>
<p>convenience : 컨<strong>베</strong>니언스(x) 컨<strong>비</strong>니언스(o)</p>
</blockquote>
</li>
</ul>
<p><br /></p>
<ul>
<li>Question
<ul>
<li>Is it popular to give hand-made gift in your country?</li>
</ul>
</li>
<li>Answer (In my case)
<ul>
<li>Yes, I think it is very popular in my country. So, some people make a cake or neck warmer for birthday of their friends or family. In my case, I also made chocolate by hand-made for my wife. And chocolate stick is very common and popular hand-made gift in my country.</li>
</ul>
</li>
</ul>
<p><br /></p>
<ul>
<li>Question
<ul>
<li>Do you think expensive gifts are always more valuable than cheap ones?</li>
</ul>
</li>
<li>Answer (In my case)
<ul>
<li>When I was young, I thought the price of present was not important and effort was more precious. But, nowadays, pricey present is better than others such as hand-made present. Above all, I think the best present is which receiver wants to buy.</li>
</ul>
<blockquote>
<p>I think the value of a gift doesn’t depent on its price, instead it depends on the the giver’s sincerity.</p>
</blockquote>
<blockquote>
<p>when kids make a very simple gift for their parents, parents are usually very touched and thrilled</p>
</blockquote>
</li>
</ul>
<p><br /></p>
<hr />
<h2 id="correction-others">Correction Others</h2>
<ul>
<li>
<p>cherry blossom festival : 벚꽃 축제</p>
</li>
<li>
<p>I want to go to that festival someday -> I want to join in that festival someday</p>
</li>
</ul>
Thu, 30 May 2019 00:00:00 +0000
https://dorbae.github.io/english/telephone/english-telephone-030/
https://dorbae.github.io/english/telephone/english-telephone-030/
english
telephone
telephone english
English
Telephone
-
[Docker] Run MariaDB container and edit configuration
<h1 id="goal">Goal</h1>
<ul>
<li>To run MariaDB container</li>
<li>To edit DB configuration including memory parameter and connector</li>
</ul>
<p><br /></p>
<h1 id="intro">Intro</h1>
<ul>
<li>Install MariaDB in IBM Linux using docker</li>
<li>I already received docker image in advance.</li>
</ul>
<p><br /></p>
<h1 id="practice">Practice</h1>
<h2 id="1-run-container">1. Run container</h2>
<h3 id="11-check-docker-images">1.1 Check Docker images</h3>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #999999; font-style: italic"># docker images</span>
</pre>
</div>
<p><img src="/assets/images/posts/2019/05/2019-05-30-Docker-Basic-Runmariadbandedit-001.png" alt="screenshot001" /></p>
<p><br /></p>
<h3 id="12-create-container-from-image">1.2. Create container from image</h3>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #999999; font-style: italic"># docker run --name [CONTAINER_NAME] -e MYSQL_ROOT_PASSWERD=[PASSWORD] -d [IMAGE_NAME{:TAG}]</span>
<span style="color: #999999; font-style: italic"># docker ps</span>
</pre>
</div>
<blockquote>
<p>–name : Container’s name</p>
</blockquote>
<blockquote>
<p>-e, –env : Set environment variables</p>
</blockquote>
<blockquote>
<p>-d, –detach : Run container in background and print container ID</p>
</blockquote>
<p><img src="/assets/images/posts/2019/05/2019-05-30-Docker-Basic-Runmariadbandedit-002.png" alt="screenshot002" /></p>
<p><br /></p>
<h3 id="13-interface-tty-with-container">1.3. Interface TTY with container</h3>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #999999; font-style: italic"># docker exec -it [CONTAINER_NAME] /bin/bash</span>
</pre>
</div>
<blockquote>
<p>-i, –interactive : Keep STDIN open even if not attached</p>
</blockquote>
<blockquote>
<p>-t, –tty : Allocate a pseudo-TTY</p>
</blockquote>
<p><img src="/assets/images/posts/2019/05/2019-05-30-Docker-Basic-Runmariadbandedit-003.png" alt="screenshot003" /></p>
<p><br /></p>
<h3 id="14-install-vim">1.4. Install vim</h3>
<ul>
<li>Update apt-get</li>
</ul>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #d0d0d0">(container)# apt-get update</span>
</pre>
</div>
<p><img src="/assets/images/posts/2019/05/2019-05-30-Docker-Basic-Runmariadbandedit-004.png" alt="screenshot004" /></p>
<ul>
<li>Install vim</li>
</ul>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #d0d0d0">(container)# apt-get install vim</span>
</pre>
</div>
<p><img src="/assets/images/posts/2019/05/2019-05-30-Docker-Basic-Runmariadbandedit-005.png" alt="screenshot005" /></p>
<p><br /></p>
<h3 id="15-edit-mariadb-configuration">1.5 Edit MariaDB configuration</h3>
<p><img src="/assets/images/posts/2019/05/2019-05-30-Docker-Basic-Runmariadbandedit-006.png" alt="screenshot006" /></p>
<p><img src="/assets/images/posts/2019/05/2019-05-30-Docker-Basic-Runmariadbandedit-007.png" alt="screenshot007" /></p>
<p><img src="/assets/images/posts/2019/05/2019-05-30-Docker-Basic-Runmariadbandedit-008.png" alt="screenshot008" /></p>
<p><img src="/assets/images/posts/2019/05/2019-05-30-Docker-Basic-Runmariadbandedit-009.png" alt="screenshot009" /></p>
<p><br /></p>
<h3 id="16-restart-container">1.6. Restart container</h3>
<div style="background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;">
<pre style="margin: 0; line-height: 125%"><span style="color: #999999; font-style: italic"># docker restart [CONTAINER_NAME]</span>
</pre>
</div>
<p><img src="/assets/images/posts/2019/05/2019-05-30-Docker-Basic-Runmariadbandedit-010.png" alt="screenshot010" /></p>
<p><br /></p>
<hr />
<h2 id="references">References</h2>
<ul>
<li><a href="http://pyrasis.com/Docker/Docker-HOWTO">pyrasis.com</a></li>
</ul>
Thu, 30 May 2019 00:00:00 +0000
https://dorbae.github.io/docker/Docker-Basic-Runmariadbandedit/
https://dorbae.github.io/docker/Docker-Basic-Runmariadbandedit/
docker
mariadb
mysql
Docker