The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".
The following errata were submitted by our customers and approved as valid errors by the author or editor.
| Version |
Location |
Description |
Submitted By |
Date submitted |
Date corrected |
|
Page p.26
3rd paragraph |
'removing the rows may not' should be 'removing the columns may not'
Note from the Author or Editor: Thank you for pointing this out!
|
Hidemoto Nakada |
Aug 24, 2026 |
|
|
Page p.45
example 3-2 |
indentation in the function definition seems to be wrong.
Note from the Author or Editor: Correct. It should look like:
```
def map_rows(self, json_payload: str) -> str:
try:
evt = json.loads(json_payload)
evt_time = int(datetime.datetime.fromisoformat(evt['event_time']).
yield json.dumps({'visit_id': evt['visit_id'], 'event_time': evt_time,
'page': evt['page']})
except Exception as e:
yield self.invalid_data_output, _wrap_input_with_error(json_payload, e)
```
Thank you!
|
Hidemoto Nakada |
Aug 24, 2026 |
|
|
Page p.126
bullet list |
The list does not match the figure 5-4.
the first 2 items seem to be flipped.
Note from the Author or Editor: Thank you. Yes, it should be changed to:
"""
Implementation 1 stores computed rows as a single flat structure and the original row as nested attributes.
• Implementation 2 does the opposite (i.e., it stores the original row in a flat structure and all computed columns as nested attributes.).
"""
|
Hidemoto Nakada |
Aug 24, 2026 |
|
|
Page p.126
last paragraph |
"The first two implementations use a denormalization approach that may be faster at reading. The third one uses the normalized approach, "
Actually there are four implementation and the first "three" implementations
are denormalized approach, and the "fourth" one is normalized approach.
Note from the Author or Editor: Exactly, it should be:
```
The first three implementations use a denormalization approach that may be faster at reading. The fourth one uses the normalized approach
```
|
Hidemoto Nakada |
Aug 24, 2026 |
|
|
Page p.157
example 5-31 |
indentation of the last two lines is strange. I guess one more space is required.
Note from the Author or Editor: Exactly, we should add an extra whitespace to the last 2 lines so that it becomes aligned with the ifs:
```
if len(delivery_groups) <= groups_index:
delivery_groups.append([])
delivery_groups[groups_index].append(visit)
groups_index += 1
```
|
Hidemoto Nakada |
Aug 24, 2026 |
|
|
Page p.181
ex. 6-9 |
indentation of the last line is wrong.
Note from the Author or Editor: Yes, we should remove the indentation so that it becomes:
```
clear_context >> file_sensor >> visits_loader >> generate_cube
```
(no whitespaces in the beginning)
|
Hidemoto Nakada |
Aug 24, 2026 |
|
|
Page p.181
second paragraph |
'the pipeline == includes ...'
I cannot get why the == is needed.
Note from the Author or Editor: It shouldn't be there. We should remove it. Thank you!
|
Hidemoto Nakada |
Aug 24, 2026 |
|
|
Page p.188
last line |
'Unfortunately, this technique won’t work for the Parallel Split.'
'Parallel split' should be 'Exclusive Choice'.
Note from the Author or Editor: Exactly, it should be "Exclusive Choice"; Thank you!
|
Hidemoto Nakada |
Aug 24, 2026 |
|
|
Page p.255
ex. 7-24 |
Indentation is confusing.
Note from the Author or Editor: We might add some indentation to this part:
```
countries_area_mapping = {
'Poland': 'eu', 'France': 'eu', 'Spain': 'eu', 'the USA': 'na'
}
```
But overall it looks quite ok.
|
Hidemoto Nakada |
Aug 24, 2026 |
|
|
Page p.244
l.-5 |
'AWS Athena' should be 'Amazon Athena'
The same mistake apears in the ex. 8-9 caption.
Note from the Author or Editor: Yes, it should be Amazon Athena
|
Hidemoto Nakada |
Aug 24, 2026 |
|
|
Page p.266
ex.8-24 |
.join(date_with_month_and_quarter
fact_visit.dim_date_id == date_with_month_and_quarter.date_id,
in the end of the join line, we need to have a comma.
Note from the Author or Editor: Yes, it should be:
```
.join(date_with_month_and_quarter,
fact_visit.dim_date_id == date_with_month_and_quarter.date_id,
```
|
Hidemoto Nakada |
Aug 24, 2026 |
|
|
Page p.45
Example 3-3 |
name_w_version should be name_with_version.
I guess this is due to page width limitation,
but it have to be consistent with two other occurrence in the
same code.
Note from the Author or Editor: Exactly, we should change the "name_with_version" in this example to "name_w_version"
> I guess this is due to page width limitation,
Thank you! And exactly, I changed it afterwards to handle page limitation and didn't double check the code.
|
Anonymous |
Sep 10, 2026 |
|
|
Page p.63
Example 3-12 |
start_date_to_backfill = (dr.execution_date
datetime.timedelta(days=days_to_backfill))
`-` is required between these lines.
Note from the Author or Editor: Yes, exactly. It should be:
```
start_date_to_backfill = (dr.execution_date -
datetime.timedelta(days=days_to_backfill))
```
|
Hidemoto Nakada |
Sep 10, 2026 |
|
|
Page p.100
Example 4-13 |
version_to_restore = current_run_version - 1
(DeltaTable.forName(spark, 'devices').restoreToVersion(previous_job_version ))
'previous_job_version' should be 'version_to_restore'
Note from the Author or Editor: Correct, thank you!
It should be then:
```
(DeltaTable.forName(spark, 'devices').restoreToVersion(version_to_restore))
```
|
Hidemoto Nakada |
Sep 11, 2026 |
|
|
Page p.100
Example 4-14 |
new_version_df = (spark.createDataFrame([
Row(execution_time=current_execution_time, delta_table_version=last_version)]))
'new_version_df' should be 'new_version', since 'new_version_df' is not referred afterward.
Note from the Author or Editor: Thank you, yes!
new_version_df = (spark.createDataFrame([
should become
new_version = (spark.createDataFrame([
|
Hidemoto Nakada |
Sep 11, 2026 |
|
|
Page p.200
l.10 |
'at-least privilege' should be 'least privilege'
|
Hidemoto Nakada |
Sep 11, 2026 |
|
|
Page p.200
l.10 |
'at-least privilege' should be 'least privilege'
|
Hidemoto Nakada |
Sep 11, 2026 |
|
|
Page p.231
Summary l.3 |
CPPA should be CCPA.
Note from the Author or Editor: Yes, thank you. We need to change to CCPA
|
Hidemoto Nakada |
Sep 11, 2026 |
|
|
Page p.254 example
8-15 caption |
"Apache Parquet statistics for the login column"
As the text above says, it shows ID column, instead of login.
Note from the Author or Editor: Thank you. Yes, it should be:
Apache Parquet statistics for the ID column
|
Hidemoto Nakada |
Sep 11, 2026 |
|
|
Page 1
AUTOMATIC RETRIES |
Pattern: Windowed Deduplicator
search for exactly "errror managent"
Note from the Author or Editor: Thank you for pointing this out! Yes, it's a typo and instead of "errror managent" we should have been written "error management".
|
a o |
Jul 03, 2025 |
|