├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── resources
├── code
│ └── .gitkeep
├── policies
│ └── .gitkeep
└── templates
│ └── .gitkeep
└── workshop
├── Server
├── athena_img
│ ├── AthenaWorkGroup_DataSource.png
│ ├── athena-db-selec.png
│ ├── athena-ds.png
│ ├── athena-first-query.png
│ ├── athena-full.png
│ ├── athena-join-table.png
│ ├── athena-right.png
│ ├── athena-s3.png
│ ├── athena-setup.png
│ ├── athena-table-selec.png
│ ├── athena-table.png
│ ├── athena-view-create.png
│ ├── athena_ctas_buck.png
│ ├── athena_ctas_nobuck.png
│ ├── athena_ctas_s3_buck.png
│ ├── athena_ctas_s3_nobuck.png
│ ├── athena_database.png
│ ├── athena_inner.png
│ ├── athena_insert.png
│ ├── athena_landing.png
│ ├── athena_left.png
│ ├── athena_newpart.png
│ ├── athena_newpart_msc.png
│ ├── athena_query_csv.png
│ ├── athena_query_noparq.png
│ ├── athena_query_nopart.png
│ ├── athena_query_parq.png
│ ├── athena_query_part.png
│ ├── athena_s3_addpart.png
│ ├── athena_showpart.png
│ ├── athena_showpart2.png
│ ├── athena_subset_buck.png
│ ├── athena_subset_nobuck.png
│ ├── athena_workgroup.png
│ ├── athena_workgroup_general.png
│ ├── athena_workgroup_general_1.png
│ ├── athena_workgroup_s3.png
│ ├── athena_workgroup_switch.png
│ ├── athena_workgroup_validate.png
│ └── create-bucket.png
├── css
│ ├── atom-one-dark-reasonable.css
│ ├── auto-complete.css
│ ├── featherlight.min.css
│ ├── fontawesome-all.min.css
│ ├── hugo-theme.css
│ ├── hybrid.css
│ ├── nucleus.css
│ ├── perfect-scrollbar.min.css
│ ├── tags.css
│ ├── theme-aws.css
│ ├── theme-blue.css
│ ├── theme-green.css
│ ├── theme-red.css
│ └── theme.css
├── en
│ ├── 404.html
│ ├── athena.html
│ ├── athena
│ │ ├── athena_best_practices.html
│ │ ├── index.xml
│ │ └── optional.html
│ ├── categories.html
│ ├── categories
│ │ └── index.xml
│ ├── glue.html
│ ├── glue
│ │ ├── 21_permissions.html
│ │ ├── 22_raw_crawler.html
│ │ ├── 23_transform_with_glue_job.html
│ │ ├── 24_curated_crawler.html
│ │ ├── 25_schema_validation.html
│ │ ├── 26_testing_pyspark_locally.html
│ │ ├── 27_optional_dev_endpoint.html
│ │ └── index.xml
│ ├── index.html
│ ├── index.json
│ ├── index.xml
│ ├── orchestration.html
│ ├── orchestration
│ │ └── index.xml
│ ├── requirements.html
│ ├── requirements
│ │ ├── index.xml
│ │ ├── knowledge.html
│ │ ├── knowledge
│ │ │ └── index.xml
│ │ ├── prerequisites.html
│ │ └── prerequisites
│ │ │ ├── chapter.en.png
│ │ │ └── index.xml
│ ├── sitemap.xml
│ ├── tags.html
│ ├── tags
│ │ └── index.xml
│ ├── transformations.html
│ ├── transformations
│ │ └── index.xml
│ ├── visualization.html
│ ├── visualization
│ │ └── index.xml
│ ├── wrapup.html
│ └── wrapup
│ │ └── index.xml
├── fonts
│ ├── Inconsolata.eot
│ ├── Inconsolata.svg
│ ├── Inconsolata.ttf
│ ├── Inconsolata.woff
│ ├── Novecentosanswide-Normal-webfont.eot
│ ├── Novecentosanswide-Normal-webfont.svg
│ ├── Novecentosanswide-Normal-webfont.ttf
│ ├── Novecentosanswide-Normal-webfont.woff
│ ├── Novecentosanswide-Normal-webfont.woff2
│ ├── Novecentosanswide-UltraLight-webfont.eot
│ ├── Novecentosanswide-UltraLight-webfont.svg
│ ├── Novecentosanswide-UltraLight-webfont.ttf
│ ├── Novecentosanswide-UltraLight-webfont.woff
│ ├── Novecentosanswide-UltraLight-webfont.woff2
│ ├── Work_Sans_200.eot
│ ├── Work_Sans_200.svg
│ ├── Work_Sans_200.ttf
│ ├── Work_Sans_200.woff
│ ├── Work_Sans_200.woff2
│ ├── Work_Sans_300.eot
│ ├── Work_Sans_300.svg
│ ├── Work_Sans_300.ttf
│ ├── Work_Sans_300.woff
│ ├── Work_Sans_300.woff2
│ ├── Work_Sans_500.eot
│ ├── Work_Sans_500.svg
│ ├── Work_Sans_500.ttf
│ ├── Work_Sans_500.woff
│ └── Work_Sans_500.woff2
├── fr
│ ├── 404.html
│ ├── categories.html
│ ├── categories
│ │ └── index.xml
│ ├── index.html
│ ├── index.json
│ ├── index.xml
│ ├── requirements.html
│ ├── requirements
│ │ └── index.xml
│ ├── sitemap.xml
│ ├── tags.html
│ └── tags
│ │ └── index.xml
├── glue_images
│ └── ingestion
│ │ ├── cf1.png
│ │ ├── cf2.png
│ │ ├── cf3.png
│ │ ├── crawler1.png
│ │ ├── crawler2.png
│ │ ├── crawler3.png
│ │ ├── create-notebook1.png
│ │ ├── create-notebook2.png
│ │ ├── csv_parquet.png
│ │ ├── datalake_s3.png
│ │ ├── dev-ep1.png
│ │ ├── dev-ep2.png
│ │ ├── dev-ep3.png
│ │ ├── dev-ep4.png
│ │ ├── etl-nb1.png
│ │ ├── etl-nb2.png
│ │ ├── glue-job1.png
│ │ ├── glue-job15.png
│ │ ├── glue-job2.png
│ │ ├── glue-job3.png
│ │ ├── glue_connection1.png
│ │ ├── glue_connection2.png
│ │ ├── glue_connection3.png
│ │ ├── glue_connection4.png
│ │ ├── lab1-structure.png
│ │ ├── s3_raw_evens.png
│ │ ├── seejob.png
│ │ └── steps_glue.png
├── images
│ ├── apn-logo.jpg
│ ├── aws-open-source.jpg
│ ├── chapter.en.png
│ ├── clippy.svg
│ └── logo.png
├── index.html
├── js
│ ├── auto-complete.js
│ ├── clipboard.min.js
│ ├── featherlight.min.js
│ ├── highlight.pack.js
│ ├── html5shiv-printshiv.min.js
│ ├── hugo-learn.js
│ ├── jquery-3.6.0.min.js
│ ├── jquery.sticky.js
│ ├── kinesis.js
│ ├── learn.js
│ ├── lunr.min.js
│ ├── modernizr.custom-3.6.0.js
│ ├── perfect-scrollbar.jquery.min.js
│ ├── perfect-scrollbar.min.js
│ └── search.js
├── mermaid
│ ├── mermaid.css
│ ├── mermaid.dark.css
│ ├── mermaid.forest.css
│ └── mermaid.js
├── orch_img
│ └── orchestration
│ │ ├── 2-1.png
│ │ ├── addcrawler-trigger.png
│ │ ├── all_steps_glue2.png
│ │ ├── csv_parquet.png
│ │ ├── dc-1.png
│ │ ├── dc-2.png
│ │ ├── s3_raw_and_curated.png
│ │ ├── steps_glue.png
│ │ ├── wf-end-result.png
│ │ ├── wf-observe1.png
│ │ ├── wf-observe2.png
│ │ ├── wf-observe3.png
│ │ ├── wf1.png
│ │ ├── wf10-1.png
│ │ ├── wf10.png
│ │ ├── wf11.png
│ │ ├── wf12.png
│ │ ├── wf2.png
│ │ ├── wf3-1.png
│ │ ├── wf3.png
│ │ ├── wf4.png
│ │ ├── wf5.png
│ │ ├── wf51.png
│ │ ├── wf6.png
│ │ ├── wf7.png
│ │ ├── wf8-1.png
│ │ ├── wf8.png
│ │ ├── wf9.png
│ │ ├── wf91.png
│ │ ├── workflow61.png
│ │ ├── workflow71.png
│ │ ├── workflow_complete.png
│ │ ├── workflow_complete2.png
│ │ └── workflow_complete_no_marks.png
├── sitemap.xml
├── tran_img
│ ├── Screenshot 2020-03-12 at 15.42.04 copy.png
│ ├── Screenshot 2020-03-12 at 15.42.04.png
│ ├── notebook-to-glue.png
│ └── notebook.png
└── visualization_images
│ ├── AthenaWorkGroup_DataSource.png
│ ├── DateFormat.png
│ ├── Edit-dataset.png
│ ├── Field_DataTypes.png
│ ├── Select_Fields.png
│ ├── add-insight.png
│ ├── aggregate-by-day.png
│ ├── arrow-edit-dataset-type.png
│ ├── athena-ds.png
│ ├── athena-setup.png
│ ├── athena-table.png
│ ├── choose-dataset.png
│ ├── connectors.png
│ ├── create-bucket.png
│ ├── edit-dataset-icon.png
│ ├── end.png
│ ├── enterprise.png
│ ├── entire-month.png
│ ├── filter_comparison_type.png
│ ├── filter_creation.png
│ ├── filter_selection.png
│ ├── forecast.png
│ ├── kpi-percent.png
│ ├── kpi.png
│ ├── manage-data copy.png
│ ├── month-filter.png
│ ├── new-account-fields.png
│ ├── new-visual.png
│ ├── oregon-manage.png
│ ├── oregon.png
│ ├── prepare-forecast.png
│ ├── qs-workgroup-permission.png
│ ├── quicksight-first-page.png
│ ├── save-visualize.png
│ ├── time_range.png
│ ├── updated1.png
│ ├── updated2.png
│ └── year-filter.png
├── config.toml
├── content
├── DataBrew
│ ├── 21_Setting_up.en.md
│ ├── 22_Data_Profiling.en.md
│ ├── 23_Data_Cleaning.en.md
│ ├── 24_Other_Transformations.en.md
│ ├── _index.en.md
│ └── byodSmallTestData.csv
├── _index.en.md
├── _index.fr.md
├── athena
│ ├── 51_Setting_up.en.md
│ ├── 52_Exploring_with_athena.en.md
│ ├── 53_Joins.en.md
│ ├── 54_Storing_SQL_join_results.md
│ ├── 55_athena_best_practices.en.md
│ ├── 56_optional_db_table.en.md
│ ├── 57_optional_partitions.en.md
│ ├── 58_Text_Analytics_UDF.en.md
│ └── _index.en.md
├── glue
│ ├── 31_permissions.en.md
│ ├── 32_raw_crawler.en.md
│ ├── 33_transform_with_glue_job.en.md
│ ├── 34_curated_crawler.en.md
│ ├── 35_schema_validation.en.md
│ ├── 36_dev_endpoint.en.md
│ ├── 37_optional_testing_pyspark_locally.en.md
│ └── _index.en.md
├── help
├── orchestration
│ ├── 41_Orchestrate the data pipeline using Workflows.en copy.md
│ ├── 42_Add Crawler.en copy.md
│ ├── 43_Add Jobs.en.md
│ ├── 44_Add Crawler 2.en.md
│ ├── 45_Reviewing the results.en.md
│ ├── 46_Your own workflow.en.md
│ └── _index.en.md
├── requirements
│ ├── _index.en.md
│ ├── _index.fr.md
│ ├── knowledge
│ │ └── _index.en.md
│ └── prerequisites
│ │ ├── _index.en.md
│ │ └── chapter.en.png
├── transformations
│ ├── 71_transformations_dev_endpoint.en.md
│ ├── 72_transformations_local.en.md
│ ├── _index.en.md
│ └── byodSmallTestData.csv
├── visualization
│ ├── 61_Signing up for Amazon QuickSight Enterprise Edition.en.md
│ ├── 62_Some Quicksight definitions.en.md
│ ├── 63_Configuring Amazon QuickSight to use Amazon Athena as data source.en.md
│ ├── 64_Preparing your data.en.md
│ ├── 65_Visualizing the data using Amazon QuickSight.en.md
│ └── _index.en.md
└── wrapup
│ └── _index.en.md
├── layouts
├── _default
│ └── _markup
│ │ └── render-link.html
├── index.json
├── partials
│ └── custom-footer.html
└── shortcodes
│ └── table.html
├── post_build.py
├── pre_build.py
├── requirements.txt
├── static
├── athena_img
│ ├── AthenaWorkGroup_DataSource.png
│ ├── athena-db-selec.png
│ ├── athena-db-selec1.png
│ ├── athena-ds.png
│ ├── athena-first-query.png
│ ├── athena-first-query1.png
│ ├── athena-full.png
│ ├── athena-join-table.png
│ ├── athena-right.png
│ ├── athena-s3.png
│ ├── athena-setup.png
│ ├── athena-table-selec.png
│ ├── athena-table-selec1.png
│ ├── athena-table.png
│ ├── athena_ctas_bucket.png
│ ├── athena_ctas_nobuck.png
│ ├── athena_ctas_part.png
│ ├── athena_ctas_s3_bucket.png
│ ├── athena_ctas_s3_part.png
│ ├── athena_database.png
│ ├── athena_inner.png
│ ├── athena_insert.png
│ ├── athena_landing.png
│ ├── athena_left.png
│ ├── athena_newpart.png
│ ├── athena_newpart_msc.png
│ ├── athena_part_create.png
│ ├── athena_query_csv.png
│ ├── athena_query_noparq.png
│ ├── athena_query_nopart.png
│ ├── athena_query_parq.png
│ ├── athena_query_partit.png
│ ├── athena_s3_addpart.png
│ ├── athena_showpart.png
│ ├── athena_showpart2.png
│ ├── athena_subset_buck.png
│ ├── athena_subset_nobuck.png
│ ├── athena_udf_0.png
│ ├── athena_udf_1.png
│ ├── athena_udf_2.png
│ ├── athena_udf_3.png
│ ├── athena_udf_4.png
│ ├── athena_udf_5.png
│ ├── athena_udf_6.png
│ ├── athena_udf_7.png
│ ├── athena_view_create.png
│ ├── athena_workgroup.png
│ ├── athena_workgroup_general.png
│ ├── athena_workgroup_general_1.png
│ ├── athena_workgroup_s3.png
│ ├── athena_workgroup_switch.png
│ ├── athena_workgroup_validate.png
│ └── create-bucket.png
├── databrew_img
│ ├── Databrew_Arch.png
│ ├── databrew_cleaning.png
│ ├── databrew_cleaning1.png
│ ├── databrew_cleaning10.png
│ ├── databrew_cleaning11.png
│ ├── databrew_cleaning12.png
│ ├── databrew_cleaning13.png
│ ├── databrew_cleaning2.png
│ ├── databrew_cleaning3.png
│ ├── databrew_cleaning4.png
│ ├── databrew_cleaning5.png
│ ├── databrew_cleaning6.png
│ ├── databrew_cleaning7.png
│ ├── databrew_cleaning8.png
│ ├── databrew_cleaning9.png
│ ├── databrew_profile.png
│ ├── databrew_profile1.png
│ ├── databrew_profile2.png
│ ├── databrew_profile3.png
│ ├── databrew_profile4.png
│ ├── databrew_profile5.png
│ ├── databrew_profile6.png
│ ├── databrew_profile7.png
│ ├── databrew_profile8.png
│ ├── databrew_project1.png
│ ├── databrew_project2.png
│ ├── databrew_project3.png
│ ├── databrew_project4.png
│ ├── databrew_transformation1.png
│ ├── databrew_transformation2.png
│ ├── databrew_transformation3.png
│ ├── databrew_transformation4.png
│ └── databrew_transformation5.png
├── glue_images
│ └── ingestion
│ │ ├── cf1.png
│ │ ├── cf2.png
│ │ ├── cf3.png
│ │ ├── crawler1.png
│ │ ├── crawler2.png
│ │ ├── crawler3.png
│ │ ├── create-notebook1.png
│ │ ├── create-notebook2.png
│ │ ├── csv_parquet.png
│ │ ├── datalake_s3.png
│ │ ├── dev-ep1.png
│ │ ├── dev-ep2.png
│ │ ├── dev-ep3.png
│ │ ├── dev-ep4.png
│ │ ├── etl-nb1.png
│ │ ├── etl-nb2.png
│ │ ├── glue-job1.png
│ │ ├── glue-job15.png
│ │ ├── glue-job2.png
│ │ ├── glue-job3.png
│ │ ├── glue_connection1.png
│ │ ├── glue_connection2.png
│ │ ├── glue_connection3.png
│ │ ├── glue_connection4.png
│ │ ├── lab1-structure.png
│ │ ├── s3_raw_evens.png
│ │ ├── seejob.png
│ │ └── steps_glue.png
├── images
│ ├── apn-logo.jpg
│ ├── aws-open-source.jpg
│ └── chapter.en.png
├── js
│ └── kinesis.js
├── orch_img
│ └── orchestration
│ │ ├── 2-1.png
│ │ ├── addcrawler-trigger.png
│ │ ├── addcrawler.png
│ │ ├── addjob.png
│ │ ├── addjobsimple.png
│ │ ├── addtriggerparquet.png
│ │ ├── addtriggerparquet2.png
│ │ ├── all_steps_glue2.png
│ │ ├── csv_parquet.png
│ │ ├── databases.png
│ │ ├── dc-1.png
│ │ ├── dc-2.png
│ │ ├── entireworkflow.png
│ │ ├── firsttrigger.png
│ │ ├── s3_raw_and_curated.png
│ │ ├── simpletrigger.png
│ │ ├── steps_glue.png
│ │ ├── trigger-crawler-trigger-job.png
│ │ ├── trigger-crawler-trigger.png
│ │ ├── trigger-crawler.png
│ │ ├── wf-end-result.png
│ │ ├── wf-observe1.png
│ │ ├── wf-observe2.png
│ │ ├── wf-observe3.png
│ │ ├── wf1.png
│ │ ├── wf10-1.png
│ │ ├── wf10.png
│ │ ├── wf11.png
│ │ ├── wf12.png
│ │ ├── wf2.png
│ │ ├── wf3-1.png
│ │ ├── wf3.png
│ │ ├── wf4.png
│ │ ├── wf5.png
│ │ ├── wf51.png
│ │ ├── wf6.png
│ │ ├── wf7.png
│ │ ├── wf8-1.png
│ │ ├── wf8.png
│ │ ├── wf9.png
│ │ ├── wf91.png
│ │ ├── workflow61.png
│ │ ├── workflow71.png
│ │ ├── workflow_complete.png
│ │ ├── workflow_complete2.png
│ │ └── workflow_complete_no_marks.png
├── pdf
│ └── byod-graduate-path.pdf
├── tran_img
│ ├── Screenshot 2020-03-12 at 15.42.04 copy.png
│ ├── Screenshot 2020-03-12 at 15.42.04.png
│ ├── notebook-to-glue.png
│ └── notebook.png
└── visualization_images
│ ├── AthenaWorkGroup_DataSource.png
│ ├── DateFormat.png
│ ├── Edit-dataset.png
│ ├── Field_DataTypes.png
│ ├── Select_Fields.png
│ ├── add-insight.png
│ ├── aggregate-by-day.png
│ ├── architecture-overview-lab2.png
│ ├── arrow-edit-dataset-type.png
│ ├── athena-ds.png
│ ├── athena-setup.png
│ ├── athena-table.png
│ ├── choose-dataset.png
│ ├── connectors.png
│ ├── create-bucket.png
│ ├── edit-dataset-icon.png
│ ├── end.png
│ ├── enterprise.png
│ ├── entire-month.png
│ ├── filter_comparison_type.png
│ ├── filter_creation.png
│ ├── filter_selection.png
│ ├── forecast.png
│ ├── kpi-percent.png
│ ├── kpi.png
│ ├── manage-data copy.png
│ ├── month-filter.png
│ ├── new-account-fields.png
│ ├── new-visual.png
│ ├── oregon-manage.png
│ ├── oregon.png
│ ├── prepare-forecast.png
│ ├── qs-workgroup-permission.png
│ ├── quicksight-first-page.png
│ ├── save-visualize.png
│ ├── time_range.png
│ ├── updated1.png
│ ├── updated2.png
│ └── year-filter.png
└── themes
└── learn
├── .editorconfig
├── .gitignore
├── .grenrc.yml
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── archetypes
├── chapter.md
└── default.md
├── i18n
├── ar.toml
├── de.toml
├── en.toml
├── es.toml
├── fr.toml
├── hi.toml
├── id.toml
├── nl.toml
├── pt.toml
└── tr.toml
├── images
├── screenshot.png
└── tn.png
├── layouts
├── 404.html
├── _default
│ ├── list.html
│ └── single.html
├── index.html
├── index.json
├── partials
│ ├── custom-comments.html
│ ├── custom-footer.html
│ ├── custom-header.html
│ ├── favicon.html
│ ├── footer.html
│ ├── header.html
│ ├── logo.html
│ ├── menu-footer.html
│ ├── menu.html
│ ├── meta.html
│ ├── search.html
│ ├── tags.html
│ └── toc.html
└── shortcodes
│ ├── attachments.html
│ ├── button.html
│ ├── children.html
│ ├── expand.html
│ ├── img.html
│ ├── mermaid.html
│ ├── notice.html
│ ├── ref.html
│ ├── relref.html
│ ├── siteparam.html
│ └── siteurl.html
├── static
├── css
│ ├── atom-one-dark-reasonable.css
│ ├── auto-complete.css
│ ├── featherlight.min.css
│ ├── fontawesome-all.min.css
│ ├── hugo-theme.css
│ ├── hybrid.css
│ ├── nucleus.css
│ ├── perfect-scrollbar.min.css
│ ├── tags.css
│ ├── theme-aws.css
│ ├── theme-blue.css
│ ├── theme-green.css
│ ├── theme-red.css
│ └── theme.css
├── fonts
│ ├── Inconsolata.eot
│ ├── Inconsolata.svg
│ ├── Inconsolata.ttf
│ ├── Inconsolata.woff
│ ├── Novecentosanswide-Normal-webfont.eot
│ ├── Novecentosanswide-Normal-webfont.svg
│ ├── Novecentosanswide-Normal-webfont.ttf
│ ├── Novecentosanswide-Normal-webfont.woff
│ ├── Novecentosanswide-Normal-webfont.woff2
│ ├── Novecentosanswide-UltraLight-webfont.eot
│ ├── Novecentosanswide-UltraLight-webfont.svg
│ ├── Novecentosanswide-UltraLight-webfont.ttf
│ ├── Novecentosanswide-UltraLight-webfont.woff
│ ├── Novecentosanswide-UltraLight-webfont.woff2
│ ├── Work_Sans_200.eot
│ ├── Work_Sans_200.svg
│ ├── Work_Sans_200.ttf
│ ├── Work_Sans_200.woff
│ ├── Work_Sans_200.woff2
│ ├── Work_Sans_300.eot
│ ├── Work_Sans_300.svg
│ ├── Work_Sans_300.ttf
│ ├── Work_Sans_300.woff
│ ├── Work_Sans_300.woff2
│ ├── Work_Sans_500.eot
│ ├── Work_Sans_500.svg
│ ├── Work_Sans_500.ttf
│ ├── Work_Sans_500.woff
│ └── Work_Sans_500.woff2
├── images
│ ├── clippy.svg
│ └── logo.png
├── js
│ ├── auto-complete.js
│ ├── clipboard.min.js
│ ├── featherlight.min.js
│ ├── highlight.pack.js
│ ├── html5shiv-printshiv.min.js
│ ├── hugo-learn.js
│ ├── jquery-3.6.0.min.js
│ ├── jquery.sticky.js
│ ├── learn.js
│ ├── lunr.min.js
│ ├── modernizr.custom-3.6.0.js
│ ├── perfect-scrollbar.jquery.min.js
│ ├── perfect-scrollbar.min.js
│ └── search.js
└── mermaid
│ ├── mermaid.css
│ ├── mermaid.dark.css
│ ├── mermaid.forest.css
│ └── mermaid.js
└── theme.toml
/.gitignore:
--------------------------------------------------------------------------------
1 | *.code-workspace
2 | node_modules
3 | workshop/public
4 | public
5 | packaged.yaml
6 | resources/_gen
7 | .DS_Store
8 | .idea
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | ## Code of Conduct
2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct).
3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact
4 | opensource-codeofconduct@amazon.com with any additional questions or comments.
5 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of
4 | this software and associated documentation files (the "Software"), to deal in
5 | the Software without restriction, including without limitation the rights to
6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7 | the Software, and to permit persons to whom the Software is furnished to do so.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
10 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
11 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
12 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
13 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15 |
16 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Bring Your Own Data Labs (BYOD)
2 |
3 | Bring Your Own Data (BYOD) labs help you build a serverless data pipeline based on your own data. Starting from a sample of your data saved in Amazon S3, you will go through an intensive workshop that focuses on transforming, analysing and visualizing your data.
4 |
5 | At the end, you will have a POC on which you can continue to evolve into a more complex data pipeline and deriving more insights. You will be leveraging [AWS Glue](https://aws.amazon.com/glue/) for the data catalogue and run ETL on the data lake; [Amazon Athena](https://aws.amazon.com/athena/) to query the data lake; and [Amazon QuickSight](https://aws.amazon.com/quicksight/) for data visualization.
6 |
7 | Required prerequisites
8 |
9 | * Basic knowledge of AWS foundational services such as IAM and S3, as well as basic SQL knowledge.
10 | * AWS account with admin privileges.
11 |
12 | ## Workshop
13 |
14 | > :warning: This repository contains only the source for the workshop content
15 | > If you're looking for the actual workshop click here: [https://bringyourowndatalabs.workshop.aws/en/](https://bringyourowndatalabs.workshop.aws/en/)
16 |
17 | ## Contribute?
18 |
19 | If you'd like to contribute to the workshop content, please fork and create a pull request with your added/modified content we would be happy to review it internally.
--------------------------------------------------------------------------------
/resources/code/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/resources/code/.gitkeep
--------------------------------------------------------------------------------
/resources/policies/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/resources/policies/.gitkeep
--------------------------------------------------------------------------------
/resources/templates/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/resources/templates/.gitkeep
--------------------------------------------------------------------------------
/workshop/Server/athena_img/AthenaWorkGroup_DataSource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/AthenaWorkGroup_DataSource.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena-db-selec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena-db-selec.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena-ds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena-ds.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena-first-query.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena-first-query.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena-full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena-full.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena-join-table.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena-join-table.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena-right.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena-s3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena-s3.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena-setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena-setup.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena-table-selec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena-table-selec.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena-table.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena-table.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena-view-create.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena-view-create.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_ctas_buck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_ctas_buck.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_ctas_nobuck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_ctas_nobuck.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_ctas_s3_buck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_ctas_s3_buck.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_ctas_s3_nobuck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_ctas_s3_nobuck.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_database.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_database.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_inner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_inner.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_insert.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_insert.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_landing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_landing.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_left.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_newpart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_newpart.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_newpart_msc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_newpart_msc.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_query_csv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_query_csv.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_query_noparq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_query_noparq.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_query_nopart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_query_nopart.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_query_parq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_query_parq.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_query_part.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_query_part.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_s3_addpart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_s3_addpart.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_showpart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_showpart.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_showpart2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_showpart2.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_subset_buck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_subset_buck.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_subset_nobuck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_subset_nobuck.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_workgroup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_workgroup.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_workgroup_general.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_workgroup_general.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_workgroup_general_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_workgroup_general_1.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_workgroup_s3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_workgroup_s3.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_workgroup_switch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_workgroup_switch.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/athena_workgroup_validate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/athena_workgroup_validate.png
--------------------------------------------------------------------------------
/workshop/Server/athena_img/create-bucket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aws-samples/bring-your-own-data-labs/5f19fb3882cee8a9217140d6a14b7d2caadae19e/workshop/Server/athena_img/create-bucket.png
--------------------------------------------------------------------------------
/workshop/Server/css/auto-complete.css:
--------------------------------------------------------------------------------
1 | .autocomplete-suggestions {
2 | text-align: left;
3 | cursor: default;
4 | border: 1px solid #ccc;
5 | border-top: 0;
6 | background: #fff;
7 | box-shadow: -1px 1px 3px rgba(0,0,0,.1);
8 |
9 | /* core styles should not be changed */
10 | position: absolute;
11 | display: none;
12 | z-index: 9999;
13 | max-height: 254px;
14 | overflow: hidden;
15 | overflow-y: auto;
16 | box-sizing: border-box;
17 |
18 | }
19 | .autocomplete-suggestion {
20 | position: relative;
21 | cursor: pointer;
22 | padding: 7px;
23 | line-height: 23px;
24 | white-space: nowrap;
25 | overflow: hidden;
26 | text-overflow: ellipsis;
27 | color: #333;
28 | }
29 |
30 | .autocomplete-suggestion b {
31 | font-weight: normal;
32 | color: #1f8dd6;
33 | }
34 |
35 | .autocomplete-suggestion.selected {
36 | background: #333;
37 | color: #fff;
38 | }
39 |
40 | .autocomplete-suggestion:hover {
41 | background: #444;
42 | color: #fff;
43 | }
44 |
45 | .autocomplete-suggestion > .context {
46 | font-size: 12px;
47 | }
48 |
--------------------------------------------------------------------------------
/workshop/Server/css/featherlight.min.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Featherlight - ultra slim jQuery lightbox
3 | * Version 1.7.13 - http://noelboss.github.io/featherlight/
4 | *
5 | * Copyright 2018, Noël Raoul Bossart (http://www.noelboss.com)
6 | * MIT Licensed.
7 | **/
8 | html.with-featherlight{overflow:hidden}.featherlight{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147483647;text-align:center;white-space:nowrap;cursor:pointer;background:#333;background:rgba(0,0,0,0)}.featherlight:last-of-type{background:rgba(0,0,0,.8)}.featherlight:before{content:'';display:inline-block;height:100%;vertical-align:middle}.featherlight .featherlight-content{position:relative;text-align:left;vertical-align:middle;display:inline-block;overflow:auto;padding:25px 25px 0;border-bottom:25px solid transparent;margin-left:5%;margin-right:5%;max-height:95%;background:#fff;cursor:auto;white-space:normal}.featherlight .featherlight-inner{display:block}.featherlight link.featherlight-inner,.featherlight script.featherlight-inner,.featherlight style.featherlight-inner{display:none}.featherlight .featherlight-close-icon{position:absolute;z-index:9999;top:0;right:0;line-height:25px;width:25px;cursor:pointer;text-align:center;font-family:Arial,sans-serif;background:#fff;background:rgba(255,255,255,.3);color:#000;border:0;padding:0}.featherlight .featherlight-close-icon::-moz-focus-inner{border:0;padding:0}.featherlight .featherlight-image{width:100%}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0;-webkit-overflow-scrolling:touch}.featherlight iframe{border:0}.featherlight *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media only screen and (max-width:1024px){.featherlight .featherlight-content{margin-left:0;margin-right:0;max-height:98%;padding:10px 10px 0;border-bottom:10px solid transparent}}@media print{html.with-featherlight>*>:not(.featherlight){display:none}}
--------------------------------------------------------------------------------
/workshop/Server/css/hybrid.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | vim-hybrid theme by w0ng (https://github.com/w0ng/vim-hybrid)
4 |
5 | */
6 |
7 | /*background color*/
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #1d1f21;
13 | }
14 |
15 | /*selection color*/
16 | .hljs::selection,
17 | .hljs span::selection {
18 | background: #373b41;
19 | }
20 |
21 | .hljs::-moz-selection,
22 | .hljs span::-moz-selection {
23 | background: #373b41;
24 | }
25 |
26 | /*foreground color*/
27 | .hljs {
28 | color: #c5c8c6;
29 | }
30 |
31 | /*color: fg_yellow*/
32 | .hljs-title,
33 | .hljs-name {
34 | color: #f0c674;
35 | }
36 |
37 | /*color: fg_comment*/
38 | .hljs-comment,
39 | .hljs-meta,
40 | .hljs-meta .hljs-keyword {
41 | color: #707880;
42 | }
43 |
44 | /*color: fg_red*/
45 | .hljs-number,
46 | .hljs-symbol,
47 | .hljs-literal,
48 | .hljs-deletion,
49 | .hljs-link {
50 | color: #cc6666
51 | }
52 |
53 | /*color: fg_green*/
54 | .hljs-string,
55 | .hljs-doctag,
56 | .hljs-addition,
57 | .hljs-regexp,
58 | .hljs-selector-attr,
59 | .hljs-selector-pseudo {
60 | color: #b5bd68;
61 | }
62 |
63 | /*color: fg_purple*/
64 | .hljs-attribute,
65 | .hljs-code,
66 | .hljs-selector-id {
67 | color: #b294bb;
68 | }
69 |
70 | /*color: fg_blue*/
71 | .hljs-keyword,
72 | .hljs-selector-tag,
73 | .hljs-bullet,
74 | .hljs-tag {
75 | color: #81a2be;
76 | }
77 |
78 | /*color: fg_aqua*/
79 | .hljs-subst,
80 | .hljs-variable,
81 | .hljs-template-tag,
82 | .hljs-template-variable {
83 | color: #8abeb7;
84 | }
85 |
86 | /*color: fg_orange*/
87 | .hljs-type,
88 | .hljs-built_in,
89 | .hljs-builtin-name,
90 | .hljs-quote,
91 | .hljs-section,
92 | .hljs-selector-class {
93 | color: #de935f;
94 | }
95 |
96 | .hljs-emphasis {
97 | font-style: italic;
98 | }
99 |
100 | .hljs-strong {
101 | font-weight: bold;
102 | }
103 |
--------------------------------------------------------------------------------
/workshop/Server/css/tags.css:
--------------------------------------------------------------------------------
1 | /* Tags */
2 |
3 | #head-tags{
4 | margin-left:1em;
5 | margin-top:1em;
6 | }
7 |
8 | #body .tags a.tag-link {
9 | display: inline-block;
10 | line-height: 2em;
11 | font-size: 0.8em;
12 | position: relative;
13 | margin: 0 16px 8px 0;
14 | padding: 0 10px 0 12px;
15 | background: #8451a1;
16 |
17 | -webkit-border-bottom-right-radius: 3px;
18 | border-bottom-right-radius: 3px;
19 | -webkit-border-top-right-radius: 3px;
20 | border-top-right-radius: 3px;
21 |
22 | -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.2);
23 | box-shadow: 0 1px 2px rgba(0,0,0,0.2);
24 | color: #fff;
25 | }
26 |
27 | #body .tags a.tag-link:before {
28 | content: "";
29 | position: absolute;
30 | top:0;
31 | left: -1em;
32 | width: 0;
33 | height: 0;
34 | border-color: transparent #8451a1 transparent transparent;
35 | border-style: solid;
36 | border-width: 1em 1em 1em 0;
37 | }
38 |
39 | #body .tags a.tag-link:after {
40 | content: "";
41 | position: absolute;
42 | top: 10px;
43 | left: 1px;
44 | width: 5px;
45 | height: 5px;
46 | -webkit-border-radius: 50%;
47 | border-radius: 100%;
48 | background: #fff;
49 | }
50 |
--------------------------------------------------------------------------------
/workshop/Server/en/categories/index.xml:
--------------------------------------------------------------------------------
1 |
2 |