mirror of
https://github.com/apache/impala.git
synced 2025-12-19 09:58:28 -05:00
The recent documentation formatting changes introduced the navigation panel on the left. However, due to the length of the query options navigation title these could overlap with the documentation paragraphs. This commit removes the underscores from the navigation titles of the query options, so browsers can break them into multiple lines. Additionally, the "SET" and "Query Options for the SET Statement" pages are merged to save some more space for the query option navigation titles. Testing: - Built the documentation and tested manually Change-Id: Icec787d7a2af848aaaff65be2ecf311a5ce8fe7f Reviewed-on: http://gerrit.cloudera.org:8080/20556 Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com> Reviewed-by: Jason Fehr <jfehr@cloudera.com> Reviewed-by: Peter Rozsa <prozsa@cloudera.com> Reviewed-by: Tamas Mate <tmater@apache.org>
232 lines
8.8 KiB
XML
232 lines
8.8 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one
|
|
or more contributor license agreements. See the NOTICE file
|
|
distributed with this work for additional information
|
|
regarding copyright ownership. The ASF licenses this file
|
|
to you under the Apache License, Version 2.0 (the
|
|
"License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing,
|
|
software distributed under the License is distributed on an
|
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
KIND, either express or implied. See the License for the
|
|
specific language governing permissions and limitations
|
|
under the License.
|
|
-->
|
|
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
|
|
<concept id="max_row_size" rev="2.10.0 IMPALA-3200">
|
|
|
|
<title>MAX_ROW_SIZE Query Option</title>
|
|
<titlealts audience="PDF"><navtitle>MAX ROW SIZE</navtitle></titlealts>
|
|
<prolog>
|
|
<metadata>
|
|
<data name="Category" value="Impala"/>
|
|
<data name="Category" value="Impala Query Options"/>
|
|
<data name="Category" value="Querying"/>
|
|
<data name="Category" value="Developers"/>
|
|
<data name="Category" value="Data Analysts"/>
|
|
</metadata>
|
|
</prolog>
|
|
|
|
<conbody>
|
|
|
|
<p>
|
|
<indexterm audience="hidden">MAX_ROW_SIZE query option</indexterm>
|
|
Ensures that Impala can process rows of at least the specified size. (Larger
|
|
rows might be successfully processed, but that is not guaranteed.) Applies when
|
|
constructing intermediate or final rows in the result set. This setting prevents
|
|
out-of-control memory use when accessing columns containing huge strings.
|
|
</p>
|
|
|
|
<!-- MAX_ROW_SIZE: [524288] -->
|
|
|
|
<p conref="../shared/impala_common.xml#common/type_integer"/>
|
|
|
|
<p conref="../shared/impala_common.xml#common/default_blurb"/>
|
|
<p>
|
|
<codeph>524288</codeph> (512 KB)
|
|
</p>
|
|
|
|
<p conref="../shared/impala_common.xml#common/units_blurb"/>
|
|
|
|
<p conref="../shared/impala_common.xml#common/added_in_2100"/>
|
|
|
|
<p conref="../shared/impala_common.xml#common/usage_notes_blurb"/>
|
|
<p>
|
|
If a query fails because it involves rows with long strings and/or
|
|
many columns, causing the total row size to exceed <codeph>MAX_ROW_SIZE</codeph>
|
|
bytes, increase the <codeph>MAX_ROW_SIZE</codeph> setting to accommodate
|
|
the total bytes stored in the largest row. Examine the error messages for any
|
|
failed queries to see the size of the row that caused the problem.
|
|
</p>
|
|
<p>
|
|
Impala attempts to handle rows that exceed the <codeph>MAX_ROW_SIZE</codeph>
|
|
value where practical, so in many cases, queries succeed despite having rows
|
|
that are larger than this setting.
|
|
</p>
|
|
<p>
|
|
Specifying a value that is substantially higher than actually needed can cause
|
|
Impala to reserve more memory than is necessary to execute the query.
|
|
</p>
|
|
<p>
|
|
In a Hadoop cluster with highly concurrent workloads and queries that process
|
|
high volumes of data, traditional SQL tuning advice about minimizing wasted memory
|
|
is worth remembering. For example, if a table has <codeph>STRING</codeph> columns
|
|
where a single value might be multiple megabytes, make sure that the
|
|
<codeph>SELECT</codeph> lists in queries only refer to columns that are actually
|
|
needed in the result set, instead of using the <codeph>SELECT *</codeph> shorthand.
|
|
</p>
|
|
|
|
<p conref="../shared/impala_common.xml#common/example_blurb"/>
|
|
|
|
<p>
|
|
The following examples show the kinds of situations where it is necessary to
|
|
adjust the <codeph>MAX_ROW_SIZE</codeph> setting. First, we create a table
|
|
containing some very long values in <codeph>STRING</codeph> columns:
|
|
</p>
|
|
|
|
<codeblock><![CDATA[
|
|
create table big_strings (s1 string, s2 string, s3 string) stored as parquet;
|
|
|
|
-- Turn off compression to more easily reason about data volume by doing SHOW TABLE STATS.
|
|
-- Does not actually affect query success or failure, because MAX_ROW_SIZE applies when
|
|
-- column values are materialized in memory.
|
|
set compression_codec=none;
|
|
set;
|
|
...
|
|
MAX_ROW_SIZE: [524288]
|
|
...
|
|
|
|
-- A very small row.
|
|
insert into big_strings values ('one', 'two', 'three');
|
|
-- A row right around the default MAX_ROW_SIZE limit: a 500 KiB string and a 30 KiB string.
|
|
insert into big_strings values (repeat('12345',100000), 'short', repeat('123',10000));
|
|
-- A row that is too big if the query has to materialize both S1 and S3.
|
|
insert into big_strings values (repeat('12345',100000), 'short', repeat('12345',100000));
|
|
]]>
|
|
</codeblock>
|
|
|
|
<p>
|
|
With the default <codeph>MAX_ROW_SIZE</codeph> setting, different queries succeed
|
|
or fail based on which column values have to be materialized during query processing:
|
|
</p>
|
|
|
|
<codeblock><![CDATA[
|
|
-- All the S1 values can be materialized within the 512 KB MAX_ROW_SIZE buffer.
|
|
select count(distinct s1) from big_strings;
|
|
+--------------------+
|
|
| count(distinct s1) |
|
|
+--------------------+
|
|
| 2 |
|
|
+--------------------+
|
|
|
|
-- A row where even the S1 value is too large to materialize within MAX_ROW_SIZE.
|
|
insert into big_strings values (repeat('12345',1000000), 'short', repeat('12345',1000000));
|
|
|
|
-- The 5 MiB string is too large to materialize. The message explains the size of the result
|
|
-- set row the query is attempting to materialize.
|
|
select count(distinct(s1)) from big_strings;
|
|
WARNINGS: Row of size 4.77 MB could not be materialized in plan node with id 1.
|
|
Increase the max_row_size query option (currently 512.00 KB) to process larger rows.
|
|
|
|
-- If more columns are involved, the result set row being materialized is bigger.
|
|
select count(distinct s1, s2, s3) from big_strings;
|
|
WARNINGS: Row of size 9.54 MB could not be materialized in plan node with id 1.
|
|
Increase the max_row_size query option (currently 512.00 KB) to process larger rows.
|
|
|
|
-- Column S2, containing only short strings, can still be examined.
|
|
select count(distinct(s2)) from big_strings;
|
|
+----------------------+
|
|
| count(distinct (s2)) |
|
|
+----------------------+
|
|
| 2 |
|
|
+----------------------+
|
|
|
|
-- Queries that do not materialize the big column values are OK.
|
|
select count(*) from big_strings;
|
|
+----------+
|
|
| count(*) |
|
|
+----------+
|
|
| 4 |
|
|
+----------+
|
|
]]>
|
|
</codeblock>
|
|
|
|
<p>
|
|
The following examples show how adjusting <codeph>MAX_ROW_SIZE</codeph> upward
|
|
allows queries involving the long string columns to succeed:
|
|
</p>
|
|
|
|
<codeblock><![CDATA[
|
|
-- Boosting MAX_ROW_SIZE moderately allows all S1 values to be materialized.
|
|
set max_row_size=7mb;
|
|
|
|
select count(distinct s1) from big_strings;
|
|
+--------------------+
|
|
| count(distinct s1) |
|
|
+--------------------+
|
|
| 3 |
|
|
+--------------------+
|
|
|
|
-- But the combination of S1 + S3 strings is still too large.
|
|
select count(distinct s1, s2, s3) from big_strings;
|
|
WARNINGS: Row of size 9.54 MB could not be materialized in plan node with id 1. Increase the max_row_size query option (currently 7.00 MB) to process larger rows.
|
|
|
|
-- Boosting MAX_ROW_SIZE to larger than the largest row in the table allows
|
|
-- all queries to complete successfully.
|
|
set max_row_size=12mb;
|
|
|
|
select count(distinct s1, s2, s3) from big_strings;
|
|
+----------------------------+
|
|
| count(distinct s1, s2, s3) |
|
|
+----------------------------+
|
|
| 4 |
|
|
+----------------------------+
|
|
]]>
|
|
</codeblock>
|
|
|
|
<p>
|
|
The following examples show how to reason about appropriate values for
|
|
<codeph>MAX_ROW_SIZE</codeph>, based on the characteristics of the
|
|
columns containing the long values:
|
|
</p>
|
|
|
|
<codeblock><![CDATA[
|
|
-- With a large MAX_ROW_SIZE in place, we can examine the columns to
|
|
-- understand the practical lower limit for MAX_ROW_SIZE based on the
|
|
-- table structure and column values.
|
|
select max(length(s1) + length(s2) + length(s3)) / 1e6 as megabytes from big_strings;
|
|
+-----------+
|
|
| megabytes |
|
|
+-----------+
|
|
| 10.000005 |
|
|
+-----------+
|
|
|
|
-- We can also examine the 'Max Size' for each column after computing stats.
|
|
compute stats big_strings;
|
|
show column stats big_strings;
|
|
+--------+--------+------------------+--------+----------+-----------+
|
|
| Column | Type | #Distinct Values | #Nulls | Max Size | Avg Size |
|
|
+--------+--------+------------------+--------+----------+-----------+
|
|
| s1 | STRING | 2 | -1 | 5000000 | 2500002.5 |
|
|
| s2 | STRING | 2 | -1 | 10 | 7.5 |
|
|
| s3 | STRING | 2 | -1 | 5000000 | 2500005 |
|
|
+--------+--------+------------------+--------+----------+-----------+
|
|
]]>
|
|
</codeblock>
|
|
|
|
<p conref="../shared/impala_common.xml#common/related_info"/>
|
|
<p>
|
|
<xref keyref="buffer_pool_limit"/>,
|
|
<xref keyref="default_spillable_buffer_size"/>,
|
|
<xref keyref="min_spillable_buffer_size"/>,
|
|
<xref keyref="scalability_buffer_pool"/>
|
|
</p>
|
|
|
|
</conbody>
|
|
</concept>
|