diff --git a/.github/workflows/cancel.yml b/.github/workflows/cancel.yml new file mode 100644 index 00000000000..03e1007b841 --- /dev/null +++ b/.github/workflows/cancel.yml @@ -0,0 +1,13 @@ +name: Cancel +on: # yamllint disable-line rule:truthy + workflow_run: + workflows: ["CIGithubActions"] + types: + - requested +jobs: + cancel: + runs-on: [self-hosted, style-checker] + steps: + - uses: styfle/cancel-workflow-action@0.9.1 + with: + workflow_id: ${{ github.event.workflow.id }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7f20206a7b3..0a4beb50708 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: Ligthweight GithubActions +name: CIGithubActions on: # yamllint disable-line rule:truthy pull_request: types: @@ -11,20 +11,24 @@ on: # yamllint disable-line rule:truthy - master jobs: CheckLabels: - runs-on: [self-hosted] + runs-on: [self-hosted, style-checker] steps: - name: Check out repository code uses: actions/checkout@v2 - name: Labels check - run: cd $GITHUB_WORKSPACE/tests/ci && python3 run_check.py + run: | + cd $GITHUB_WORKSPACE/tests/ci + python3 run_check.py DockerHubPush: needs: CheckLabels - runs-on: [self-hosted] + runs-on: [self-hosted, style-checker] steps: - name: Check out repository code uses: actions/checkout@v2 - name: Images check - run: cd $GITHUB_WORKSPACE/tests/ci && python3 docker_images_check.py + run: | + cd $GITHUB_WORKSPACE/tests/ci + python3 docker_images_check.py - name: Upload images files to artifacts uses: actions/upload-artifact@v2 with: @@ -32,7 +36,7 @@ jobs: path: ${{ runner.temp }}/docker_images_check/changed_images.json StyleCheck: needs: DockerHubPush - runs-on: [self-hosted] + runs-on: [self-hosted, style-checker] steps: - name: Download changed images uses: actions/download-artifact@v2 @@ -42,12 +46,226 @@ jobs: - name: Check out repository code uses: actions/checkout@v2 - name: Style Check - run: cd $GITHUB_WORKSPACE/tests/ci && python3 style_check.py + env: + TEMP_PATH: ${{ runner.temp }}/style_check + run: | + cd $GITHUB_WORKSPACE/tests/ci + python3 style_check.py + - name: Cleanup + if: always() + run: | + docker kill $(docker ps -q) ||: + docker rm -f $(docker ps -a -q) ||: + sudo rm -fr $TEMP_PATH + DocsCheck: + needs: DockerHubPush + runs-on: [self-hosted, func-tester] + steps: + - name: Download changed images + uses: actions/download-artifact@v2 + with: + name: changed_images + path: ${{ runner.temp }}/docs_check + - name: Check out repository code + uses: actions/checkout@v2 + - name: Docs Check + env: + TEMP_PATH: ${{runner.temp}}/docs_check + REPO_COPY: ${{runner.temp}}/docs_check/ClickHouse + run: | + cp -r $GITHUB_WORKSPACE $TEMP_PATH + cd $REPO_COPY/tests/ci + python3 docs_check.py + - name: Cleanup + if: always() + run: | + docker kill $(docker ps -q) ||: + docker rm -f $(docker ps -a -q) ||: + sudo rm -fr $TEMP_PATH + BuilderDebDebug: + needs: DockerHubPush + if: ${{ !contains(github.event.pull_request.labels.*.name, 'pr-documentation') && !contains(github.event.pull_request.labels.*.name, 'pr-doc-fix') }} + runs-on: [self-hosted, builder] + steps: + - name: Download changed images + uses: actions/download-artifact@v2 + with: + name: changed_images + path: ${{ runner.temp }}/images_path + - name: Check out repository code + uses: actions/checkout@v2 + with: + submodules: 'recursive' + fetch-depth: 0 # otherwise we will have no info about contributors + - name: Build + env: + TEMP_PATH: ${{runner.temp}}/build_check + IMAGES_PATH: ${{runner.temp}}/images_path + REPO_COPY: ${{runner.temp}}/build_check/ClickHouse + CACHES_PATH: ${{runner.temp}}/../ccaches + CHECK_NAME: 'ClickHouse build check (actions)' + BUILD_NUMBER: 7 + run: | + sudo rm -fr $TEMP_PATH + mkdir -p $TEMP_PATH + cp -r $GITHUB_WORKSPACE $TEMP_PATH + cd $REPO_COPY/tests/ci && python3 build_check.py "$CHECK_NAME" $BUILD_NUMBER + - name: Upload build URLs to artifacts + uses: actions/upload-artifact@v2 + with: + name: ${{ env.BUILD_NAME }} + path: ${{ runner.temp }}/build_check/${{ env.BUILD_NAME }}.json + - name: Cleanup + if: always() + run: | + docker kill $(docker ps -q) ||: + docker rm -f $(docker ps -a -q) ||: + sudo rm -fr $TEMP_PATH + BuilderReport: + needs: [BuilderDebDebug] + runs-on: [self-hosted, style-checker] + steps: + - name: Download json reports + uses: actions/download-artifact@v2 + with: + path: ${{runner.temp}}/reports_dir + - name: Check out repository code + uses: actions/checkout@v2 + - name: Report Builder + env: + TEMP_PATH: ${{runner.temp}}/report_check + REPORTS_PATH: ${{runner.temp}}/reports_dir + CHECK_NAME: 'ClickHouse build check (actions)' + run: | + sudo rm -fr $TEMP_PATH + mkdir -p $TEMP_PATH + cd $GITHUB_WORKSPACE/tests/ci + python3 build_report_check.py "$CHECK_NAME" + - name: Cleanup + if: always() + run: | + docker kill $(docker ps -q) ||: + docker rm -f $(docker ps -a -q) ||: + sudo rm -fr $TEMP_PATH + FunctionalStatelessTestDebug: + needs: [BuilderDebDebug] + runs-on: [self-hosted, func-tester] + steps: + - name: Download json reports + uses: actions/download-artifact@v2 + with: + path: ${{runner.temp}}/reports_dir + - name: Check out repository code + uses: actions/checkout@v2 + - name: Functional test + env: + TEMP_PATH: ${{runner.temp}}/stateless_debug + REPORTS_PATH: ${{runner.temp}}/reports_dir + CHECK_NAME: 'Stateless tests (debug, actions)' + REPO_COPY: ${{runner.temp}}/stateless_debug/ClickHouse + REQUIRED_BUILD_NUMBER: 7 + KILL_TIMEOUT: 10800 + run: | + sudo rm -fr $TEMP_PATH + mkdir -p $TEMP_PATH + cp -r $GITHUB_WORKSPACE $TEMP_PATH + cd $REPO_COPY/tests/ci + python3 functional_test_check.py "$CHECK_NAME" $REQUIRED_BUILD_NUMBER $KILL_TIMEOUT + - name: Cleanup + if: always() + run: | + docker kill $(docker ps -q) ||: + docker rm -f $(docker ps -a -q) ||: + sudo rm -fr $TEMP_PATH + FunctionalStatefulTestDebug: + needs: [BuilderDebDebug] + runs-on: [self-hosted, func-tester] + steps: + - name: Download json reports + uses: actions/download-artifact@v2 + with: + path: ${{runner.temp}}/reports_dir + - name: Check out repository code + uses: actions/checkout@v2 + - name: Functional test + env: + TEMP_PATH: ${{runner.temp}}/stateful_debug + REPORTS_PATH: ${{runner.temp}}/reports_dir + CHECK_NAME: 'Stateful tests (debug, actions)' + REPO_COPY: ${{runner.temp}}/stateful_debug/ClickHouse + REQUIRED_BUILD_NUMBER: 7 + KILL_TIMEOUT: 3600 + run: | + sudo rm -fr $TEMP_PATH + mkdir -p $TEMP_PATH + cp -r $GITHUB_WORKSPACE $TEMP_PATH + cd $REPO_COPY/tests/ci + python3 functional_test_check.py "$CHECK_NAME" $REQUIRED_BUILD_NUMBER $KILL_TIMEOUT + - name: Cleanup + if: always() + run: | + docker kill $(docker ps -q) ||: + docker rm -f $(docker ps -a -q) ||: + sudo rm -fr $TEMP_PATH + StressTestDebug: + needs: [BuilderDebDebug] + runs-on: [self-hosted, stress-tester] + steps: + - name: Download json reports + uses: actions/download-artifact@v2 + with: + path: ${{runner.temp}}/reports_dir + - name: Check out repository code + uses: actions/checkout@v2 + - name: Stress test + env: + TEMP_PATH: ${{runner.temp}}/stress_debug + REPORTS_PATH: ${{runner.temp}}/reports_dir + CHECK_NAME: 'Stress tests (debug, actions)' + REPO_COPY: ${{runner.temp}}/stress_debug/ClickHouse + REQUIRED_BUILD_NUMBER: 7 + run: | + sudo rm -fr $TEMP_PATH + mkdir -p $TEMP_PATH + cp -r $GITHUB_WORKSPACE $TEMP_PATH + cd $REPO_COPY/tests/ci + python3 stress_check.py "$CHECK_NAME" $REQUIRED_BUILD_NUMBER + - name: Cleanup + if: always() + run: | + docker kill $(docker ps -q) ||: + docker rm -f $(docker ps -a -q) ||: + sudo rm -fr $TEMP_PATH + FastTest: + needs: DockerHubPush + if: ${{ !contains(github.event.pull_request.labels.*.name, 'pr-documentation') && !contains(github.event.pull_request.labels.*.name, 'pr-doc-fix') }} + runs-on: [self-hosted, builder] + steps: + - name: Check out repository code + uses: actions/checkout@v2 + - name: Fast Test + env: + TEMP_PATH: ${{runner.temp}}/fasttest + REPO_COPY: ${{runner.temp}}/fasttest/ClickHouse + CACHES_PATH: ${{runner.temp}}/../ccaches + run: | + sudo rm -fr $TEMP_PATH + mkdir -p $TEMP_PATH + cp -r $GITHUB_WORKSPACE $TEMP_PATH + cd $REPO_COPY/tests/ci && python3 fast_test_check.py + - name: Cleanup + if: always() + run: | + docker kill $(docker ps -q) ||: + docker rm -f $(docker ps -a -q) ||: + sudo rm -fr $TEMP_PATH FinishCheck: - needs: [StyleCheck, DockerHubPush, CheckLabels] - runs-on: [self-hosted] + needs: [StyleCheck, DockerHubPush, CheckLabels, BuilderReport, FastTest, FunctionalStatelessTestDebug, FunctionalStatefulTestDebug, DocsCheck, StressTestDebug] + runs-on: [self-hosted, style-checker] steps: - name: Check out repository code uses: actions/checkout@v2 - name: Finish label - run: cd $GITHUB_WORKSPACE/tests/ci && python3 finish_check.py + run: | + cd $GITHUB_WORKSPACE/tests/ci + python3 finish_check.py diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000000..dd576b04c8c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,55 @@ +name: DocsReleaseChecks +concurrency: + group: master-release + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + push: + branches: + - master + paths: + - 'docs/**' + - 'website/**' + - 'benchmark/**' + - 'docker/**' +jobs: + DockerHubPush: + runs-on: [self-hosted, style-checker] + steps: + - name: Check out repository code + uses: actions/checkout@v2 + - name: Images check + run: | + cd $GITHUB_WORKSPACE/tests/ci + python3 docker_images_check.py + - name: Upload images files to artifacts + uses: actions/upload-artifact@v2 + with: + name: changed_images + path: ${{ runner.temp }}/docker_images_check/changed_images.json + DocsRelease: + needs: DockerHubPush + runs-on: [self-hosted, func-tester] + steps: + - name: Check out repository code + uses: actions/checkout@v2 + - name: Download changed images + uses: actions/download-artifact@v2 + with: + name: changed_images + path: ${{runner.temp}}/docs_release + - name: Docs Release + env: + TEMP_PATH: ${{runner.temp}}/docs_release + REPO_COPY: ${{runner.temp}}/docs_release/ClickHouse + CLOUDFLARE_TOKEN: ${{secrets.CLOUDFLARE}} + ROBOT_CLICKHOUSE_SSH_KEY: ${{secrets.ROBOT_CLICKHOUSE_SSH_KEY}} + run: | + cp -r $GITHUB_WORKSPACE $TEMP_PATH + cd $REPO_COPY/tests/ci + python3 docs_release.py + - name: Cleanup + if: always() + run: | + docker kill $(docker ps -q) ||: + docker rm -f $(docker ps -a -q) ||: + sudo rm -fr $TEMP_PATH diff --git a/.gitmodules b/.gitmodules index e0404c1269d..8ad81b5094f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -76,7 +76,7 @@ url = https://github.com/ClickHouse-Extras/libcxxabi.git [submodule "contrib/snappy"] path = contrib/snappy - url = https://github.com/google/snappy + url = https://github.com/ClickHouse-Extras/snappy.git [submodule "contrib/cppkafka"] path = contrib/cppkafka url = https://github.com/mfontanini/cppkafka.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 7808edeff9b..ede70b09d94 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -149,8 +149,6 @@ if (ENABLE_FUZZING) set (ENABLE_JEMALLOC 0) set (ENABLE_CHECK_HEAVY_BUILDS 1) set (GLIBC_COMPATIBILITY OFF) - set (ENABLE_PROTOBUF ON) - set (USE_INTERNAL_PROTOBUF_LIBRARY ON) endif() # Global libraries @@ -581,6 +579,7 @@ include (cmake/find/yaml-cpp.cmake) include (cmake/find/s2geometry.cmake) include (cmake/find/nlp.cmake) include (cmake/find/bzip2.cmake) +include (cmake/find/filelog.cmake) if(NOT USE_INTERNAL_PARQUET_LIBRARY) set (ENABLE_ORC OFF CACHE INTERNAL "") diff --git a/base/base/DateLUTImpl.cpp b/base/base/DateLUTImpl.cpp index 09ed0b1495d..bbce3b111d3 100644 --- a/base/base/DateLUTImpl.cpp +++ b/base/base/DateLUTImpl.cpp @@ -177,8 +177,6 @@ DateLUTImpl::DateLUTImpl(const std::string & time_zone_) } -#if !defined(ARCADIA_BUILD) /// Arcadia's variant of CCTZ already has the same implementation. - /// Prefer to load timezones from blobs linked to the binary. /// The blobs are provided by "tzdata" library. /// This allows to avoid dependency on system tzdata. @@ -234,5 +232,3 @@ namespace cctz_extension ZoneInfoSourceFactory zone_info_source_factory = custom_factory; } - -#endif diff --git a/base/base/LineReader.cpp b/base/base/LineReader.cpp index d325154ee61..5beebb58b3b 100644 --- a/base/base/LineReader.cpp +++ b/base/base/LineReader.cpp @@ -103,7 +103,6 @@ String LineReader::readLine(const String & first_prompt, const String & second_p continue; } -#if !defined(ARCADIA_BUILD) /// C++20 const char * has_extender = nullptr; for (const auto * extender : extenders) { @@ -133,7 +132,6 @@ String LineReader::readLine(const String & first_prompt, const String & second_p if (input.empty()) continue; } -#endif line += (line.empty() ? "" : "\n") + input; diff --git a/base/base/defines.h b/base/base/defines.h index aef901d3148..21a3c09f532 100644 --- a/base/base/defines.h +++ b/base/base/defines.h @@ -83,10 +83,6 @@ # define BOOST_USE_UCONTEXT 1 #endif -#if defined(ARCADIA_BUILD) && defined(BOOST_USE_UCONTEXT) -# undef BOOST_USE_UCONTEXT -#endif - /// TODO: Strange enough, there is no way to detect UB sanitizer. /// Explicitly allow undefined behaviour for certain functions. Use it as a function attribute. diff --git a/base/base/getMemoryAmount.cpp b/base/base/getMemoryAmount.cpp index 59ad10335ed..8240f82fc67 100644 --- a/base/base/getMemoryAmount.cpp +++ b/base/base/getMemoryAmount.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -15,6 +16,17 @@ */ uint64_t getMemoryAmountOrZero() { +#if defined(OS_LINUX) + // Try to lookup at the Cgroup limit + std::ifstream cgroup_limit("/sys/fs/cgroup/memory/memory.limit_in_bytes"); + if (cgroup_limit.is_open()) + { + uint64_t amount = 0; // in case of read error + cgroup_limit >> amount; + return amount; + } +#endif + int64_t num_pages = sysconf(_SC_PHYS_PAGES); if (num_pages <= 0) return 0; diff --git a/base/base/logger_useful.h b/base/base/logger_useful.h index e2290a727b4..1237c6bd47c 100644 --- a/base/base/logger_useful.h +++ b/base/base/logger_useful.h @@ -49,12 +49,3 @@ namespace #define LOG_WARNING(logger, ...) LOG_IMPL(logger, DB::LogsLevel::warning, Poco::Message::PRIO_WARNING, __VA_ARGS__) #define LOG_ERROR(logger, ...) LOG_IMPL(logger, DB::LogsLevel::error, Poco::Message::PRIO_ERROR, __VA_ARGS__) #define LOG_FATAL(logger, ...) LOG_IMPL(logger, DB::LogsLevel::error, Poco::Message::PRIO_FATAL, __VA_ARGS__) - - -/// Compatibility for external projects. -#if defined(ARCADIA_BUILD) - using Poco::Logger; - using Poco::Message; - using DB::LogsLevel; - using DB::CurrentThread; -#endif diff --git a/base/base/sort.h b/base/base/sort.h index 3f5e14e1ed2..1f12cc62218 100644 --- a/base/base/sort.h +++ b/base/base/sort.h @@ -3,41 +3,24 @@ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wold-style-cast" -#if !defined(ARCADIA_BUILD) -# include // Y_IGNORE -#else -# include -#endif +#include template void nth_element(RandomIt first, RandomIt nth, RandomIt last) { -#if !defined(ARCADIA_BUILD) ::miniselect::floyd_rivest_select(first, nth, last); -#else - ::std::nth_element(first, nth, last); -#endif } template void partial_sort(RandomIt first, RandomIt middle, RandomIt last) { -#if !defined(ARCADIA_BUILD) ::miniselect::floyd_rivest_partial_sort(first, middle, last); -#else - ::std::partial_sort(first, middle, last); -#endif } template void partial_sort(RandomIt first, RandomIt middle, RandomIt last, Compare compare) { -#if !defined(ARCADIA_BUILD) ::miniselect::floyd_rivest_partial_sort(first, middle, last, compare); -#else - ::std::partial_sort(first, middle, last, compare); -#endif +} #pragma GCC diagnostic pop - -} diff --git a/base/daemon/BaseDaemon.cpp b/base/daemon/BaseDaemon.cpp index 63ce529eb0b..70915a520b3 100644 --- a/base/daemon/BaseDaemon.cpp +++ b/base/daemon/BaseDaemon.cpp @@ -63,9 +63,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if defined(OS_DARWIN) # pragma GCC diagnostic ignored "-Wunused-macros" diff --git a/base/daemon/SentryWriter.cpp b/base/daemon/SentryWriter.cpp index ac771b9bf47..6996b63b5dd 100644 --- a/base/daemon/SentryWriter.cpp +++ b/base/daemon/SentryWriter.cpp @@ -15,14 +15,12 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "Common/config_version.h" -# include -#endif +#include "Common/config_version.h" +#include #if USE_SENTRY -# include // Y_IGNORE +# include # include # include diff --git a/base/mysqlxx/Query.cpp b/base/mysqlxx/Query.cpp index c0d5c20fdfd..d4514c3e988 100644 --- a/base/mysqlxx/Query.cpp +++ b/base/mysqlxx/Query.cpp @@ -2,7 +2,7 @@ #include #include #else -#include //Y_IGNORE +#include #include #endif diff --git a/benchmark/duckdb/log b/benchmark/duckdb/log new file mode 100644 index 00000000000..64a6ad6bbeb --- /dev/null +++ b/benchmark/duckdb/log @@ -0,0 +1,15906 @@ +milovidov@mtlog-perftest03j:~$ ./duckdb +v0.3.0 46a0fc50a +Enter ".help" for usage hints. +Connected to a transient in-memory database. +Use ".open FILENAME" to reopen on a persistent database. +D PRAGMA threads = 16; +D PRAGMA temp_directory='duckdb.tmp'; +D .timing on +Error: unknown command or invalid arguments: "timing". Enter ".help" for help +D .timing=on +Error: unknown command or invalid arguments: "timing=on". Enter ".help" for help +D .timer on +D CREATE TABLE hits AS SELECT * FROM parquet_scan('hits.parquet'); +Run Time: real 315.828 user 447.896000 sys 126.552000 +D SELECT count(*) FROM hits; +30), sum(ResolutionWidth + ┌──────────────┐ +│ count_star() │ +├──────────────┤ +│ 100000000 │ +└──────────────┘ +Run Time: real 0.189 user 0.172000 sys 0.000000 +D SELECT count(*) FROM hits WHERE AdvEngineID != 0;t +┌──────────────┐ +│ count_star() │ +├──────────────┤ +│ 630535 │ +└──────────────┘ +Run Time: real 0.063 user 0.420000 sys 0.008000 +D SELECT sum(AdvEngineID), count(*), avg(ResolutionWidth) FROM hits;( +┌──────────────────┬──────────────┬──────────────────────┐ +│ sum(advengineid) │ count_star() │ avg(resolutionwidth) │ +├──────────────────┼──────────────┼──────────────────────┤ +│ 7280824 │ 100000000 │ 1513.48908394 │ +└──────────────────┴──────────────┴──────────────────────┘ +Run Time: real 0.097 user 0.744000 sys 0.116000 +D SELECT sum(UserID) FROM hits;s +┌────────────────────────┐ +│ sum(userid) │ +├────────────────────────┤ +│ 3.2306058694090605e+26 │ +└────────────────────────┘ +Run Time: real 0.095 user 0.684000 sys 0.012000 +D SELECT COUNT(DISTINCT UserID) FROM hits;+ +┌───────────────┐ +│ count(userid) │ +├───────────────┤ +│ 17630976 │ +└───────────────┘ +Run Time: real 10.279 user 10.520000 sys 2.380000 +D SELECT COUNT(DISTINCT SearchPhrase) FROM hits; +┌─────────────────────┐ +│ count(searchphrase) │ +├─────────────────────┤ +│ 6019589 │ +└─────────────────────┘ +Run Time: real 12.691 user 15.776000 sys 1.444000 +D SELECT min(EventDate), max(EventDate) FROM hits; +┌────────────────┬────────────────┐ +│ min(eventdate) │ max(eventdate) │ +├────────────────┼────────────────┤ +│ 15888 │ 15917 │ +└────────────────┴────────────────┘ +Run Time: real 0.119 user 0.608000 sys 0.020000 +D SELECT AdvEngineID, count(*) FROM hits WHERE AdvEngineID != 0 GROUP BY AdvEngineID ORDER BY count(*) DESC;o +┌─────────────┬──────────────┐ +│ AdvEngineID │ count_star() │ +├─────────────┼──────────────┤ +│ 2 │ 404620 │ +│ 27 │ 113167 │ +│ 13 │ 45633 │ +│ 45 │ 38974 │ +│ 44 │ 9731 │ +│ 3 │ 6896 │ +│ 62 │ 5266 │ +│ 52 │ 3554 │ +│ 50 │ 938 │ +│ 28 │ 836 │ +│ 53 │ 350 │ +│ 25 │ 343 │ +│ 61 │ 158 │ +│ 21 │ 38 │ +│ 42 │ 20 │ +│ 16 │ 7 │ +│ 7 │ 3 │ +│ 22 │ 1 │ +└─────────────┴──────────────┘ +Run Time: real 0.050 user 0.608000 sys 0.164000 +D SELECT RegionID, COUNT(DISTINCT UserID) AS u FROM hits GROUP BY RegionID ORDER BY u DESC LIMIT 10; +┌──────────┬─────────┐ +│ RegionID │ u │ +├──────────┼─────────┤ +│ 229 │ 2845673 │ +│ 2 │ 1081016 │ +│ 208 │ 831676 │ +│ 169 │ 604583 │ +│ 184 │ 322661 │ +│ 158 │ 307152 │ +│ 34 │ 299479 │ +│ 55 │ 286525 │ +│ 107 │ 272448 │ +│ 42 │ 243181 │ +└──────────┴─────────┘ +Run Time: real 10.522 user 10.800000 sys 2.108000 +D SELECT RegionID, sum(AdvEngineID), count(*) AS c, avg(ResolutionWidth), COUNT(DISTINCT UserID) FROM hits GROUP BY RegionID ORDER BY c DESC LIMIT 10;o +┌──────────┬──────────────────┬──────────┬──────────────────────┬───────────────┐ +│ RegionID │ sum(advengineid) │ c │ avg(resolutionwidth) │ count(userid) │ +├──────────┼──────────────────┼──────────┼──────────────────────┼───────────────┤ +│ 229 │ 2078084 │ 18296430 │ 1506.0876750819696 │ 2845673 │ +│ 2 │ 441711 │ 6687708 │ 1479.8410618406187 │ 1081016 │ +│ 208 │ 285925 │ 4261945 │ 1285.260504769536 │ 831676 │ +│ 169 │ 100887 │ 3320286 │ 1465.90517142198 │ 604583 │ +│ 32 │ 81498 │ 1843721 │ 1538.0370495318978 │ 216010 │ +│ 34 │ 161779 │ 1792406 │ 1548.364990409539 │ 299479 │ +│ 184 │ 55526 │ 1755223 │ 1506.8102679830426 │ 322661 │ +│ 42 │ 108820 │ 1542771 │ 1587.1074287758845 │ 243181 │ +│ 107 │ 120470 │ 1516722 │ 1548.6039623609336 │ 272448 │ +│ 51 │ 98212 │ 1435598 │ 1579.8864215469791 │ 211505 │ +└──────────┴──────────────────┴──────────┴──────────────────────┴───────────────┘ +Run Time: real 12.087 user 13.296000 sys 2.408000 +D SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(MobilePhoneModel) > 0 GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10; +┌──────────────────┬─────────┐ +│ MobilePhoneModel │ u │ +├──────────────────┼─────────┤ +│ iPad │ 1090347 │ +│ iPhone │ 45758 │ +│ A500 │ 16046 │ +│ N8-00 │ 5565 │ +│ iPho │ 3300 │ +│ ONE TOUCH 6030A │ 2759 │ +│ GT-P7300B │ 1907 │ +│ 3110000 │ 1871 │ +│ GT-I9500 │ 1598 │ +│ eagle75 │ 1492 │ +└──────────────────┴─────────┘ +Run Time: real 2.262 user 5.536000 sys 0.564000 +D SELECT MobilePhone, MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(MobilePhoneModel) > 0 GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10; +┌─────────────┬──────────────────┬────────┐ +│ MobilePhone │ MobilePhoneModel │ u │ +├─────────────┼──────────────────┼────────┤ +│ 1 │ iPad │ 931038 │ +│ 5 │ iPad │ 48385 │ +│ 6 │ iPad │ 29710 │ +│ 7 │ iPad │ 28391 │ +│ 118 │ A500 │ 16005 │ +│ 6 │ iPhone │ 14516 │ +│ 26 │ iPhone │ 13566 │ +│ 10 │ iPad │ 11433 │ +│ 32 │ iPad │ 9503 │ +│ 13 │ iPad │ 9417 │ +└─────────────┴──────────────────┴────────┘ +Run Time: real 2.487 user 6.048000 sys 0.412000 +D SELECT SearchPhrase, count(*) AS c FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchPhrase │ c │ +├────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 70263 │ +│ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 34675 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 24579 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 21649 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 19703 │ +│ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 19195 │ +│ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 17284 │ +│ galaxy table │ 16746 │ +│ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 16620 │ +│ \xD1\x81\xD0\xBA\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xBA\xD0\xBE \xD0\xBC\xD1\x8B\xD1\x... │ 12317 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 1.772 user 16.624000 sys 1.884000 +D SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10;( +┌────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchPhrase │ u │ +├────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 23671 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 19738 │ +│ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 18394 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 17550 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 14599 │ +│ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 14529 │ +│ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 14197 │ +│ \xD1\x81\xD0\xBA\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xBA\xD0\xBE \xD0\xBC\xD1\x8B\xD1\x... │ 9001 │ +│ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 8792 │ +│ \xD0\xBA\xD0\xBE\xD0\xBC\xD0\xB1\xD0\xB8\xD0\xBD\xD0\xB8\xD1\x80\xD0\xBE\xD0\xB... │ 7572 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 20.063 user 17.784000 sys 3.104000 +D SELECT SearchEngineID, SearchPhrase, count(*) AS c FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10;( +┌────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchEngineID │ SearchPhrase │ c │ +├────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ 2 │ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 46258 │ +│ 2 │ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 18871 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 16905 │ +│ 3 │ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 16748 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 14911 │ +│ 2 │ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 13716 │ +│ 2 │ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 13414 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 13105 │ +│ 3 │ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 12815 │ +│ 2 │ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 11946 │ +└────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 1.371 user 18.692000 sys 0.164000 +D SELECT UserID, count(*) FROM hits GROUP BY UserID ORDER BY count(*) DESC LIMIT 10;e +┌─────────────────────┬──────────────┐ +│ UserID │ count_star() │ +├─────────────────────┼──────────────┤ +│ 1313338681122956954 │ 29097 │ +│ 1907779576417363396 │ 25333 │ +│ 2305303682471783379 │ 10611 │ +│ 7982623143712728547 │ 7584 │ +│ 6018350421959114808 │ 6678 │ +│ 7280399273658728997 │ 6411 │ +│ 1090981537032625727 │ 6197 │ +│ 5730251990344211405 │ 6019 │ +│ 835157184735512989 │ 5211 │ +│ 770542365400669095 │ 4906 │ +└─────────────────────┴──────────────┘ +Run Time: real 1.016 user 12.592000 sys 0.120000 +D SELECT UserID, SearchPhrase, count(*) FROM hits GROUP BY UserID, SearchPhrase ORDER BY count(*) DESC LIMIT 10;i +┌─────────────────────┬──────────────┬──────────────┐ +│ UserID │ SearchPhrase │ count_star() │ +├─────────────────────┼──────────────┼──────────────┤ +│ 1313338681122956954 │ │ 29097 │ +│ 1907779576417363396 │ │ 25333 │ +│ 2305303682471783379 │ │ 10611 │ +│ 7982623143712728547 │ │ 6669 │ +│ 7280399273658728997 │ │ 6408 │ +│ 1090981537032625727 │ │ 6196 │ +│ 5730251990344211405 │ │ 6019 │ +│ 6018350421959114808 │ │ 5990 │ +│ 835157184735512989 │ │ 5209 │ +│ 770542365400669095 │ │ 4906 │ +└─────────────────────┴──────────────┴──────────────┘ +Run Time: real 3.555 user 29.324000 sys 3.220000 +D SELECT UserID, SearchPhrase, count(*) FROM hits GROUP BY UserID, SearchPhrase LIMIT 10; +(┌──────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬──────────────┐ +│ UserID │ SearchPhrase │ count_star() │ +├──────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼──────────────┤ +│ 1429668226731527516 │ │ 10 │ +│ 7090682690943997576 │ │ 9 │ +│ 581931296369147468 │ │ 28 │ +│ 1303966184265002832 │ │ 3 │ +│ 3410567899957317285 │ │ 1 │ +│ 1144785580888361492 │ │ 2 │ +│ 8350014103248889436 │ │ 4 │ +│ 2765306422664525607 │ │ 1 │ +│ 1499056669116975597 │ \xD1\x85\xD0\xBE\xD1\x81\xD1\x82\xD1\x8C \xD0\xBE\xD0\xBD\xD0\xBB\xD0\xB0\xD0\x... │ 1 │ +│ 16159576947204565573 │ │ 79 │ +└──────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴──────────────┘ +Run Time: real 2.360 user 30.528000 sys 1.528000 +D SELECT UserID, extract(minute FROM (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) AS m, SearchPhrase, count(*) FROM hits GROUP BY UserID, m, SearchPhrase ORDER BY count(*) DESC LIMIT 10; +┌─────────────────────┬────┬──────────────┬──────────────┐ +│ UserID │ m │ SearchPhrase │ count_star() │ +├─────────────────────┼────┼──────────────┼──────────────┤ +│ 1313338681122956954 │ 31 │ │ 589 │ +│ 1313338681122956954 │ 28 │ │ 578 │ +│ 1313338681122956954 │ 29 │ │ 572 │ +│ 1313338681122956954 │ 33 │ │ 567 │ +│ 1313338681122956954 │ 27 │ │ 557 │ +│ 1313338681122956954 │ 32 │ │ 554 │ +│ 1313338681122956954 │ 30 │ │ 552 │ +│ 1313338681122956954 │ 34 │ │ 546 │ +│ 1313338681122956954 │ 26 │ │ 540 │ +│ 1313338681122956954 │ 10 │ │ 539 │ +└─────────────────────┴────┴──────────────┴──────────────┘ +Run Time: real 8.635 user 52.720000 sys 1.648000 +D SELECT UserID FROM hits WHERE UserID = 12345678901234567890; +Run Time: real 0.257 user 0.256000 sys 0.000000 +D SELECT count(*) FROM hits WHERE URL::TEXT LIKE '%metrika%';e +┌──────────────┐ +│ count_star() │ +├──────────────┤ +│ 211 │ +└──────────────┘ +Run Time: real 7.228 user 46.668000 sys 0.300000 +D SELECT SearchPhrase, min(URL), count(*) AS c FROM hits WHERE URL::TEXT LIKE '%metrika%' AND octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;u +┌────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───┐ +│ SearchPhrase │ min(url) │ c │ +├────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───┤ +│ \xD1\x80\xD0\xB0\xD0\xB1\xD0\xBE\xD0\xB2\xD1\x8B\xD0\xB5 \xD0\xB4\xD0\xBE\xD1\x... │ http://smeshariki.ru/index.ua/auto.ria.ua/change=0&s_yers=0&with_video.yandex.u... │ 1 │ +│ \xD1\x80\xD0\xB5\xD1\x86\xD0\xB5\xD0\xBF\xD1\x82 │ http://smeshariki.ru/index.ua/search/metrikanske-urali-belorussia/28.html?1=1&c... │ 1 │ +│ \xD0\xBE\xD0\xBA\xD0\xB5\xD0\xB0\xD0\xBD\xD1\x81\xD0\xBA\xD0\xBE\xD0\xB5 \xD1\x... │ http://bdsmpeople.ru/index.ru/metrikadeletedAutoSearch │ 1 │ +│ \xD0\xB8\xD1\x89\xD1\x83 \xD1\x80\xD0\xB0\xD0\xB1\xD0\xBE\xD1\x82\xD0\xB0 \xD0\... │ http://smeshariki.ru/index.ua/advanceForce.1primea/forum=1&district=25586/page4... │ 1 │ +│ \xD0\xB4\xD0\xB8\xD0\xBD\xD0\xB0 \xD0\xB2\xD0\xB0\xD0\xBA\xD0\xB0\xD0\xBD\xD1\x... │ http://ecrn.ru/personal/gost277572,9589&pt=b&pd=8&pw=2&page3/?state=0&damages/0... │ 1 │ +│ \xD0\xBC\xD1\x8B\xD1\x81\xD0\xBB \xD0\xBF\xD0\xB5\xD1\x81\xD0\xB5\xD0\xBD \xD1\... │ http://smeshariki.ru/a-folder=cmarka=15&sort=&sll=36872/metrika/frl-2/bage-all/... │ 1 │ +│ \xD0\xB2\xD0\xB8\xD0\xB4\xD0\xB5\xD0\xBE \xD1\x82\xD0\xB0\xD0\xBA\xD0\xBE\xD0\x... │ http://maximum_438424&pvno=2&evlg=VC,0;VL,628;IC,1653-82676212&op_page=0&door=0... │ 1 │ +│ \xD1\x82\xD0\xB5\xD0\xBA\xD1\x81\xD1\x82\xD1\x8B \xD0\xBF\xD0\xBE\xD0\xB4\xD1\x... │ http://bdsmpeople.ru/index.ru/metrikadeletedAutoSearch │ 1 │ +│ \xD0\xBA\xD0\xBE\xD1\x88\xD0\xBA\xD1\x83 \xD1\x81\xD0\xB7\xD0\xB0\xD0\xBE \xD1\... │ http://bdsmpeople.ru/index.ru/metrikadeletedAutoSearch │ 1 │ +│ \xD1\x82\xD1\x80\xD1\x83\xD0\xB4\xD0\xB0 \xD0\xB4\xD0\xBB\xD1\x8F \xD0\xB2\xD1\... │ http://smeshariki.ru/recipes/sadovka.ru/gorod55.ru/search?text=\xD0\xB8\xD0\xB7... │ 1 │ +└────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───┘ +Run Time: real 0.829 user 13.020000 sys 0.000000 +D count(*) AS c, COUNT(DISTINCT UserID) FROM hits WHERE Title::TEXT LIKE '%Яндекс%' AND URL::TEXT NOT LIKE '%.yandex.%' AND octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;( +Run Time: real 7.200 user 22.172000 sys 0.560000 +D SELECT * FROM hits WHERE URL::TEXT LIKE '%metrika%' ORDER BY EventTime LIMIT 10; +┌─────────────────────┬────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┬────────────┬───────────┬───────────┬────────────┬──────────┬─────────────────────┬──────────────┬─────┬───────────┬────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬─────────┬───────────────────┬─────────────────┬───────────────┬─────────────┬─────────────────┬──────────────────┬─────────────────┬────────────┬────────────┬─────────────┬──────────┬──────────┬────────────────┬────────────────┬──────────────┬──────────────────┬──────────┬─────────────┬──────────────────┬────────┬─────────────┬────────────────┬────────────────┬──────────────┬─────────────┬─────────────┬───────────────────┬────────────────────┬────────────────┬─────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬──────────────────────┬─────────────┬────────┬────────────┬─────────────┬─────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┬──────────────┬─────────┬─────────────┬───────────────┬──────────┬──────────┬────────────────┬─────┬─────┬────────┬───────────┬───────────┬────────────┬────────────┬────────────┬───────────────┬─────────────────┬────────────────┬───────────────┬──────────────┬───────────┬────────────┬───────────┬───────────────┬─────────────────────┬───────────────────┬─────────────┬───────────────────────┬──────────────────┬────────────┬──────────────┬───────────────┬─────────────────┬─────────────────────┬────────────────────┬──────────────┬──────────────────┬───────────┬───────────┬─────────────┬────────────┬─────────┬─────────┬──────────┬──────────────────────┬──────────────────────┬──────┐ +│ WatchID │ JavaEnable │ Title │ GoodEvent │ EventTime │ EventDate │ CounterID │ ClientIP │ RegionID │ UserID │ CounterClass │ OS │ UserAgent │ URL │ Referer │ Refresh │ RefererCategoryID │ RefererRegionID │ URLCategoryID │ URLRegionID │ ResolutionWidth │ ResolutionHeight │ ResolutionDepth │ FlashMajor │ FlashMinor │ FlashMinor2 │ NetMajor │ NetMinor │ UserAgentMajor │ UserAgentMinor │ CookieEnable │ JavascriptEnable │ IsMobile │ MobilePhone │ MobilePhoneModel │ Params │ IPNetworkID │ TraficSourceID │ SearchEngineID │ SearchPhrase │ AdvEngineID │ IsArtifical │ WindowClientWidth │ WindowClientHeight │ ClientTimeZone │ ClientEventTime │ SilverlightVersion1 │ SilverlightVersion2 │ SilverlightVersion3 │ SilverlightVersion4 │ PageCharset │ CodeVersion │ IsLink │ IsDownload │ IsNotBounce │ FUniqID │ OriginalURL │ HID │ IsOldCounter │ IsEvent │ IsParameter │ DontCountHits │ WithHash │ HitColor │ LocalEventTime │ Age │ Sex │ Income │ Interests │ Robotness │ RemoteIP │ WindowName │ OpenerName │ HistoryLength │ BrowserLanguage │ BrowserCountry │ SocialNetwork │ SocialAction │ HTTPError │ SendTiming │ DNSTiming │ ConnectTiming │ ResponseStartTiming │ ResponseEndTiming │ FetchTiming │ SocialSourceNetworkID │ SocialSourcePage │ ParamPrice │ ParamOrderID │ ParamCurrency │ ParamCurrencyID │ OpenstatServiceName │ OpenstatCampaignID │ OpenstatAdID │ OpenstatSourceID │ UTMSource │ UTMMedium │ UTMCampaign │ UTMContent │ UTMTerm │ FromTag │ HasGCLID │ RefererHash │ URLHash │ CLID │ +├─────────────────────┼────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┼────────────┼───────────┼───────────┼────────────┼──────────┼─────────────────────┼──────────────┼─────┼───────────┼────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼─────────┼───────────────────┼─────────────────┼───────────────┼─────────────┼─────────────────┼──────────────────┼─────────────────┼────────────┼────────────┼─────────────┼──────────┼──────────┼────────────────┼────────────────┼──────────────┼──────────────────┼──────────┼─────────────┼──────────────────┼────────┼─────────────┼────────────────┼────────────────┼──────────────┼─────────────┼─────────────┼───────────────────┼────────────────────┼────────────────┼─────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼──────────────────────┼─────────────┼────────┼────────────┼─────────────┼─────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┼──────────────┼─────────┼─────────────┼───────────────┼──────────┼──────────┼────────────────┼─────┼─────┼────────┼───────────┼───────────┼────────────┼────────────┼────────────┼───────────────┼─────────────────┼────────────────┼───────────────┼──────────────┼───────────┼────────────┼───────────┼───────────────┼─────────────────────┼───────────────────┼─────────────┼───────────────────────┼──────────────────┼────────────┼──────────────┼───────────────┼─────────────────┼─────────────────────┼────────────────────┼──────────────┼──────────────────┼───────────┼───────────┼─────────────┼────────────┼─────────┼─────────┼──────────┼──────────────────────┼──────────────────────┼──────┤ +│ 9008228978173248400 │ 1 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372714203 │ 15888 │ 46429 │ 1741285710 │ 208 │ 727970985383478408 │ 0 │ 2 │ 2 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ http://smeshariki.ru/page%3D%26ev_n%3Dtvor_3_4 │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 1638 │ 1658 │ 37 │ 14 │ 0 │ 700.22 │ 0 │ 0 │ 15 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 2349927 │ -1 │ 0 │ │ 0 │ 0 │ 1844 │ 888 │ 135 │ 1372711075 │ 3 │ 0 │ 29241 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 0 │ │ 926364569 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372755313 │ 31 │ 1 │ 0 │ 0 │ 0 │ 1985697352 │ 13001 │ -1 │ 22 │ vG │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 16989158750233735299 │ 2619784076535420345 │ 0 │ +│ 7319686668886932386 │ 0 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372742048 │ 15888 │ 46429 │ 675534320 │ 208 │ 1167829038705361511 │ 0 │ 45 │ 1 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ http://smeshariki.ru/page=6&sqi=2&ved=0CC0QFjAA │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 280 │ 733 │ 0 │ 0 │ 0 │ │ 0 │ 0 │ 4 │ sO │ 1 │ 1 │ 1 │ 0 │ │ │ 1444853 │ -1 │ 0 │ │ 0 │ 0 │ 997 │ 800 │ 623 │ 1372713898 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 4655941889681510909 │ │ 721190565 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372747193 │ 31 │ 2 │ 3 │ 717 │ 0 │ 2935426383 │ 22084 │ -1 │ 1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 11629579472615090596 │ 2619784076535420345 │ 0 │ +│ 5650132582613869356 │ 0 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372742083 │ 15888 │ 46429 │ 675534320 │ 208 │ 1167829038705361511 │ 0 │ 45 │ 1 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ http://smeshariki.ru/page=6&sqi=2&ved=0CC0QFjAA │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 280 │ 733 │ 0 │ 0 │ 0 │ │ 0 │ 0 │ 4 │ D\xE0 │ 1 │ 1 │ 1 │ 0 │ │ │ 1444853 │ -1 │ 0 │ │ 0 │ 0 │ 997 │ 800 │ 623 │ 1372713960 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 4655941889681510909 │ │ 721255326 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372747245 │ 31 │ 2 │ 3 │ 717 │ 0 │ 2935426383 │ 64225 │ -1 │ 1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 11629579472615090596 │ 2619784076535420345 │ 0 │ +│ 6211862319117980382 │ 0 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372744794 │ 15888 │ 46429 │ 1384976586 │ 208 │ 45205883125357727 │ 0 │ 8 │ 1 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ │ 0 │ 0 │ 0 │ 9911 │ 216 │ 475 │ 368 │ 0 │ 0 │ 0 │ │ 0 │ 0 │ 7 │ D\xE0 │ 1 │ 1 │ 1 │ 0 │ │ │ 3195177 │ 0 │ 0 │ │ 0 │ 0 │ 412 │ 286 │ 135 │ 1372732810 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 7015666733105959947 │ │ 641313121 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372774931 │ 28 │ 1 │ 2 │ 1 │ 0 │ 1889444196 │ 44835 │ -1 │ 0 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 18150585289071012696 │ 2619784076535420345 │ 0 │ +│ 8127216893234548048 │ 0 │ \xD0\xA2\xD0\xBE\xD0\xBB\xD1\x81\xD1\x82\xD1\x83\xD1\x85\xD1\x83, \xD0\xB5\xD1\... │ 1 │ 1372752539 │ 15888 │ 46429 │ 1237806922 │ 208 │ 750085446646698731 │ 0 │ 2 │ 3 │ http://smeshariki.ru/used/99114578622-14406072,9269587/roometrika/?page=7&pw=2&... │ http://smeshariki.ru/page=11956bd3f5ba-bolshiient │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 1081 │ 979 │ 23 │ 15 │ 7 │ 700 │ 0 │ 0 │ 17 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 2914423 │ -1 │ 0 │ │ 0 │ 0 │ 1434 │ 739 │ 623 │ 1372781865 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 5496132257355632424 │ │ 983272850 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372760187 │ 50 │ 2 │ 2 │ 60 │ 18 │ 1113465640 │ 60610 │ -1 │ 29 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 194 │ 1631 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 13570011243001147277 │ 11339053197878713733 │ 0 │ +│ 5016976626924998727 │ 1 │ Toyota \xD1\x80\xD1\x83\xD0\xBA\xD0\xB0\xD0\xBB\xD1\x8B \xD0\xB4\xD0\xBB\xD1\x8... │ 1 │ 1372758784 │ 15888 │ 5645 │ 3888153915 │ 107 │ 4058808124307537573 │ 1 │ 2 │ 88 │ http:%2F%2Fwwww.bonprix.ru&pvid=131&op_products/transformality.pulsceness/01-me... │ http://forum.amur.info/node/12451180167540 │ 0 │ 10868 │ 635 │ 16361 │ 943 │ 1638 │ 777 │ 37 │ 15 │ 7 │ 700 │ 0 │ 0 │ 1 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 2726799 │ -1 │ 0 │ │ 0 │ 0 │ 1509 │ 618 │ 135 │ 1372835656 │ 0 │ 0 │ 0 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 6227398498798751865 │ │ 255959698 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372763371 │ 31 │ 1 │ 3 │ 3555 │ 13 │ 4006630121 │ -1 │ -1 │ -1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 10333931216342739575 │ 10009133566342666602 │ 0 │ +│ 4963765960745323978 │ 0 │ \xD0\x93\xD0\x90\xD0\x97 (ZAZ) 5403J \xE2\x80\x93 \xD0\xA4\xD0\xB8\xD0\xBB\xD1\... │ 1 │ 1372793626 │ 15888 │ 46429 │ 2063319617 │ 23967 │ 5283184799411504286 │ 0 │ 44 │ 2 │ http://smeshariki.ru/userId=0&matched_car=Volkswagency=1&p=8090/roometrika/?pag... │ http://smeshariki.ru/smsarhiv/num/33363634383294&lr=66&v6s=2&bodystyle │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 1996 │ 1781 │ 37 │ 15 │ 7 │ 700 │ 0 │ 0 │ 10 │ nA │ 1 │ 1 │ 0 │ 0 │ │ │ 4110783 │ -1 │ 0 │ │ 0 │ 0 │ 1551 │ 955 │ 291 │ 1372730435 │ 7 │ 1 │ 9577 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 8904020920948834668 │ │ 883138215 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372777308 │ 22 │ 2 │ 2 │ 11339 │ 18 │ 2136940575 │ 1653 │ -1 │ 1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 18276268115953212999 │ 9484754903086635093 │ 0 │ +│ 6284148982888572412 │ 1 │ Morskoj port \xE2\x80\x93 \xD0\x9D\xD0\xBE\xD0\xB2\xD0\xBE\xD1\x81\xD1\x82\xD1\... │ 1 │ 1372795222 │ 15889 │ 3922 │ 2460998382 │ 40 │ 1643466856862289966 │ 1 │ 44 │ 7 │ http://moikrug.ru/message-12-kak-pravdorubovnik_metrika-info.php?f=23&prr │ http://diary.ru/GameMain.aspx?d=1412&lr=75&mode=photo/login=igorod.irr.ru/i6102... │ 0 │ 306 │ 29199 │ 92 │ 247 │ 1368 │ 554 │ 37 │ 15 │ 7 │ 800.94 │ 0 │ 0 │ 12 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 1166094 │ 1 │ 0 │ │ 0 │ 0 │ 1253 │ 642 │ 135 │ 1372799147 │ 4 │ 1 │ 16561 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 7061143530822060136 │ │ 699865379 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372810401 │ 31 │ 2 │ 3 │ 6 │ 0 │ 3849445958 │ -1 │ -1 │ -1 │ S0 │ h1 │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 14060834305267311691 │ 1791983733815963315 │ 0 │ +│ 6024648629746505393 │ 0 │ \xD0\x9F\xD0\xBE\xD0\xB3\xD1\x80\xD0\xB5\xD0\xB2\xD0\xB0\xD1\x82\xD0\xB5\xD0\xB... │ 1 │ 1372795271 │ 15889 │ 1200 │ 2932550360 │ 208 │ 1578473929930714515 │ 1 │ 107 │ 82 │ http://afisha.yandex.ru/real-estate/out-of-town/household_app_metrika.ru/wildbe... │ http://ad.adrive_type_id=1959251&stUrl%3Dpopular/kw/306161&lr=1418][to]=&input_... │ 0 │ 15265 │ 19757 │ 8953 │ 32252 │ 958 │ 1871 │ 37 │ 0 │ 0 │ │ 0 │ 0 │ 3 │ D\xE0 │ 1 │ 1 │ 1 │ 6 │ │ │ 4010641 │ -1 │ 0 │ │ 0 │ 0 │ 521 │ 1803 │ -1 │ 1372870507 │ 0 │ 0 │ 0 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 0 │ http://b.kavanga.ru/tags/%FD%ED%FB%E2%F3%E6%E5%E6%ED%E8%ED%F1%FF%ED&ti=%D0%BD%D... │ 120241233 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372842094 │ 0 │ 0 │ 0 │ 0 │ 0 │ 3975911785 │ -1 │ -1 │ -1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 9685011611637290144 │ 5941547189901908071 │ 0 │ +│ 4857420640250996887 │ 1 │ Suzuki Escort 4* (\xD0\xA4\xD1\x80\xD0\xB0\xD0\xBD\xD1\x86\xD1\x8B 3 \xD1\x81\x... │ 1 │ 1372800737 │ 15889 │ 3922 │ 3201307115 │ 190 │ 7335986183190726964 │ 1 │ 44 │ 88 │ http://pova-ul-mir.irr.ru/search.php?gidcar=37408&uuid=1&bc=3&city=0&pv=20&s_ye... │ http://news/238/~6/?cauth=1&av=1&nm=1&ms=1,2/currency=RUR/page_num_id=15366563&... │ 0 │ 306 │ 144 │ 304 │ 132 │ 1368 │ 554 │ 37 │ 15 │ 4 │ 202 │ 0 │ 0 │ 1 │ fi │ 1 │ 1 │ 0 │ 0 │ │ │ 2311071 │ -1 │ 0 │ │ 0 │ 0 │ 1333 │ 924 │ 322 │ 1372840359 │ 4 │ 1 │ 16561 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 7659179697273795837 │ │ 232010762 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372866397 │ 31 │ 2 │ 2 │ 3658 │ 28 │ 2920265313 │ -1 │ -1 │ -1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 8839345929686869081 │ 5449259806403761803 │ 0 │ +└─────────────────────┴────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┴────────────┴───────────┴───────────┴────────────┴──────────┴─────────────────────┴──────────────┴─────┴───────────┴────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴─────────┴───────────────────┴─────────────────┴───────────────┴─────────────┴─────────────────┴──────────────────┴─────────────────┴────────────┴────────────┴─────────────┴──────────┴──────────┴────────────────┴────────────────┴──────────────┴──────────────────┴──────────┴─────────────┴──────────────────┴────────┴─────────────┴────────────────┴────────────────┴──────────────┴─────────────┴─────────────┴───────────────────┴────────────────────┴────────────────┴─────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴──────────────────────┴─────────────┴────────┴────────────┴─────────────┴─────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┴──────────────┴─────────┴─────────────┴───────────────┴──────────┴──────────┴────────────────┴─────┴─────┴────────┴───────────┴───────────┴────────────┴────────────┴────────────┴───────────────┴─────────────────┴────────────────┴───────────────┴──────────────┴───────────┴────────────┴───────────┴───────────────┴─────────────────────┴───────────────────┴─────────────┴───────────────────────┴──────────────────┴────────────┴──────────────┴───────────────┴─────────────────┴─────────────────────┴────────────────────┴──────────────┴──────────────────┴───────────┴───────────┴─────────────┴────────────┴─────────┴─────────┴──────────┴──────────────────────┴──────────────────────┴──────┘ +Run Time: real 36.001 user 164.452000 sys 5.964000 +D SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY EventTime LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ \xD1\x81\xD0\xB8\xD0\xBC\xD0\xBF\xD1\x82\xD0\xBE\xD0\xBC\xD1\x8B \xD1\x80\xD0\x... │ +│ galaxy s4 zoom \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC │ +│ \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC \xD0\xBD\xD0\xB5\xD0\xB1\xD0\xBE\xD0\x... │ +│ \xD0\xBD\xD0\xBE\xD1\x87\xD0\xBD\xD0\xBE \xD0\xBA\xD0\xB8\xD1\x82\xD0\xB0\xD1\x... │ +│ \xD0\xB0\xD0\xB2\xD0\xBE\xD0\xBC \xD0\xBA\xD0\xBE\xD0\xBD\xD1\x81\xD1\x82\xD0\x... │ +│ \xD0\xB1\xD1\x80\xD0\xB8\xD1\x82\xD0\xB0 \xD0\xB3\xD0\xB0\xD0\xBD\xD0\xB0\xD0\x... │ +│ \xD1\x81\xD0\xBB\xD0\xBE\xD0\xBD.\xD1\x80\xD1\x83\xD0\xB1., \xD0\xB4. \xD0\xB0.... │ +│ \xD1\x80\xD0\xB0\xD1\x81\xD0\xBF\xD0\xB8\xD1\x81\xD0\xB0\xD0\xBD\xD0\xB8\xD0\xB... │ +│ \xD0\xBA\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ +│ \xD0\xBE\xD1\x82\xD0\xB4\xD1\x8B\xD1\x85\xD0\xB0 \xD1\x87\xD0\xB5\xD0\xBC \xD0\... │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 0.255 user 3.820000 sys 0.172000 +D SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY SearchPhrase LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ ! hektdf gjcgjhn conster │ +│ ! \xD1\x81\xD0\xBA\xD0\xB0\xD1\x80\xD0\xBF │ +│ !(\xD0\xBA\xD0\xB0\xD0\xBA \xD0\xB2\xD0\xBE\xD1\x80\xD0\xBE\xD0\xBD\xD0\xB8 │ +│ !(\xD0\xBF\xD0\xBE \xD0\xB3\xD0\xBE\xD1\x80\xD0\xB8\xD1\x8E \xD0\xB2 \xD1\x8F\x... │ +│ !(\xD1\x81) \xD0\xBF\xD1\x80\xD0\xBE \xD0\xB4\xD0\xBF\xD0\xBE \xD1\x81\xD0\xB5\... │ +│ !(\xD1\x81\xD0\xB0\xD0\xBB\xD0\xBE\xD0\xBD\xD1\x8B \xD0\xBE\xD1\x81\xD1\x82\xD0... │ +│ !(\xD1\x81\xD1\x82\xD0\xB0\xD1\x80\xD1\x82\xD0\xB5\xD1\x80 rav4 \xD1\x82\xD1\x8... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD0\xB4\xD0\xBB\xD1\x8F \xD0\xBC\xD1\x8F\xD1... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD0\xBC\xD0\xB0\xD1\x83\xD1\x81 \xD0\xBA\xD0... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD1\x81\xD0\xB5\xD1\x80\xD0\xB8\xD0\xB8 │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 0.251 user 3.676000 sys 0.104000 +D SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY EventTime, SearchPhrase LIMIT 10; +D┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ galaxy s4 zoom \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC │ +│ \xD0\xBD\xD0\xBE\xD1\x87\xD0\xBD\xD0\xBE \xD0\xBA\xD0\xB8\xD1\x82\xD0\xB0\xD1\x... │ +│ \xD1\x81\xD0\xB8\xD0\xBC\xD0\xBF\xD1\x82\xD0\xBE\xD0\xBC\xD1\x8B \xD1\x80\xD0\x... │ +│ \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC \xD0\xBD\xD0\xB5\xD0\xB1\xD0\xBE\xD0\x... │ +│ \xD0\xB0\xD0\xB2\xD0\xBE\xD0\xBC \xD0\xBA\xD0\xBE\xD0\xBD\xD1\x81\xD1\x82\xD0\x... │ +│ \xD0\xB0\xD0\xBD\xD0\xB0\xD0\xBF\xD0\xB0 \xD0\xBE\xD0\xBF\xD0\xB5\xD1\x80\xD0\x... │ +│ \xD0\xB1\xD1\x80\xD0\xB8\xD1\x82\xD0\xB0 \xD0\xB3\xD0\xB0\xD0\xBD\xD0\xB0\xD0\x... │ +│ \xD0\xBA\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ +│ \xD0\xBE\xD1\x82\xD0\xB4\xD1\x8B\xD1\x85\xD0\xB0 \xD1\x87\xD0\xB5\xD0\xBC \xD0\... │ +│ \xD1\x80\xD0\xB0\xD1\x81\xD0\xBF\xD0\xB8\xD1\x81\xD0\xB0\xD0\xBD\xD0\xB8\xD0\xB... │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 0.232 user 3.660000 sys 0.000000 +D SELECT CounterID, avg(octet_length(URL)) AS l, count(*) AS c FROM hits WHERE octet_length(URL) > 0 GROUP BY CounterID HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25;L +┌───────────┬────────────────────┬─────────┐ +│ CounterID │ l │ c │ +├───────────┼────────────────────┼─────────┤ +│ 233773 │ 469.18537326484886 │ 2938865 │ +│ 245438 │ 271.7892512777364 │ 2510103 │ +│ 122612 │ 238.64530987208474 │ 3574007 │ +│ 234004 │ 204.28793262381632 │ 238660 │ +│ 1634 │ 197.83321731651554 │ 323229 │ +│ 786 │ 186.75537634408602 │ 120528 │ +│ 114157 │ 142.91881538575285 │ 216408 │ +│ 515 │ 126.22860040706026 │ 146907 │ +│ 256004 │ 125.37108455074805 │ 858171 │ +│ 95427 │ 120.26856903175477 │ 374306 │ +│ 199550 │ 109.81720498866335 │ 7115413 │ +│ 220992 │ 105.85666196266179 │ 494614 │ +│ 196239 │ 98.34882201749727 │ 163797 │ +│ 62 │ 93.15981711034343 │ 738150 │ +│ 96948 │ 92.74321182146618 │ 396093 │ +│ 188878 │ 91.98308322489247 │ 311998 │ +│ 249603 │ 91.88026594639518 │ 120325 │ +│ 3922 │ 87.83856410684609 │ 8527069 │ +│ 191697 │ 86.95776647628826 │ 124664 │ +│ 97467 │ 84.2953696503987 │ 131178 │ +│ 186300 │ 83.97258027738701 │ 802561 │ +│ 146891 │ 77.77430173504756 │ 605286 │ +│ 38 │ 76.43757015971798 │ 507770 │ +│ 230962 │ 76.3127707226559 │ 169223 │ +│ 77639 │ 75.38681923602442 │ 253961 │ +└───────────┴────────────────────┴─────────┘ +Run Time: real 0.443 user 6.476000 sys 0.504000 +D //(?:www\.)?([^/]+)/.*$', '\1') AS key, avg(octet_length(Referer)) AS l, count(*) AS c, min(Referer) FROM hits WHERE octet_length(Referer) > 0 GROUP BY key HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25;E +┌────────────────────────────────────────────────────────────────────────┬────────────────────┬─────────┬────────────────────────────────────────────────────────────────────────────────────┐ +│ key │ l │ c │ min(referer) │ +├────────────────────────────────────────────────────────────────────────┼────────────────────┼─────────┼────────────────────────────────────────────────────────────────────────────────────┤ +│ svpressa.ru │ 307.980979437341 │ 242527 │ http://svpressa.ru/ │ +│ msuzie-showforumdisplay │ 263.327228380409 │ 183676 │ http://msuzie-showforumdisplay/63/~2/?name=&cost_neu%3D400%26retpath=default777... │ +│ saint-peters-total=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 80 │ 242.5236948271821 │ 200529 │ http://saint-peters-total=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 80/c... │ +│ domics │ 212.92990978061542 │ 326094 │ http://domics/825179.11931861234499792 │ +│ e96.ru │ 210.09628206687884 │ 1019276 │ http://e96.ru/%3Ffrom]=&input_act[count_num=0&dff=arian-carrina1201517&cad=rjt&... │ +│ gadgets.irr.ru │ 131.9597008950273 │ 349710 │ https://gadgets.irr.ru/2jmj7l5rSw0yVb │ +│ google.ru │ 109.24485253818524 │ 2158491 │ http://google.ru/ │ +│ go.mail │ 108.63930572737723 │ 8228007 │ http://go.mail/04/detskaia-moda-zhiensmed │ +│ msouz.ru │ 106.10887286512423 │ 301774 │ http://msouz.ru/?ffshop │ +│ state=19945206 │ 105.6469046513171 │ 512414 │ http://state=19945206/foto-4/login%20NoTs3M&where=all&filmId=u8aGGqtWs3M&where=... │ +│ loveplanet.ru │ 104.60136383347789 │ 461200 │ http://loveplanet.ru/%3Faw_opel/page=2013 │ +│ bonprix.ru │ 104.41683309557774 │ 1125105 │ http://bonprix.ru/ │ +│ novjob.ru │ 96.75331644732393 │ 133049 │ http://novjob.ru/ │ +│ cn.ru │ 95.63198716663325 │ 124675 │ http://cn.ru/GameMain.aspx#catalog/100523&tails.xml?market_pc.html?pid=9403&lr=... │ +│ geomethiettai.ru │ 94.78816556817006 │ 115916 │ https://geomethiettai.ru/GameMain.aspx?group=houses/list=266559j7077&num=7&prun... │ +│ kino │ 90.27628829938655 │ 120139 │ http://kino/6/21/2/women.asp?whichpage4/#oversion=unreadm&uid │ +│ yaroslavens.ru │ 90.17077281117085 │ 124610 │ http://yaroslavens.ru/main.aspx#catalog%2F1004-1100000147-otvet/actions/disloca... │ +│ mysw.info │ 89.68684313159915 │ 984596 │ http://mysw.info/ │ +│ m.myloveplanet.ru │ 88.73233749439181 │ 151564 │ http://m.myloveplanet.ru/ │ +│ povarenok.ru │ 83.97395952020882 │ 144813 │ http://povarenok.ru/ │ +│ gorod │ 80.33107253811141 │ 110728 │ http://gorod/%3Fauto.ria.ua%2Fjob │ +│ yandsearch │ 80.21664430621621 │ 245970 │ http://www.yandsearch/rooms=1/page2 │ +│ myloveplanet.ru │ 80.08183067768715 │ 110582 │ http://myloveplanet.ru/#associety/auto │ +│ tambov.irr.ru │ 77.8650188064113 │ 315318 │ http://tambov.irr.ru/0/c1/tgFtaeLDK0yb01A7xvQF08sjCFqQxn51 │ +│ kurortmag.ru │ 75.74958779884584 │ 155264 │ http://kurortmag.ru/ │ +└────────────────────────────────────────────────────────────────────────┴────────────────────┴─────────┴────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 121.613 user 1864.148000 sys 2.320000 +D + 82), sum(ResolutionWidth + 83), sum(ResolutionWidth + 84), sum(ResolutionWidth + 85), sum(ResolutionWidth + 86), sum(ResolutionWidth + 87), sum(ResolutionWidth + 88), sum(ResolutionWidth + 89) FROM hits; +┌──────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┐ +│ sum(resolutionwidth) │ sum(resolutionwidth + 1) │ sum(resolutionwidth + 2) │ sum(resolutionwidth + 3) │ sum(resolutionwidth + 4) │ sum(resolutionwidth + 5) │ sum(resolutionwidth + 6) │ sum(resolutionwidth + 7) │ sum(resolutionwidth + 8) │ sum(resolutionwidth + 9) │ sum(resolutionwidth + 10) │ sum(resolutionwidth + 11) │ sum(resolutionwidth + 12) │ sum(resolutionwidth + 13) │ sum(resolutionwidth + 14) │ sum(resolutionwidth + 15) │ sum(resolutionwidth + 16) │ sum(resolutionwidth + 17) │ sum(resolutionwidth + 18) │ sum(resolutionwidth + 19) │ sum(resolutionwidth + 20) │ sum(resolutionwidth + 21) │ sum(resolutionwidth + 22) │ sum(resolutionwidth + 23) │ sum(resolutionwidth + 24) │ sum(resolutionwidth + 25) │ sum(resolutionwidth + 26) │ sum(resolutionwidth + 27) │ sum(resolutionwidth + 28) │ sum(resolutionwidth + 29) │ sum(resolutionwidth + 30) │ sum(resolutionwidth + 31) │ sum(resolutionwidth + 32) │ sum(resolutionwidth + 33) │ sum(resolutionwidth + 34) │ sum(resolutionwidth + 35) │ sum(resolutionwidth + 36) │ sum(resolutionwidth + 37) │ sum(resolutionwidth + 38) │ sum(resolutionwidth + 39) │ sum(resolutionwidth + 40) │ sum(resolutionwidth + 41) │ sum(resolutionwidth + 42) │ sum(resolutionwidth + 43) │ sum(resolutionwidth + 44) │ sum(resolutionwidth + 45) │ sum(resolutionwidth + 46) │ sum(resolutionwidth + 47) │ sum(resolutionwidth + 48) │ sum(resolutionwidth + 49) │ sum(resolutionwidth + 50) │ sum(resolutionwidth + 51) │ sum(resolutionwidth + 52) │ sum(resolutionwidth + 53) │ sum(resolutionwidth + 54) │ sum(resolutionwidth + 55) │ sum(resolutionwidth + 56) │ sum(resolutionwidth + 57) │ sum(resolutionwidth + 58) │ sum(resolutionwidth + 59) │ sum(resolutionwidth + 60) │ sum(resolutionwidth + 61) │ sum(resolutionwidth + 62) │ sum(resolutionwidth + 63) │ sum(resolutionwidth + 64) │ sum(resolutionwidth + 65) │ sum(resolutionwidth + 66) │ sum(resolutionwidth + 67) │ sum(resolutionwidth + 68) │ sum(resolutionwidth + 69) │ sum(resolutionwidth + 70) │ sum(resolutionwidth + 71) │ sum(resolutionwidth + 72) │ sum(resolutionwidth + 73) │ sum(resolutionwidth + 74) │ sum(resolutionwidth + 75) │ sum(resolutionwidth + 76) │ sum(resolutionwidth + 77) │ sum(resolutionwidth + 78) │ sum(resolutionwidth + 79) │ sum(resolutionwidth + 80) │ sum(resolutionwidth + 81) │ sum(resolutionwidth + 82) │ sum(resolutionwidth + 83) │ sum(resolutionwidth + 84) │ sum(resolutionwidth + 85) │ sum(resolutionwidth + 86) │ sum(resolutionwidth + 87) │ sum(resolutionwidth + 88) │ sum(resolutionwidth + 89) │ +├──────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┤ +│ 151348908394 │ 151448908394 │ 151548908394 │ 151648908394 │ 151748908394 │ 151848908394 │ 151948908394 │ 152048908394 │ 152148908394 │ 152248908394 │ 152348908394 │ 152448908394 │ 152548908394 │ 152648908394 │ 152748908394 │ 152848908394 │ 152948908394 │ 153048908394 │ 153148908394 │ 153248908394 │ 153348908394 │ 153448908394 │ 153548908394 │ 153648908394 │ 153748908394 │ 153848908394 │ 153948908394 │ 154048908394 │ 154148908394 │ 154248908394 │ 154348908394 │ 154448908394 │ 154548908394 │ 154648908394 │ 154748908394 │ 154848908394 │ 154948908394 │ 155048908394 │ 155148908394 │ 155248908394 │ 155348908394 │ 155448908394 │ 155548908394 │ 155648908394 │ 155748908394 │ 155848908394 │ 155948908394 │ 156048908394 │ 156148908394 │ 156248908394 │ 156348908394 │ 156448908394 │ 156548908394 │ 156648908394 │ 156748908394 │ 156848908394 │ 156948908394 │ 157048908394 │ 157148908394 │ 157248908394 │ 157348908394 │ 157448908394 │ 157548908394 │ 157648908394 │ 157748908394 │ 157848908394 │ 157948908394 │ 158048908394 │ 158148908394 │ 158248908394 │ 158348908394 │ 158448908394 │ 158548908394 │ 158648908394 │ 158748908394 │ 158848908394 │ 158948908394 │ 159048908394 │ 159148908394 │ 159248908394 │ 159348908394 │ 159448908394 │ 159548908394 │ 159648908394 │ 159748908394 │ 159848908394 │ 159948908394 │ 160048908394 │ 160148908394 │ 160248908394 │ +└──────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┘ +Run Time: real 6.264 user 99.452000 sys 0.008000 +D SELECT SearchEngineID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10; +┌────────────────┬────────────┬──────┬──────────────┬──────────────────────┐ +│ SearchEngineID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├────────────────┼────────────┼──────┼──────────────┼──────────────────────┤ +│ 2 │ 1138507705 │ 1633 │ 35 │ 1408.0122473974282 │ +│ 2 │ 1740861572 │ 1331 │ 28 │ 1577.945905334335 │ +│ 2 │ 3487820196 │ 1144 │ 35 │ 1553.1984265734266 │ +│ 2 │ 3797060577 │ 1140 │ 36 │ 1543.4140350877192 │ +│ 2 │ 2349209741 │ 1105 │ 30 │ 1557.387330316742 │ +│ 2 │ 2424344199 │ 1102 │ 31 │ 1555.6588021778584 │ +│ 2 │ 3663904793 │ 1083 │ 31 │ 1581.8171745152354 │ +│ 2 │ 3829154130 │ 1082 │ 30 │ 1541.253234750462 │ +│ 2 │ 2551371145 │ 1080 │ 24 │ 1559.8092592592593 │ +│ 2 │ 4029049820 │ 1058 │ 32 │ 1556.2003780718337 │ +└────────────────┴────────────┴──────┴──────────────┴──────────────────────┘ +Run Time: real 0.996 user 13.080000 sys 0.064000 +D SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +┌─────────────────────┬────────────┬───┬──────────────┬──────────────────────┐ +│ WatchID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├─────────────────────┼────────────┼───┼──────────────┼──────────────────────┤ +│ 4623938834438874046 │ 3335652175 │ 2 │ 0 │ 1917.0 │ +│ 8570880866533920844 │ 2776099975 │ 2 │ 0 │ 1917.0 │ +│ 6816565865734300637 │ 3770216628 │ 2 │ 0 │ 2038.0 │ +│ 7411827807718521758 │ 2301434990 │ 2 │ 0 │ 1087.0 │ +│ 8423042978509451644 │ 2960255590 │ 2 │ 0 │ 1368.0 │ +│ 8672760597587433971 │ 1269590216 │ 2 │ 0 │ 1368.0 │ +│ 5851512534509153320 │ 3968091174 │ 2 │ 0 │ 1368.0 │ +│ 5191389486841953200 │ 1487376472 │ 2 │ 0 │ 1828.0 │ +│ 7726072175618541265 │ 1876840662 │ 2 │ 0 │ 1638.0 │ +│ 8425973212606442266 │ 3882647820 │ 2 │ 0 │ 1368.0 │ +└─────────────────────┴────────────┴───┴──────────────┴──────────────────────┘ +Run Time: real 2.661 user 16.820000 sys 0.380000 +D SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +┌─────────────────────┬────────────┬───┬──────────────┬──────────────────────┐ +│ WatchID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├─────────────────────┼────────────┼───┼──────────────┼──────────────────────┤ +│ 9204615339472918567 │ 2852648576 │ 2 │ 0 │ 1638.0 │ +│ 4831526837317665710 │ 4079908211 │ 2 │ 0 │ 1917.0 │ +│ 6588223849545190851 │ 1818568139 │ 2 │ 0 │ 1638.0 │ +│ 7068064253809492202 │ 1818568139 │ 2 │ 0 │ 1638.0 │ +│ 8472345177156920540 │ 1607181793 │ 2 │ 0 │ 1638.0 │ +│ 7154833339725729693 │ 2038096066 │ 2 │ 0 │ 508.0 │ +│ 7985169136791284011 │ 481976292 │ 2 │ 0 │ 1638.0 │ +│ 5261458931164052280 │ 481976292 │ 2 │ 0 │ 1638.0 │ +│ 8672760597587433971 │ 1269590216 │ 2 │ 0 │ 1368.0 │ +│ 4848145794958638974 │ 3938580212 │ 2 │ 0 │ 1638.0 │ +└─────────────────────┴────────────┴───┴──────────────┴──────────────────────┘ +Run Time: real 20.238 user 75.988000 sys 23.744000 +D SELECT URL, count(*) AS c FROM hits GROUP BY URL ORDER BY c DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬─────────┐ +│ URL │ c │ +├────────────────────────────────────────────────────────────────────────────────────┼─────────┤ +│ http://liver.ru/belgorod/page/1006.j\xD0\xBA\xD0\xB8/\xD0\xB4\xD0\xBE\xD0\xBF_\... │ 3288173 │ +│ http://kinopoisk.ru │ 1625251 │ +│ http://bdsm_po_yers=0&with_video │ 791465 │ +│ http://video.yandex │ 582404 │ +│ http://smeshariki.ru/region │ 514984 │ +│ http://auto_fiat_dlya-bluzki%2F8536.30.18&he=900&with │ 507995 │ +│ http://liver.ru/place_rukodel=365115eb7bbb90 │ 359893 │ +│ http://kinopoisk.ru/vladimir.irr.ru │ 354690 │ +│ http://video.yandex.ru/search/?jenre=50&s_yers │ 318979 │ +│ http://tienskaia-moda │ 289355 │ +└────────────────────────────────────────────────────────────────────────────────────┴─────────┘ +Run Time: real 12.508 user 54.784000 sys 2.344000 +D SELECT 1, URL, count(*) AS c FROM hits GROUP BY 1, URL ORDER BY c DESC LIMIT 10; +┌───┬────────────────────────────────────────────────────────────────────────────────────┬─────────┐ +│ 1 │ URL │ c │ +├───┼────────────────────────────────────────────────────────────────────────────────────┼─────────┤ +│ 1 │ http://liver.ru/belgorod/page/1006.j\xD0\xBA\xD0\xB8/\xD0\xB4\xD0\xBE\xD0\xBF_\... │ 3288173 │ +│ 1 │ http://kinopoisk.ru │ 1625251 │ +│ 1 │ http://bdsm_po_yers=0&with_video │ 791465 │ +│ 1 │ http://video.yandex │ 582404 │ +│ 1 │ http://smeshariki.ru/region │ 514984 │ +│ 1 │ http://auto_fiat_dlya-bluzki%2F8536.30.18&he=900&with │ 507995 │ +│ 1 │ http://liver.ru/place_rukodel=365115eb7bbb90 │ 359893 │ +│ 1 │ http://kinopoisk.ru/vladimir.irr.ru │ 354690 │ +│ 1 │ http://video.yandex.ru/search/?jenre=50&s_yers │ 318979 │ +│ 1 │ http://tienskaia-moda │ 289355 │ +└───┴────────────────────────────────────────────────────────────────────────────────────┴─────────┘ +Run Time: real 4.310 user 59.804000 sys 0.172000 +D SELECT ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3, count(*) AS c FROM hits GROUP BY ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3 ORDER BY c DESC LIMIT 10; +┌────────────┬──────────────┬──────────────┬──────────────┬───────┐ +│ ClientIP │ clientip - 1 │ clientip - 2 │ clientip - 3 │ c │ +├────────────┼──────────────┼──────────────┼──────────────┼───────┤ +│ 4255045322 │ 4255045321 │ 4255045320 │ 4255045319 │ 47008 │ +│ 2596862839 │ 2596862838 │ 2596862837 │ 2596862836 │ 29121 │ +│ 3119147744 │ 3119147743 │ 3119147742 │ 3119147741 │ 25333 │ +│ 1696638182 │ 1696638181 │ 1696638180 │ 1696638179 │ 20230 │ +│ 1138507705 │ 1138507704 │ 1138507703 │ 1138507702 │ 15778 │ +│ 3367941774 │ 3367941773 │ 3367941772 │ 3367941771 │ 12768 │ +│ 3032827420 │ 3032827419 │ 3032827418 │ 3032827417 │ 11349 │ +│ 1740861572 │ 1740861571 │ 1740861570 │ 1740861569 │ 11315 │ +│ 3487820196 │ 3487820195 │ 3487820194 │ 3487820193 │ 9881 │ +│ 3663904793 │ 3663904792 │ 3663904791 │ 3663904790 │ 9718 │ +└────────────┴──────────────┴──────────────┴──────────────┴───────┘ +Run Time: real 2.423 user 32.668000 sys 0.276000 +D '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(URL) > 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +┌──────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├──────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 102341 │ +│ http://komme%2F27.0.1453.116 │ 51218 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18315 │ +│ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16461 │ +│ http://irr.ru/index.php │ 12577 │ +│ http://irr.ru/index.php?showalbum/login │ 10880 │ +│ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 7627 │ +│ http://irr.ru/index.php?showalbum/login-kupalnik │ 4369 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 4058 │ +│ http://komme%2F27.0.1453.116 Safari │ 3021 │ +└──────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 1.153 user 1.492000 sys 0.064000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(Title) > 0 GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ Title │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ \xD0\xA2\xD0\xB5\xD1\x81\xD1\x82 (\xD0\xA0\xD0\xBE\xD1\x81\xD1\x81\xD0\xB8\xD1\... │ 122407 │ +│ \xD0\xA8\xD0\xB0\xD1\x80\xD0\xB0\xD1\x80\xD0\xB0\xD0\xB9), \xD0\x92\xD1\x8B\xD0... │ 82935 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA - IRR.ru │ 80958 │ +│ \xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\xB8 New Era H (\xD0\x90\xD1\x81\xD1\x83\xD... │ 39098 │ +│ \xD0\xA2\xD0\xB5\xD0\xBF\xD0\xBB\xD0\xBE\xD1\x81\xD0\xBA\xD1\x83 \xD0\xBD\xD0\x... │ 23123 │ +│ Dave and Hotpoint sport \xE2\x80\x93 \xD1\x81\xD0\xB0\xD0\xBC\xD1\x8B\xD0\xB5 \... │ 14329 │ +│ AUTO.ria.ua \xE2\x84\xA2 - \xD0\x90\xD0\xBF\xD0\xBF\xD0\xB5\xD1\x80 │ 14053 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA (\xD0\xA0\xD0\... │ 13912 │ +│ OWAProfessign), \xD0\xBF\xD1\x80\xD0\xBE\xD0\xB4\xD0\xB0\xD1\x82\xD1\x8C │ 10919 │ +│ \xD0\xA2\xD1\x80\xD1\x83\xD1\x81\xD0\xB8 - \xD0\xA8\xD0\xBE\xD1\x83\xD0\xB1\xD0... │ 10157 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 1.461 user 1.320000 sys 0.108000 +D AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 7479 │ +│ http://aliningrad │ 4791 │ +│ http://ekburg.irr.ru%2Fpuloveplanet │ 3584 │ +│ http://smeshariki.ru/obucheyelants │ 3064 │ +│ http://video.yandex.php │ 2887 │ +│ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 1084 │ +│ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 891 │ +│ http://afisha.yandex.ru/index │ 855 │ +│ http://sslow_13507.html?aspx?naId=6HS │ 521 │ +│ http://wildberrior/uphold │ 484 │ +│ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 289 │ +│ http://obninsk/detail │ 241 │ +│ http://diary.ru/forum/intries │ 208 │ +│ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 185 │ +│ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 185 │ +│ http://kurort/SINA, ADRIAN │ 157 │ +│ http://afisha.yandex.ru │ 132 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 124 │ +│ http://ssl.hurra.com/iframe │ 123 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 119 │ +│ http://stars-visa.html_params%3Drhost%3Dad.adriver.ru/catalog.php │ 105 │ +│ http://komme%2F27.0.1453.116 │ 83 │ +│ http://pogoda.yandex │ 80 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 79 │ +│ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 73 │ +│ http://video.yandex │ 71 │ +│ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 68 │ +│ http://wildberries.ru/daily │ 68 │ +│ http://smeshariki.ru/ru/index.ru%26bid │ 68 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 64 │ +│ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 64 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn │ 63 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 59 │ +│ http://sslow_135000008&position=search │ 58 │ +│ http:%2F%2Fwwwwww.bonprix.ru/topic │ 53 │ +│ http://sslow_13507.html/articles │ 52 │ +│ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 51 │ +│ http://rsdn.ru/rss.ya.ru/catalog │ 51 │ +│ http://ekburg.irr.ru/#lingvo │ 46 │ +│ http://pogoda.yandex.ru │ 45 │ +│ http://sslow_13500000%26rnd%3D2788881.html │ 44 │ +│ http://maps#ru_5_ru_22106.377648194,975924][to]=&int[14270pa106&op_uid=17759/6#... │ 42 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 37 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 37 │ +│ http://video.yandex.ru/film/46351/frl-2/bage │ 36 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 35 │ +│ http://direct.yandex │ 34 │ +│ http://sslow_13507.html?aspx?naId=3X_3bhLcs3M │ 33 │ +│ http://gotovim-doma │ 32 │ +│ http://che.ru/produkty_zarubezhei-niepochekhly │ 31 │ +│ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 30 │ +│ http://video.yandex.ru/Newsletter │ 29 │ +│ http://sslow_13507.html?aspx?naId=6D8IzMGys3M │ 29 │ +│ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ http://video.yandex.ru │ 28 │ +│ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 28 │ +│ http://notes=1/currency │ 27 │ +│ http://sslow_13507.html?aspx?naId=649&state/out-of-town=\xD0\xA5\xD0\xB0\xD0\xB... │ 27 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 26 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 26 │ +│ http:%2F%2Fwwww.bonprix.ru/tambov │ 24 │ +│ http://kinopoisk.ru/shoppich.ru/search?clid │ 24 │ +│ http://wildberries │ 23 │ +│ http:%2F%2Fwwwwww.bonprix.ru/searchAutoSearch?text=\xD0\xB2\xD0\xB5\xD0\xBB\xD0... │ 22 │ +│ http://myloveplanet │ 20 │ +│ http://stars-visa-litraj.txt","lpu":"http://pogoda │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/secondary │ 20 │ +│ http://msuzie-shop/premiery-c-38208_2.html │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 20 │ +│ http://smeshariki │ 19 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 19 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ http://irr.ru/6323%26bn%3D27888895,96772,97436 │ 18 │ +│ http://kinopoisk.ru │ 18 │ +│ http://nepogoda.yandex.ru%2Fproducts/search?text=subscripts/busineshop │ 17 │ +│ http://wildberries.ru │ 17 │ +│ http://kinopoisk.ru/catalog/9902224 │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://direct.yandex.html │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 17 │ +│ http://irr.ru/6323%26bn%3D27888895,963095425 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 16 │ +│ http://afisha.yandex.php?gidcar=36281664 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://auto.ria.ua/search │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://direct │ 15 │ +│ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ http://irr.ru/index.php?showalbum/login-kupalnaya-obl │ 15 │ +│ http://kinopoisk.ru/odessya │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 14 │ +│ http://ekburg.irr.irr.ru/maker │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.yandex │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.mail/rnd=0.9788 │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://auto_many_to_auto.ria.ua/igrush43/ │ 13 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 13 │ +│ http://afisha.yandex.ru/cars │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 13 │ +│ http://love.ru/a-myprofi │ 13 │ +│ http: │ 13 │ +│ http:%2F%2Fwww.bonprix │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://real-estate/aparther/offiliates/corruption/russinsk │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://on-online=on&accetti │ 12 │ +│ http://samara.irr.html5/v12/?from]= │ 12 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 12 │ +│ http://en.lyrsenses/zamba_zaborah_coldplay=1&gearbox │ 12 │ +│ http://kinopoisk.ru/saledParams │ 12 │ +│ http://zvukovo/hondar/2007&state/renlew/rigma.ru/scribed │ 12 │ +│ http://pogoda.yandex.php?SECTION │ 12 │ +│ http://msk/platia-nashing/vanny.diary.ru/moscow │ 12 │ +│ http://video.yandex.ru/GameMain.E6smreQhiu_hXR4&where=all&film │ 12 │ +│ http://news/6483731559676/Unlocknotebooks/m83/800_D_Black_list │ 11 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 11 │ +│ http://nizhnieiene/p17378705/currency=1&with_photo-ideapadeno │ 11 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty/photo-12/#imag... │ 11 │ +│ http://msk/platia-nashing/vanny.diary.ru/sale/liver │ 11 │ +│ http://video.yandex.ru/GameMain.aspx#location │ 11 │ +│ http://guid=6&pw=6&pv=13 │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 11 │ +│ http://wildberries.ru/rost.html?1 │ 11 │ +│ http://smeshariki.ru/?win=82&stat=1&page/196264&pt │ 11 │ +│ http://pogoda.yandex.ru/catalog/jokers │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 11 │ +│ http://en.lyrsenses/zamba_zabudtrimazok.html?page=12&prr=http://fap1.adrive_typ... │ 11 │ +│ http://bonprix.ru%26bid │ 11 │ +│ http://loveplanet.ru/GameMain │ 10 │ +│ http://bdsmpeople.ru │ 10 │ +│ http://video.yandex.ru&pvid │ 10 │ +│ http://liver.ru/cheboksicily/foto.aspx?sort=newly&trafkey │ 10 │ +│ http:%2F%2F%2Fwwww.bonprix │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 10 │ +│ http://club.ru/spokoiteli/photo37775280000 │ 10 │ +│ http:%2F%2Fwwww.bonprix │ 10 │ +│ http://auto_id=240&n=13901038 │ 10 │ +│ http://smeshariki.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 10 │ +│ http://slovariant_new3077940810/detail │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://en.lyrsenses/zamba_zabor_id=1012_blank%26site │ 10 │ +│ http://sslow_13500000%26rnd%3D2788881.html?parts/passe │ 10 │ +│ http://pogoda.html%3Fhtml_params%3Drhost%3D43 │ 10 │ +│ http://irr.ru/index.php?showalbum/logout%26verstova.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://pogoda.yandex.php │ 9 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film/6781203.html?id=242037047/detai... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://mysw.info/blog/sankt-peter%3D1216/00001216629 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://e96.ru/albumfotok-15-fotki │ 9 │ +│ http://alpari.yandex.html?html_param=0&users/#page/Search/ab_dob%2Ffieiie-razvo... │ 9 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://bonprix.ru/catalog/8570/1006790 │ 9 │ +│ http://b2b.testered/main/discuss/matched_country=-1&top=0&cityid=1024&wi=1366&o... │ 9 │ +│ http://svpressa.ru/topic=17082630 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://bonprix.ru │ 9 │ +│ http:%2F%2Fwwww.bonprix.ru/filmId=8j5j97LRs3M&where=all&sources │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/#win_13.html_p... │ 9 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/4744089758 │ 9 │ +│ http://nail=Yes&target=search │ 9 │ +│ http://rlsnet.ru/vacancy/view_type_id=9677548268010367 │ 9 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_produkty%2F&sr=http://slovaria │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/imagecache/wm/2013&where=all&filmId │ 8 │ +│ https://m.myloveplanet.ru/forum/abrika-kobelenie_nebestsenal │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 8 │ +│ http://zapchast.com/iframe-owa.html?1=1&cid=577&oki=1&op │ 8 │ +│ http://afisha.yandex.php?t=141880517 │ 8 │ +│ http://poisk.ru/price_ot=&price_ot=&price │ 8 │ +│ http://zarplata.ru/velika_all=\xD0\xBE\xD1\x82 │ 8 │ +│ http:%2F%2Fwwwwww.bonprix.ru/news/222974895&op │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://fore=3&marka=0&top=0 │ 8 │ +│ http://video.yandex.ru&xdm_p=1#item/search │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96777&oki │ 8 │ +│ http://direct.yandex.ru/catalog │ 8 │ +│ http://zarplata.ru/?p=12977-B26358/currency=RUR/page=1080&wi=1024&lo=http://rzh... │ 8 │ +│ http://en.lyrsenses/zamba_zabor/bedroomolsk │ 8 │ +│ http://masterh4.adriver.yandex │ 8 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 8 │ +│ http://mastered/main.aspx#location=1&bc=3&ct=1&pr=60322056107100919/page5/?_h=s... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ==&page_avtomodules.php?f=100&ref... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96779/87 │ 8 │ +│ http://omsk.mlsn.ru │ 8 │ +│ http://che.ru&pvid=13733142835/100/topic,5240556895&ch=UTF-8&sF=11,7,7,0 │ 8 │ +│ http://smeshariki.ru/GameMain │ 8 │ +│ http://wildberries.xml?from]=&input │ 8 │ +│ http://afisha.yandex.php?gidcar=367108851%2Fr%2F1 │ 8 │ +│ http://love.ru/?p=17059 │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://irr.ru/index.php?showalbum/login-kupit-topy%2Fplatjie-gotovlexandex.html... │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 8 │ +│ http://auto.ria.ua/auto_id=24126629/0/index.ru/real-estate/out │ 8 │ +│ http://victor?page_type=city.stol-yar.ru/cars │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://video.yandex.ru%2F&sr=http://loveplants/65398f55 │ 7 │ +│ http://kinopoisk.ru/ch/feed/letniaiaprice/1609 │ 7 │ +│ http://real-estate/aparts/Aquarevski │ 7 │ +│ http://bonprix.ru/social/product_id │ 7 │ +│ http://video.yandex.ru/a-album/login-vitiju/photo │ 7 │ +│ http://moscow/detail/5552/0/2792834&m=111,7,7,5 │ 7 │ +│ http://irr.ru/Registered/main/topnewsru.com/page=6 │ 7 │ +│ http://irr.ru/index.php?showalbum/login-kapustics?sort=pogoda.yandex.ru%26bt%3D... │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 7 │ +│ http://bonprix.ru/catalog/8570/14139489 │ 7 │ +│ http://afisha.yandex.ru/\xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB0/\xD0\x91\xD0\xA1\xD0\x... │ 7 │ +│ http://irr.htm?from]=&int[85][from]=&input_vsegodnyie │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://love.ru/?p=1#country=&op_seo │ 7 │ +│ http://bdsmpeople.ru/niktory/shtory/308/roomed.ru/p59473682740295 │ 7 │ +│ http:%2F%2Fwwwww.bonprix │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 7 │ +│ http://myloveplantrackIt?tid │ 7 │ +│ http://spb/event=big&marka=84&model=0&auto_id=0&s_yers=0&pv=10&can_be_check_PP │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 7 │ +│ http://irr.ru/index.php?showalbum/login-a-5-advert27114 │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://pogoda.yandex.ru&pvid=1 │ 7 │ +│ http://bdsmpeople │ 7 │ +│ http://video=0&is_hot │ 7 │ +│ http://irr.ru/index.php?showalbum/login-zk34/pages/0001216629 │ 7 │ +│ http://svpressa.ru │ 7 │ +│ http://money.yandex │ 7 │ +│ http://gotovim-doma.ru │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 7 │ +│ http://afisha │ 7 │ +│ http://video.yandex.ru%2Fkategory_id │ 6 │ +│ │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://omsk/evential/house.ru/catalog/kitchedule=213-606361653965283 │ 6 │ +│ http://video.yandex.ru/ekt │ 6 │ +│ http://afisha.yandex.ru%2F%2Fmail/169 │ 6 │ +│ http://love.ru/?p=1#country=-1&sq_liver.ru/kyrgyzstan │ 6 │ +│ http://stars-varenok.ru/16745959680706/800_0.jpeg.html%3Fhtml5/v123593 │ 6 │ +│ http://afisha.yandex.ru/catalog=on │ 6 │ +│ http://bdsmpeople.ru/film/64544.690022.rar.html_params%3Drhost%3D_black_list=0&... │ 6 │ +│ http://bdsmpeople.ru/GameMain │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://v102.ru/investate/apartments-sale │ 6 │ +│ http://video.yandex.ru/GameMain.aspx#location/page_type=category │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://direct.yandex.ru/refererprofile%2F2.10 │ 6 │ +│ http://video.yandex.ru/a-topy │ 6 │ +│ http://omsk/evential/housession%3D0 │ 6 │ +│ http://afisha.yandex.ru%26bt%3D43%26anbietersburg │ 6 │ +│ http://wildberries.ru/search │ 6 │ +│ http://moscow/details │ 6 │ +│ http://smeshariki.ru/world/photofider_credit=0&view │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://rukodel=0&sort=newly&trafkey=2750 │ 6 │ +│ http://irr.ru/index.php?showalbum/login-12.html%26custom │ 6 │ +│ http://novosibirsk.irr.ru%26bid │ 6 │ +│ http://solutions.diary.ru/realtitroenie_v_jurman.ru/albums/frame-owa.html?stric... │ 6 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 6 │ +│ http://mr7.ru/newsru.com/iframe_right%3D43 │ 6 │ +│ http://smeshariki.ru/catalog │ 6 │ +│ http://edp2.adriver.ru/hocketshop.ru/moscow/detailanude │ 6 │ +│ http://autodoc.ru/real-estate/apart │ 6 │ +│ http://povari.yandex.ru/greecondary/Products_id=&auto_vaz_2111 │ 6 │ +│ http://msk/platia-nashing/vantralitsa_transion │ 6 │ +│ http://ereal-estate/rent │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://3dnewsru.com/iframe_right.html?1=1&cid=51538 │ 6 │ +│ http://novo/detail.aspx?group_cod_1s │ 6 │ +│ http://video.yandex.ru/catalog │ 6 │ +│ http://afisha.yandex.php/board,39.04839 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://auto_hyundai_sarator │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://kalininmyclonus1 │ 6 │ +│ http://forum/topnews/22294&op_category │ 6 │ +│ http://bdsmpeople.ru/saledParams=rhost%3D43%26bid%3D1 │ 6 │ +│ http://love.ru/?p=17055335 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://afisha.yandex.ru/mymail.php │ 6 │ +│ http://real-estate=week/page=1&expand_search?film/298677435615.html │ 6 │ +│ http://kinel-lab.com/rus/20130709_117485994,93304&op_seo_entry=1&gearbox=0&type... │ 6 │ +│ http://video=0&with_exchangeType │ 6 │ +│ http://afisha.yandex.ru/index.ru/recipe │ 6 │ +│ http://koolinar.ru/port.ru/doc │ 6 │ +│ http://diary.ru/exp?sid=3205 │ 6 │ +│ http://video.yandex.php?search?text=\xD0\x9A\xD0\xBE\xD0\xBD\xD1\x8C\xD1\x8F\xD... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ https://slovakia-600dd903c07022,101595,91194&op_seo_entry │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://video.yandex.php?from]=&interapy-wkti/ &cd │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D8393224 │ 6 │ +│ http://love.ru/ru/irk/event/search/ │ 6 │ +│ http://kinopoisk.ru/catalog │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 5 │ +│ http://barnaul/details/?cauth │ 5 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD0\xB5\xD1\x80&where=... │ 5 │ +│ http://auto_volkswagen/vologdano/il_dlya-dnevka.ru │ 5 │ +│ http://zvukovo-gorodsk │ 5 │ +│ http://metal-lodku-Obzor │ 5 │ +│ http://sp-mamrostova │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://tp66.ru/exp?sid=3860217/rooms=2/men.aspx#location%3D0%26rnd │ 5 │ +│ http://video.yandex.by/?state_id=&auth=1..630;IC,7711588 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://rmnt.ru/search/offilia_Sovetov_living_chamber/?78142 │ 5 │ +│ http://e96.ru/movies/614418821/artir.ua/search │ 5 │ +│ http:%2F%2Fwwww.bonprix.ru/?id=2013&where=all&filmId │ 5 │ +│ http://slovari.yandex.ru%26orderovskij-index.ru │ 5 │ +│ http://tks.ru/cat/publish-cherkalnaya-ttpodporyadushek │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://povari.yandex │ 5 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_seo_entry=&op_category_... │ 5 │ +│ http://video.yandex.ru/GameMain.aspx?Link │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://slovarenok.com │ 5 │ +│ http://auto.ria.ua/auto_id=241269.html?1=1&cid=2127970 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://en.lyrsenses/zamba_zaborah_chamberk │ 5 │ +│ http://radio&planet.ru/work.ru/catalog │ 5 │ +│ http://slovari.yandex │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://afisha.yandex.php?r=23436303135353.html?1 │ 5 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 40007&pt │ 5 │ +│ http://auto_volkswagen-Palities/horobki │ 5 │ +│ http://rustnye-sht-riemnikoi │ 5 │ +│ http://pogoda.yandex.php?gidcar │ 5 │ +│ http://bibidohertki-i-OOOO_REPORT/07_2013 │ 5 │ +│ http://sslow_135000008&position=search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 5 │ +│ http://myloveplanet.ru/v14572&lb_id=13000001216629 │ 5 │ +│ http://topnews.ru/GameMain.aspx?group_cod_1s=1983&pt=b&pd=9&pw=0 │ 5 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://avtomobile/motory.ru/comp.ru/view.php │ 5 │ +│ http://real-estate=week&m=Dvigenie.html?option │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://love.ru/product_id=0&po_yers=0&po_yers=2&refererro/model=1346488078722&c... │ 5 │ +│ http://autodoc.ru/moscow │ 5 │ +│ http://video.yandex.ru/firms.turizm │ 5 │ +│ http://video.yandex.ru%2FkategoriendflowerTo=&powerTo= │ 5 │ +│ http://loveplanet.ru/mymail/rudi │ 5 │ +│ http://auto.ria.ua/auto │ 5 │ +│ http://msk/platia-nashing/vannyie-product_id=1841&page2 │ 5 │ +│ http://auto.ria.ua │ 5 │ +│ http://club.ru/cinema/movies/no-pos │ 5 │ +│ http://tks.ru/cat/publish-chemec.ru/search?filmId=CktclMBmUXI │ 5 │ +│ http://direct.yandex.ru/index │ 5 │ +│ http://nizhnieiewva88/photo/101246465376&cmd=show-to-buchaiev-pugache=51db32a68... │ 5 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D158197%26width │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://kinopoisk.ru/spb.pulscen.ru/exp?sid=3159&op_category_id=&auth=0&checked=... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://holodilnik-rp-ploschaya-obuv/?ci=1280&with_video=0&choosOyg==&op_uid=111... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://wildberries.ru/real │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://slovariant_neu%3D1%26bid%3D1216/0001216629%26bt%3Dad │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://md.mirkovskaya-obl.irr.ru/jobinmoscow │ 5 │ +│ http://wildberrior/kia/ │ 5 │ +│ http://en.lyrsense.com/obshchin-idieiala │ 5 │ +│ http://povari.yandex.php?showalbum/login.pl?cl=all&film/497794,90458 │ 5 │ +│ http://loveplanet.ru/\xD0\xB0\xD1\x80\xD0\xBE\xD0\xBC/curre-ap-i-showalbum/loui... │ 5 │ +│ http://jcmotorom-921205&bt=7 │ 5 │ +│ http://smeshariki.ru/topic │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://moscow/detail/Torgovuyu-organske.ru/real-estate │ 5 │ +│ http:%2F%2Fwww.bonprix.ru │ 5 │ +│ http://gaylyU │ 5 │ +│ http://video.yandex.ru%26bt%3Dad.adriver.ru/recipe/view/10217/?from │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://loveplanet.ru │ 5 │ +│ http://alib.mist.html%26custom%3D%26c2%3D278888592138 │ 5 │ +│ http://alpari.ru/gallery/pic845274 │ 5 │ +│ http://loveplanet │ 4 │ +│ http://video.yandex.ru/price │ 4 │ +│ http://whoyougle.ru/images/images/00000i/specifiers.ru/image=1&furniture │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 4 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://video.yandex.ua │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/filmId │ 4 │ +│ http://loveche.html │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://samarskii_krai/tuapse/detail/result.aspx │ 4 │ +│ http://sslovarenok.ru │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://irr.ru/index.php?showalbum/login-10618968476372773 │ 4 │ +│ http://afisha.yandex.ru/zoom.php?f=5162613838.html_partments │ 4 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 4 │ +│ http://bdsmpeople.ru/Web/Pages=1/feedsmag.ru/~\xD0\xBA\xD0\xBD\xD0\xB8\xD0\xB3\... │ 4 │ +│ http://auto.ria.ua/auto_id=0 │ 4 │ +│ http://wildberries.ru/catalog │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://diary.ru/catalog=on&input_city[3 │ 4 │ +│ http://echoradar-s-Levoshcha │ 4 │ +│ http://radio&planet.ru/marka=62&model=1178128455&pvno=2&evlg=VC,5 │ 4 │ +│ http://direct.yandex.php?formsof(INFLECTION_ID=30861/14365-4b11&state/apartment... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://afisha.yandex.ru%252f7769%252fe │ 4 │ +│ http://e96.ru/news/39733/page2=&input_sponsor=&o=1015219.html_partments-sale&pa... │ 4 │ +│ http://love.ru/?p=1#countpage/vacancies/events/738/0/3/women.aspx │ 4 │ +│ http://travel.ru/state/apartments-sale/rashinitit%2F537 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://rasp.pl?cmd │ 4 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://kinopoisk.ru/saledParams%3Drhost%3Dad.adriver.ru/GameMain.aspx#location │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ https://smeshariki.ru/cinema/article10363136000001216629%26site_offilia_Sovets.... │ 4 │ +│ http://afisha.yandex.php?r=3&bs=&day │ 4 │ +│ http://auto.ria.ua/auto_id=63799.html_params │ 4 │ +│ http://video.yandex.php?view_type=2&driveresult.ru/replies │ 4 │ +│ http://ssl.hurranovskaya-ul-31-foto.ria │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboy07/... │ 4 │ +│ http://card/windows)&bL=ru&cE │ 4 │ +│ http://kniga.ru/view=\xD0\xA1\xD1\x82\xD0\xB0\xD0\xB2\xD1\x80\xD0\xBE\xD0\xB2&w... │ 4 │ +│ http://guid=6&pw=2&pv=0&price_do=¤cy=1 │ 4 │ +│ http://vkirovoe-tourisma │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://smeshariki.ru/domchelkakh_location=search?text=\xD0\xBC\xD0\xB8vents │ 4 │ +│ http://smeshariki.ru/search/keukeru-soft │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://video.yandex.ru/GameMain.XYyZwYXRoPWEtbG9nb24vcG90Cw │ 4 │ +│ http://zarplata.ru/?p=12977-B26358/hasimages=1/page │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://tks.ru/cat/publish-chernyjbelyj-9375966238&op_categoriya │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/real │ 4 │ +│ http://matched_car=373838928155755775482794,9453.116 Safari%2F537.36&he=10&s_ye... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://afisha.yandex.ru/search │ 4 │ +│ http://video.yandex.ru/GameMain.aspx#location-4.0.html │ 4 │ +│ https:%2F%2Fwwww.yandex.ru │ 4 │ +│ http://v102.ru/?s=Adaments-sale │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/social │ 4 │ +│ http://auto.ria.ua/canel_pe_mascona Hilfigeratov/153228 │ 4 │ +│ http://video.yandex.ru%26target=search/ab_area=categorija80119 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://nizhny novgorod │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://video.yandex.ru/realty/leaser_map=1/hasimay-2.html │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://kubikus.ru/search.php?r=4140211,1,7,7,7,7,0 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://e-kuzbass.ru/a-shop │ 4 │ +│ http://guide.travel.ru/link │ 4 │ +│ http://victorhead.php?full&dom=780067167694.0; │ 4 │ +│ http://afisha.mail.aspx#locationalOffers │ 4 │ +│ https://produkty%2Fpulove.ru/gost/?page3 │ 4 │ +│ http://fitness/building │ 4 │ +│ http://svpress_up.aspx#location[propfilter_pf[PODVAL]=&arrFilter][3463351841195... │ 4 │ +│ http:%2F%2Fwwww.bonprix.ru/real-estate/out-of-town/house │ 4 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/cart.php/cars/papago-d-plosch │ 4 │ +│ http://afishi,Mudanted-belyj-974299099/guest-id=34089.html │ 4 │ +│ http://video.yandex.ru/GameMain/dukhovyy │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadbor_sh... │ 4 │ +│ http://tks.ru/cat/public/gamemain.aspx#location │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http%3A//magnitogorod/page3/#over │ 4 │ +│ http://anketka.ru/bridget │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://nepogoda.yandex.ru/search=1&target=search=0&can_be │ 4 │ +│ http://afisha.yandex.php?action/2741920 │ 4 │ +│ http://love.ru/image=2&marka=84&model/mihailovo │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://kinopoisk.ru/searchAutoSearch=0&driver.ru/catalog/1/women.aspx#locationp... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://afisha.yandex.php?show=rlv&ru=1&expand_search │ 4 │ +│ http://love.ru/?p=1705 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://auto_s_product_name=\xD0\x9A\xD1\x80\xD1\x83\xD0\xB3\xD0\xBB\xD0\xBE\xD0... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://rsdn.ru/details_103514,154;IC │ 4 │ +│ http://afisha.yandex.php?p=31&input │ 4 │ +│ http://loveche.ru/job/1162323&PAGEN_1=30&state │ 4 │ +│ http://video.yandex.ru/If yours.avtogsm.ru/animals/calculate │ 4 │ +│ http://ssl.hurra.com │ 4 │ +│ http://auto_volkswagen_cated_cartovskaya-obl.irr.ru/album/login │ 4 │ +│ http://pogoda.yandex.ru/cooking_sm5_1148786993ab-417/photo/69363/26#formi.ru/co... │ 4 │ +│ http://internet Explorer&aV=5.0 (Windows)&bL=en │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboyzon... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/topnews.ru/lanas-advert2713][to]=&int │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http%3A//edp1.adriverys/forum/view_type=city&custom=0&damages/0001216629%26bid%... │ 4 │ +│ http://inspelishchin-platjie-doma.ru/irkutsk.irr.ru │ 4 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD1\x82\xD0\xBE\xD1\x8... │ 4 │ +│ http://auto_volkswagen_pass_1161967 │ 4 │ +│ http://auto_id=0&with_photo │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://en.lyrsenses/zamba_zabudka/photo-1/#page=0&sale/search?text=\xD0\x9C\xD0... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://b.kavanga.ru/?a=inneVolumeFrom │ 4 │ +│ http://afisha.yandex.ru/content2.adriver │ 4 │ +│ http://smeshariki.ru/saint-petersburg-gorod/transfer/?id=7576149959760994861&op... │ 4 │ +│ http://arma/frl-4/transportnoy-kv-m-malchik.ru/show │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://irr.htm?from]=&int[1151;IC,112 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/GameMain │ 4 │ +│ http://afisha.yandex.ru&pvid=13733424 │ 4 │ +│ http://tp66.ru/money.yandex.ru/albums_screenterval │ 4 │ +│ http://bdsmpeople.ru/film/64544.690078 │ 4 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_category_id=592b9e01c48ce9403%26bn%3D0%2... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://banantikov-nadushenie_orleona_server=sc.cheloveplant_11612/page │ 3 │ +│ http://irr.kz/realty/lease/3516093&pvno=2&evlg │ 3 │ +│ https://produkty%2Fplatjie-kuzbass.ru/newsru.com/iframe_right=0&auto_ria=0&meta... │ 3 │ +│ http://fuckfind=rent/view/2021/3 │ 3 │ +│ https://orenburg/?arrFiltersburg │ 3 │ +│ http://kinopoisk.ru/service.ru/iframe │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://radiorecord.ru/login-m3w.html?1=1&cid │ 3 │ +│ http://video.yandex.ru%2Fplata.ru/ch │ 3 │ +│ http://romar/events/audio.ru/widget[]=vacancies/99.php?gidcar │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://afisha.yandex.php/topic104780204&op_uid=1954 │ 3 │ +│ http://afisha.yandex.php/tova.ru/uliya2076789599305953 │ 3 │ +│ http://afisha.yandex.ua/donetsk/urals │ 3 │ +│ http://afisha.yandex.ru/a-folders/misc │ 3 │ +│ http://afisha.yandex.ru/shop.ru/malta │ 3 │ +│ http://afisha.yandex.ru/project_price=&maxprice │ 3 │ +│ http://afisha.yandex.ru/kategoriya%2F5.0 (company │ 3 │ +│ http://afisha.yandex.ru/linkvac.php/board.php?topicseeng │ 3 │ +│ http://samara.irr.ru%2Fproduct │ 3 │ +│ http://radioscannerica/filmId=Ba_id=13733568414&city=\xD0\x9C\xD0\xBE\xD1\x81\x... │ 3 │ +│ http://kaluga/?ext=\xD0\xB3\xD0\xB5\xD1\x80\xD0\xBE\xD1\x8F\xD1\x82\xD0\xBD\xD1... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://sp-money.yandex.ru │ 3 │ +│ http://wildberrior/bedroom]=&int[17][to]=&int[858 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://love.qip.ru │ 3 │ +│ http://sp-money.yandex.ru/work rushki-sien-natalog/8570/page=0&expand │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://ssl.hurral=messages │ 3 │ +│ http://forum/topnews/2229605699574.html?1=1 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://afisha.yandex.ru/forum.materinburg │ 3 │ +│ http://afisha.yandex.php?addriver.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://video.yandex.by/search/?target%3D43%26bid%3D2 │ 3 │ +│ http://video.yandex.ru&pvid=13735/?_h │ 3 │ +│ https://slovakia-600dd903c06c999c226647639.html%3Fhtml │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category_id=0&wi=16000&... │ 3 │ +│ http://love.ru/forum.cofe.ru/forum/view_type=city=790&Selectronics-technik │ 3 │ +│ http://astrobank.ru/image │ 3 │ +│ http://auto_kia_30 │ 3 │ +│ https://slovakia-600dd903c07022,101595,9143531427800648_elit │ 3 │ +│ http://direct&sortdirect.yandex.ru/imagesize%3D0%26ar │ 3 │ +│ http://sp-mamrostokonkursovet │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://rmnt.ru/stars │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://edp2.adriver.ru/catalog/181 │ 3 │ +│ http://bdsmpeople.ru/search │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://b.kavanga.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://video.yandex.ru/circle&state/out-of-town/houses │ 3 │ +│ http://rmnt.ru/film/88677/russia/rio.ru/search?filmId=NNr6aJrm4s3M │ 3 │ +│ http://video.yandex.ua/auto_id │ 3 │ +│ http:%2F%2Fwww.bonprix_ru}%2Fnizhniynovgorod/request-id │ 3 │ +│ http://edp2.adriver.ru/jobinmoscow/detail │ 3 │ +│ http://kazan.irr.ru/location │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://card/windows NT 6.1) AppleWebKit%2F5 │ 3 │ +│ http://tks.ru/cat/publish-chin-play.php?categoriya%2Fzhiensmed │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ https://produkty%2Fpulove.ru/voronezh-sien-zhienskaia-moda-zhienskaia-moda-zhie... │ 3 │ +│ http://svpress_w1t1042796786/6/?category │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com/iframe-owa.html?1=1&cid=577&o... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.ru/forum.donfiscategory │ 3 │ +│ http://msk/planet.ru/mymail.aspx#comme_me_saydinne │ 3 │ +│ http://radiorecord.ru/catalog/idShare │ 3 │ +│ http://pogoda.yandex.kz/family │ 3 │ +│ http://video.yandex.php?topbloveche │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://pogoda │ 3 │ +│ http://nigma.ru/product&op_category_name=\xD0\x91\xD0\xB8\xD0\xBA\xD0\xB8\xD0\x... │ 3 │ +│ http://magnitka_1_series.ru/?favorite_id=636233644&op_category_id=937514 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://ussuriysk.irr.ru/catalog/premiere/628962851d7fd0b6eb17b321d336f5bc7de189... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://smeshariki.ru/catalog/286/women.aspx │ 3 │ +│ http://svpressa.ru/content/search │ 3 │ +│ http://video_dvd/game/iframe-owa.html │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://ekategoriya%2F9B206 Safari │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountpage │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://omsk/evential/housession%3D0%26url%3D//ad.adriver.ru/link/justic/h2.php/... │ 3 │ +│ http://afisha.yandex.ru/tatatit_chto.php?industry │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/92054446660.ht... │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty%2Ftanki │ 3 │ +│ http://loveche.ru/volzhskiy │ 3 │ +│ http://svpress/showbiz/photo.htm │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://smeshariki.ru/a-phony │ 3 │ +│ http://msk/platia%2Fzhienskaia │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://povarenok.ru/files/eliteh.ru/perm.irr.ru/board,75.2013-07-09 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://smeshariki.ru/?win=82&stat=141882,373;IC,2552f48 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://e96.ru/real-estate │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://my.kp.ru/albumfoto-1/pol-2 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://amobil-nye-pliazhnaia │ 3 │ +│ http://brand=498&pvno │ 3 │ +│ http://tp66.ru/search/?page=1&fuelRateTo │ 3 │ +│ http://holodilnik.ru/catalog │ 3 │ +│ http://sp-mamrostovestory │ 3 │ +│ http://love.ru/?p=1#country=&op_seo_entry=-1&target │ 3 │ +│ http://lk.wildberries │ 3 │ +│ http://personal/atlants/7292&xdm_c │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberries.ru/item_no=2&evlg=VC,0;VL,205;IC,14;VL,757138/currency=RUR/h... │ 3 │ +│ http://product_brand=RAINBOW&op_cated_content/search/keup/en-ru │ 3 │ +│ http://smeshariki.ru/real │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://msuzie │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostavia.travel.ru/s... │ 3 │ +│ http://love.ru/recipes/indows │ 3 │ +│ http://irr.ru/index.php?showalbum/login-kupaljinik-chere │ 3 │ +│ http://3dnews.ru/?p=12636464/5#f │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic=79799398/?_h=search.htm... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://smeshariki.ru/goodavec/photo/6936325.html?id=223978/page=102 │ 3 │ +│ http://str_ob.html?1=1&choosO8gPJSs3M&where=all&filmId=mAyiC7y6M2mGV2GoA9hFoN3q... │ 3 │ +│ http://irr.ru/washek-s-printom │ 3 │ +│ http://afisha.yandex.php?app=membered │ 3 │ +│ http://afisha.yandex.php?ELEMENT_ID │ 3 │ +│ http://afisha.yandex.ru/lesyach-hotels │ 3 │ +│ http://afisha.yandex.php?id=727285 │ 3 │ +│ http://afisha.yandex.ru%26bt%3D90%26nid%3D1216629 │ 3 │ +│ http://kaluzha-na-NovletedAutoSearch=0 │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory_id=577&search/ab_district/date_id=2271][from... │ 3 │ +│ http://love.ru/ru/irk/event=little&cated_country=-192.html?1=1&cid │ 3 │ +│ http://love.ru/?p=17057 │ 3 │ +│ http://kinopoisk.ru/search │ 3 │ +│ http://state/room=94720-recept-Salat-iz-glasya1lesyat │ 3 │ +│ http://auto_id=0&engineVolumeFrom │ 3 │ +│ http://video_dvd/ratesTypeSearch?text=\xD1\x87\xD0\xB5\xD0\xBB\xD0\xBE\xD0\xB2\... │ 3 │ +│ http://povaria/chak_naytimes.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://smeshariki.ru/GameMain.aspx#location │ 3 │ +│ http://kinopoisk.ru/sessulyanovka.ru/photosessid=3205&bt │ 3 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD0\xB2\... │ 3 │ +│ http://li.ru/filmId=XpzlPj8P8gE&where=all&text=\xD1\x81\xD0\xBA\xD0\xB0\xD1\x87... │ 3 │ +│ http://soft.oszone.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://you_hashkaf.ua/search │ 3 │ +│ http://auto_repairs=0&po_yers=0&price.ru/\xD0\xB6\xD0\xB5\xD0\xBB\xD0\xB5\xD0\x... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://auto_repairs=0&confiscategoriya │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://afisha.yandex.ru%2Fobuv-sapozhkivka=23&price │ 3 │ +│ http://afisha.yandex.ru/hotel-agen-Goluboj-9730 │ 3 │ +│ http://notebooking pressa │ 3 │ +│ http://pogoda.yandex.ru/real-estate │ 3 │ +│ http://wildberries.ru/GameMain │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://afisha.yandex.ru/comment/search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 3 │ +│ http://wildberries.ru/basket&ch │ 3 │ +│ http://video.yandex.ru/personal/offeebe34c7e12944&op_product │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/photo/narod.irr.ru/katering=1&pr=569&s_yers │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://slovari.yandex.ru │ 3 │ +│ http://dom.net/provoe-pervouralnaya/ChildGluZ19oZXJlci1kYXRpb25zPU4mbj0zJmlkPTM... │ 3 │ +│ http://video.yandex.ru/extra │ 3 │ +│ http://afishers/story │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://guid=6&pw=2&pv=0&with_video.yandex.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com.ua/kiev/detail.ru/auth=1..640... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://trashbox.ru/book │ 3 │ +│ http://audio_video.yandex.ru/mosday.html?item=4#photo446962 │ 3 │ +│ http://auto_ford Mix).mp3.ucoz.ru/v1430497.html%3Fhtml │ 3 │ +│ http://v102.ru/investate/apartment/?id=137336IseNhcbx3J85GkHSnzgnsPdZUU&where=a... │ 3 │ +│ http://kommersantamina │ 3 │ +│ https://slovarenok │ 3 │ +│ http://pogoda.yandex.ru/vlas-moskovskaya │ 3 │ +│ http://alpari.yandex.ru/saint-petersburg.irr.ru/cars/page3 │ 3 │ +│ http://love.ru/ru/irk/event=little&category_id=731-643736&mode=1 │ 3 │ +│ http://bdsmpeople.ru/show/39932/Itemid,40.0.html_params%3DfsSaHR0cDovL2pzLnNtaT... │ 3 │ +│ http://radiorecord │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://en.lyrsenses/zamba_zabor_polnitsa-s.narod.irr.ru/bank/otzyvy/12031%2F%23... │ 3 │ +│ http://video.yandex.ru%2Fkategory_id=9759527418 │ 3 │ +│ http://state_shariki │ 3 │ +│ http://smeshariki.ru/cgi-bin/click.cgi%3Fsid%3D0%26pz │ 3 │ +│ http://loveplanet.ru/Bezli-all │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://kinopoisk.ru/spb.pulscen.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://omsk/evential/housession%3D240%26rleurl%3D//ad.adriver.ru/marshavskaya-r... │ 3 │ +│ http://wildberries.ru/cgi-bin/click.cgi%3Fsize │ 3 │ +│ http://afisha.yandex.php?partments │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://video.yandex.ru/real-estate/out-of-town/house.ru&pvid=1&distreet_legkovo... │ 3 │ +│ http://kinopoisk.ru/registernet Explorer&aV=5.0 (Windows NT 5.1; ru-ru&cE=true&... │ 3 │ +│ http://auto_id=0&color=0&confiscategory_id=3205&bt=7&bn=1&bc=3&ct=1&prr=http:%2... │ 3 │ +│ http://video │ 3 │ +│ http://balcon_caddy Club relove │ 3 │ +│ http://wildberring │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http:%2F%2Fwww.bonprix.ru/imagesize │ 3 │ +│ http://video.yandex.ru/realty/search/main.aspx?sort=popular │ 3 │ +│ http://un1.adriver.ru/page=30138117749516%252f110916%252fmedicinema/movie_ross ... │ 3 │ +│ http://afisha.yandex.ru/manga.ru/?rtext=\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB1\xD0\xB... │ 3 │ +│ http://myloveplanet.ru/passenger/kitched_country_id=4312&input │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://cxem.net/324487194836848 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://saint-peter │ 3 │ +│ http://klubnich/zrh/ │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://ssl.hurra.com/iframe-owa │ 3 │ +│ http://wildberries.ru/comme%2F2.12.388 Version/1552/page │ 3 │ +│ http://wildberries.ru/comment/search │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://sunmar.ru/cart&ch=utf-8&sF=11,7,700&aN=Opera&aV=9.80 (Windows │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&film/67... │ 3 │ +│ http://smeshariki.ru/furniture.html5 │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://saint-petersburg-gorod/goodal │ 3 │ +│ http://lazarevskoe │ 3 │ +│ http://whoyougle.com/iframe/iframe_right.ru/spb │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_product_brand=4200&lo=h... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://jobs-education │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://pogoda.yandex.ua/telefon_shtukaturkey │ 3 │ +│ http://irr.ru/index.php?showalbum/logizer8/num-1/refremost │ 3 │ +│ http://video_dvd/suppoll/dleead6718.php?SECTION │ 3 │ +│ http://gotovim-doma.ru/personal/commersant.ru/image=19&pvno=2&engineVolum │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://bdsmpeople.ru/index.by/ru/page=0&confiscategory_id │ 3 │ +│ http://krasnodar.irr.ru/yaransferapid │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://afisha.yandex.php?p=176d43f96ef32d5bc1272 │ 3 │ +│ http://afisha.yandex.ru/sell/resident │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://forum/topics/ingradskazka-lookoformalities/poetry/events/?date&csrf-8200... │ 3 │ +│ http://video=0&input_with_video.yandex.ru/page/10/women.aspx │ 3 │ +│ http://radioscannerica/film/47018.html?1=1&cid=691390&pvno │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://auto_id=0&color=0&confiscategoriya%2Fzhienskaya-advert25593 │ 3 │ +│ http://pogoda.yandex.ru/real-estate/apartments/73151 │ 3 │ +│ http://msk/platia-nashing/vanny.diary.ru/otdam_daily │ 3 │ +│ http://tyva-5/country=-1&washestvo/den_sidentialAmount │ 3 │ +│ http://ssl.hurra.com/iframe/iframe-owa.html%26custom%3D%26custom │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/procoolonelopitered/ministrict/3d-probeg-340-... │ 3 │ +│ http://chehod/zvenia8312&input_who2=1&input_age1=35&aN=Netscape │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=&is... │ 3 │ +│ http://myloveplanet.ru/bad_by_sidential/nizhnieiewva88 │ 3 │ +│ http://direct.yandex.ru%2F&sr │ 3 │ +│ http://kinopoisk.ru/cgi-bin/click.cgi%3Fsid%3D1216 │ 3 │ +│ http://smeshariki.ru/news/2013/peshnye-udivlekanka.ru/l_03_00/bodreamfood.ua │ 3 │ +│ http://kinopoisk.ru/real-estate=2013-07-2089241607/photo=0&with_exchangeType │ 3 │ +│ http://mylove.ru/zoom.php?GID=2&IsOrder │ 3 │ +│ http://rsdn.ru/info_all=yes&razdumy-i-trikshop/search&_h_page/1719920 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://irr.ru/index.php?showalbum/login-do-500-kv-m-Maya │ 3 │ +│ http://rukodel=0&sort=newly&trafkey=27065/2/child.aspx#location │ 3 │ +│ http://arma/frl-4/travel.ru/moscow/details │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/used/KIA-Cee-d... │ 3 │ +│ http://maps#ru_5_ru_1_ru_ru_ru_202_ru_1_ru_ru_ru_ru_2_ru_1743.html?oscsid=36303... │ 3 │ +│ http://zapchastny_fashing_mashes/index.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://video=0&is_hot=0&che_simeis │ 3 │ +│ http://auto_operey-v-v-meha.ru/catalog/public │ 3 │ +│ http://kuharka=48&modeloveplanet │ 3 │ +│ http://whoyougle.ru/basket&ch=utf-8&sF=11,7,7,7,700 │ 3 │ +│ http://myloveplants_list-obl.irr.ru%2Fobuv-zhienskaia-modiezhda │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://zagranimals-planet.ru/user/31059&Module │ 3 │ +│ http://irr.ru/6323%26bn%3D27888895,96772&op_page47 │ 3 │ +│ http://myfashihtzu.html?1=1&cid=65625f313230303&po_yers=2013/07 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://forum/topnews/222968695,910112_1164074834-908745 │ 3 │ +│ http://smeshariki.ru/chipinfo │ 3 │ +│ http://afisha.yandex.ua/index.ru/recipe │ 3 │ +│ http://avtoto.ashx/1001087496197797217530729; Media Centernet_mastersburg │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://votpusk.ru/ │ 3 │ +│ http://video.yandex.ru%2F%2Fwww.bonprix │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://smeshariki.ru/index.ru/main.pl?cmd=show/47555 │ 3 │ +│ http://bdsmpeople.ru/Web/price │ 3 │ +│ http://sendflower │ 3 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 3 │ +│ http://afisha.mail.ru/stars/page │ 3 │ +│ http://smeshariki.ru/Web/price │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://irr.htm?from]=&int[852][to]=10&lastdiscussins/?keyworld │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stories.ru/art/MACKLEMORE │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountry │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://kurort/SP1399&op │ 3 │ +│ http://forum/topnews/2229362067528195&op_categoriya │ 3 │ +│ http://nizhnieie-bielie-bieriends&fb_source-temno │ 3 │ +│ http://afisha.yandex.php?link=114735200&brand=23368 │ 3 │ +│ http://afisha.yandex.php?w=3160/transports │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://pogoda.turizm.ru/communit=0&vip=0&order_by=2 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://wildberries.ru/page=0&vip │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://zarplata.ru/?p=1290&op_product_price=990348531&schoosOSRquM8gE&where=all... │ 3 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&top │ 3 │ +│ http://guid=6&pw=2&pv=0&po_yers=0&with_video │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://my.alpari.ru/filmId=yJg89hqV8gE&where=all&film/530/?fromCityCodeForcentr... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://radiorecord.ru │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&text=\x... │ 3 │ +│ http:%2F%2Fmuzhchine/ru-g-Chelya_v_tsentyabrskii │ 3 │ +│ http://gorbus.aspx#localiformalitic │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://ej.ru/muss/roll_to_audi/mode=replies │ 3 │ +│ http://ur.hh.ru/file/news/2013 \xD0\xB3\xD0\xBE\xD0\xB4\xD0\xB0 │ 3 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 2 │ +│ http://edp2.adrive_type=4754679564&pt=b&pd=9&price │ 2 │ +│ http://pogoda.yandex.ru/jobinmoscow │ 2 │ +│ http://auto.ria.ua/auto_auto.ria │ 2 │ +│ http://afisha.mail.ru/cheva.ru/reportby │ 2 │ +│ http://pogoda.yandex.php?t=14555667679/?PAGEN_3=5&s_yers=0&numphoto/62232/7#f │ 2 │ +│ http://wildberries<{bonprix.ru/forum.materinburg │ 2 │ +│ http://smeshariki.ru/kitched_country=-1&target= │ 2 │ +│ http://balance/#21792/guest=\xD1\x89\xD0\xB5\xD0\xBD\xD0\xBA\xD0\xBE \xD0\xB8 \... │ 2 │ +│ http://yartb.html?city=55&TopicID=2&IsOrderedProduct │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://smeshariki.ru/user_id=1&bodystyle=0&vip=&int[12][from=last_auto_id=13143... │ 2 │ +│ http://video=0&wi=1362653061306535333&site_id=&auth │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 2 │ +│ http://en.lyrsense.com/iframe-owa.html?query=2&hide_black.asp?TOPIC_ID=914958&o... │ 2 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=2furii10.html?city=0&hide │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://ur.hh.ru/page=10&can_be_checked_auto_region=1&rm=1&lang=all&film/18212.1... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://forum.php?t=420 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://mysw.info/node/21544 │ 2 │ +│ http://3dnews.ru/iva-vesta.info.php?link=114737131 │ 2 │ +│ http://guid=6&pw=2&pv=0&price=690&s_yers=1916 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://pogoda.yandex.ru/places/premiery%2Fpage=2&confiscategoriya │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://rlsnet.ru/nogin.html5/v12 │ 2 │ +│ http://spb/event=big&marka=84&model=0&auto_id=0&s_yers=0&pv=10&category_name=\x... │ 2 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD1\x81\... │ 2 │ +│ http://sslow_13500000%26rnd%3D278888 │ 2 │ +│ http://moscow/detail/Torgovljatory/storii_efferanslyatting │ 2 │ +│ http://wildberries.ru/editem_no=100¤cy=1#country=&op_proizvodskaya-obuv-z... │ 2 │ +│ http://wildberries.ru/filmId=4920/room=1&lang=all&filmId=DnGbyVQVUXI&wheretomug... │ 2 │ +│ http://video.yandex.html5/v12 │ 2 │ +│ http://loveplants/740392319 │ 2 │ +│ http://yaroslavl.irr │ 2 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 2 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 2 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 2 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 2 │ +│ http:%2F%2Fwww.bonprix.ru/search=0&deletedAutos&marketing │ 2 │ +│ http://wildberrin/foton │ 2 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 2 │ +│ http://smeshariki.ru/product&op │ 2 │ +│ http://ssl.hurra.com.ua/auto_repairs=0&page=10&category_id=detail │ 2 │ +│ http://poisk.ru/news/articles │ 2 │ +│ http://afisha.yandex.php?id=1620_4_licanel │ 2 │ +│ http://afisha.yandex.php?s=4d450&pid │ 2 │ +│ http://afisha.yandex.ru/?trafkey=54073799 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 2 │ +│ http://video.yandex.ru/rent/info/messa.ru │ 2 │ +│ http://afisha.yandex.php?city=418&view │ 2 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.415 user 0.532000 sys 0.028000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +┌────────────────┬────────────────┬─────────────┬────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ TraficSourceID │ SearchEngineID │ AdvEngineID │ src │ dst │ pageviews │ +├────────────────┼────────────────┼─────────────┼────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33069 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 24703 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 15817 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 14233 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 │ 6549 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 │ 5257 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 5257 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 3547 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login │ 3538 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik │ 3371 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php │ 3333 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 3309 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 2923 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 2616 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 2441 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php │ 2418 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 2390 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari │ 2367 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 2349 │ +│ 1 │ 0 │ 0 │ https://google.com.ua/url?sa=t&rct │ http://komme%2F27.0.1453.116 │ 2228 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 1920 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://komme%2F27.0.1453.116 │ 1679 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ekburg.irr.ru%2Fpuloveplanet │ 1340 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://aliningrad │ 1270 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1254 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1213 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1193 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1186 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1142 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F27.0.1453.116 │ 1007 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 954 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://aliningrad │ 859 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login │ 821 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 791 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 777 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 757 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 722 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://video.yandex.php │ 702 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 691 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/obucheyelants │ 684 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 632 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 593 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 577 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://smeshariki.ru/obucheyelants │ 566 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.php │ 452 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 445 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBA\xD0\xBE\xD0\xBD\xD1\x82\xD1\x80\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 422 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 421 │ +│ 0 │ 0 │ 0 │ │ http://obninsk/detail │ 407 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 386 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug.ru │ http://irr.ru/index.php │ 374 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru/index │ 360 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 348 │ +│ 2 │ 0 │ 13 │ │ http://komme%2F27.0.1453.116 │ 347 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-2011/43597 │ 293 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 293 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6HS │ 282 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 268 │ +│ 3 │ 72 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 267 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 259 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 257 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari │ 256 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 │ 241 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login │ 237 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 │ 236 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/28435&lr=157 │ http://komme%2F27.0.1453.116 │ 233 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/ru/photo/6936313555&text=\xD1\x85\xD0\xBA \xD0\xBB\xD0\xBE\xD... │ http://komme%2F27.0.1453.116 │ 224 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php │ 223 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cat/dushkirillovyj │ http://komme%2F27.0.1453.116 │ 222 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=359&op_page2/... │ 218 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kriminally-bezhevsk │ 217 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0 │ 212 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 207 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 202 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 199 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://ekburg.irr.ru%2Fpuloveplanet │ 199 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 198 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 197 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 195 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/414526863.xlsx │ 191 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CDMQFjAJ │ http://irr.ru/index.php?showalbum/login-kiriskaya-obl.irr.ru/index.ru/GameMain.... │ 190 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=0&with_photo.ashx/101/4/?cat=6257271 │ 188 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=partments-sale/search?text=\xD1\x81\xD0... │ 187 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://afisha.yandex.ru/index │ 183 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://ekburg.irr.ru%2Fpuloveplanet │ 171 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 168 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 164 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 163 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://ekburg.irr.ru%2Fpuloveplanet │ 160 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 160 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/life.ru/cars/misc/travel.ru/?trafkey=058143&p... │ 155 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 │ 154 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=577&oki=1&oby=&op_s... │ 152 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://wildberrior/uphold │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6HS │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 149 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 146 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustic/meterburg │ 144 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 144 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 144 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E │ 141 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 140 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 136 │ +│ 1 │ 0 │ 0 │ http://kombardighantnie │ http://komme%2F27.0.1453.116 │ 136 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login │ 135 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kysjacevtika │ 132 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://komme%2F27.0.1453.116 Safari │ 124 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 121 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category/stroy/dachines... │ 114 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/?state │ http://komme%2F27.0.1453.116 │ 113 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/GameMain │ http://komme%2F27.0.1453.116 │ 113 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 111 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login │ 110 │ +│ 3 │ 85 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 110 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kardigan │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 107 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosoftwarenok.ru/projects/zhbi.po... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 105 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268143.html?1=1&cid=577&o... │ 104 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 104 │ +│ 0 │ 0 │ 0 │ │ http://tvidi.ru/photo=0&confiscategory_id=0&engineVolumeFrom=&fuelRateFrom=type... │ 103 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 102 │ +│ 3 │ 14 │ 0 │ │ http://komme%2F27.0.1453.116 │ 102 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 100 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 98 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://video.yandex.php │ 97 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 96 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.21150895 │ 96 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?sort=price │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 95 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login │ 95 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.12.388 │ 93 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 93 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 92 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberrior/uphold │ 92 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 91 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-tanks/search=1&ady=62&modeloveplanet.ru │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 90 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.145332.15&he=10&category_id=2740387993 │ 89 │ +│ 1 │ 0 │ 0 │ http://in-the-weightEnd=2351&numphoto=&isExclusiver.ru/alertljus │ http://komme%2F27.0.1453.116 │ 88 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fprodazha_Italja_unit=1&av=1&nm=1&lang=ru │ http://irr.ru/index.ru/show/414526863.xlsx │ 87 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 86 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb1.html?item_no=386703/?bundle=7172&msid=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 86 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 │ 85 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 84 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733582852/ │ 84 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupit/action │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 82 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 82 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?bodystyle │ http://komme%2F27.0.1453.116 │ 81 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F22.14&he=768486 │ 81 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusk.ru/ru/lookaginitial/Prodayu-Dach... │ 80 │ +│ 3 │ 4 │ 0 │ │ http://komme%2F27.0.1453.116 │ 80 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 79 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://aliningrad │ 78 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 78 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login │ 76 │ +│ 1 │ 0 │ 0 │ https://go.1ps.ru/show&showforum │ http://komme%2F27.0.1453.116 │ 76 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandex.ru │ http://komme%2F27.0.1453.116 │ 76 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26221/detail.ru/v1496366&... │ 75 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php │ 75 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 74 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%2F&sr=http://bonprix.ru... │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len80/page/product │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filtr/all/perm.pulscen... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 73 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 73 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F1.7.1364.172 │ 72 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://diary.ru/forum/intries │ 72 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/show/414526863_112 │ 72 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2618561&pp=1059&op_produc... │ 72 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://video.yandex.php │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 71 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 71 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari │ 71 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://aliningrad │ 71 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=product_id=42&Selection.chelov.ru/searc... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/yandsearch?te... │ http://irr.ru/index.php │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/server=sc.chel.ru/main... │ http://irr.ru/index.php │ 70 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification/?year=\xD0\xB1\... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2791954~43.87725656132&op... │ 69 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://komme%2F27.0.1453.116 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/produkty/bleacs/udilis... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 69 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&wi=1366&br... │ 68 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 67 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731&CgID=124jc&where=all... │ 66 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/Yozh/Goodda │ http://komme%2F27.0.1453.116 │ 66 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2725215195&ti=\xD0\x9F\xD... │ 66 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://ekburg.irr.ru%2Fpuloveplanet │ 65 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru/index │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 64 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://afisha.yandex.ru/index │ 64 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 63 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nmg.com%2F4.0 Safari%26clients-sale/search&e... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 63 │ +│ 2 │ 13 │ 13 │ │ http://komme%2F27.0.1453.116 │ 62 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 62 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login │ 62 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://ekburg.irr.ru%2Fpuloveplanet │ 61 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 61 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 61 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26092.html?s_text=\x5C\x5... │ 59 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/thenon-houses/public/g... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27755f32316.30; .NET CLR ... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742/details/?cauth=0&dam... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fautoad/kniga.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26004/?_h=galle/\xD0\xBF\... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert27930555&sob=1&p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2692.html%3Fhtml?period=3... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/world/photo31469:Album... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=leting "HalUXI&where=\xD0\x9F\xD0\xB5\xD1\x8... │ http://irr.ru/index.php?showalbum/lofiver.ru/articles/86121%26uid%3D139750%26ad... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27000,224648804-recept-so... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/koshka.com/ig/iframe-o... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/realty/suntime-5/extre... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory=cinema.perm.p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742304][from]=&int[14670... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742357/detskii_gosts.xml... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694336/photo/suzannason/... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Forum25/top... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 57 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupit/action │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268320995,968650f45491882... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1375605&ga... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://video.yandex.php │ 56 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga/choice/... │ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_product_... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?showtopic,5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26017/quarius_Moscow/cavi... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2726125413975d77cf&search... │ 55 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 54 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266848223/review_type=pro... │ 53 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 53 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26989%26bt%3Dad.adriver.r... │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/album/login-1800002&pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 52 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0 │ 51 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2698172,93932353064614618... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605085268a9c4d61-9862.49... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19&numphoto/login=A-CL-MS-36575c72937][to]=&int[12822304 │ http://irr.ru/index.ru/widgetchrome%2F&ti=no&dom_v_bordovye-printime.ru │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/investate/comple/make/?page5/&docid=jlMNIrXw... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 50 │ +│ 0 │ 0 │ 0 │ │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 50 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F11.7.1364 │ 50 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 50 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26051.htBeg=6&NightRegist... │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xBE\xD1\x81\xD0\xB8\xD0\xB1... │ 49 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 49 │ +│ 5 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 49 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?group=days=3&text=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27410/photo-2.xhtml&serve... │ 48 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandsearch │ http://komme%2F27.0.1453.116 │ 48 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 48 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusty-i-vkont.at.ua/search=0&userId=0... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266128182&op_seo_entry/de... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?sort=&br... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/intrumen │ 46 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://afisha.yandex.ru/index │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumanegenre=33155?analog/kitchen_mini... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik │ 46 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login%2Flick.g.doubleclick.diary.ru/car/kw/3061/us... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://afisha.yandex.ru/index │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734.html_params%3Dfh_loc... │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/GameMain.p1Yo4A │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ua/searchads/jo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605906/frl-2/sportal.ru/... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fshow/lpp/cre.ru/pers... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.asp?search&ev... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logize.ru/msk/events_liver.ru/russert-plies.r... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26099486633033&countpage=... │ 44 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 43 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://sslow_135000008&position=search │ 43 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischet-solik/odezhda-plos... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert277553/38021/66936575776/... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271050&with_photo.kurortm... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 43 │ +│ 1 │ 0 │ 0 │ http://forums/liii-kuler S22oHgBJTngegotavgorod55.ru/filtr[2]=42 │ http://komme%2F27.0.1453.116 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-folders/?end=9a08488... │ http://irr.ru/index.php?showalbum/litamak.irr.ru/catalog/8570/travel.ru/cgi-bin... │ 41 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 41 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 41 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/0001216629/#top_by │ 41 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26040931&s_yers=0&with_vi... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://ekburg.irr.ru%2Fpuloveplanet │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.137508&s_yers=200... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://aliningrad │ 40 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logito8ergo_6470/page_type_id=20872/0/001:12:... │ 40 │ +│ 0 │ 0 │ 0 │ │ http://afisha.mail.ru/dmitrij │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/readar-nashi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27924563724&key=46960/med... │ 40 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://lib.ru/exp?sid=3205&bt=7&bn │ 40 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 39 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credit │ http://komme%2F27.0.1453.116 │ 38 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=8570/page=5&s_yers=2006 │ 38 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2679/detail/5482,935033/2... │ 38 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 38 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login │ 37 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dnevnoy-kv-Samara.irr.ru/searchAutos&marka=4... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 37 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://komme%2F27.0.1453.116 │ 37 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=theating&page=... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?group │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2784389/room=39695,966681... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/forum/topicID=269&stat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/votkim-rukav-i-kova-ul-adve... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wolf-club478561/OPEL | \xD0\xB0\xD0\xB2\xD1\... │ http://irr.ru/index.php?showalbum/login-marka=13&city&custom=0&damages/0001216 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filmId=xFX1UbTNJjxe4yF... │ http://irr.ru/index.php?showalbum/login.asp?razdel7/test/matched=115909d9_dsc07... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27553&s_yers=0&po_yers/46... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert275226607660?design=6efxq... │ 36 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=show=&fgroup-tab-mara.irinables/yearT... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278171&size=52094&op_seo_... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27330528/photo/6223799%26... │ 36 │ +│ 5 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://smeshariki.ru/obucheyelants │ 36 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36&he │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=post_neu%3D22%26pz%3D0%26rleurl%3D%26xp... │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 35 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/8569 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/index.ru/katego... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vip.ru/book.com/photo/7086/page=0&state=mont... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-cukickdrops_bak_yant4tlGtZgy3BQ&bvm=bv.49478... │ http://irr.ru/index.php?showalbum/login-501-98552&op_uid=1060948/6#f │ 35 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (Windows │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19&m_staraya-obl │ http://irr.ru/index.ru/show/414526863_112 │ 34 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.12.388 │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/promo=C-Tease/rent/dat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 34 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_uid=1... │ 34 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/list │ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 34 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/directadvert/kavanga_728x90.html │ http://komme%2F27.0.1453.116 │ 34 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshops.xml?typ │ http://komme%2F27.0.1453.116 │ 33 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?cPath=default.ru/yandex.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33 │ +│ 1 │ 0 │ 0 │ http://auto.ria.ua/\xD0\x9A\xD0\xBB\xD0\xB8\xD0\xBC\xD0\xB0\xD1\x82\xD1\x8C\xD1... │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 33 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://video.yandex.php │ 33 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 33 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser │ 33 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265748ba3f755671_1162684&... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertif?sle=85000 \xD0\xB4\xD0... │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364 │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/pub │ 32 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zxcvbnm1990&search/jobinmoscow.ru/yandex.by/... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements-obschaya │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fproduct/foto-4/login... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&op_category_id=1174]... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniturers_id=575386110 │ http://irr.ru/index.php?showalbum/login.exit/rem/php/board/10_kruizer_8267049&o... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiepochto_id=93231238][to... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://afisha.yandex.ru/index │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ssl.hurra.com/iframe │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischuk_Kerasivye-klavik/?... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/jobs-education/m_acces... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26791e3a7c543c9bf9ef5c0-9... │ 31 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt │ http://komme%2F27.0.1453.116 │ 31 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertificia/?letteo_985428161/... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_api.php?cid=41389/rooms/perm.pulscen.ru/sear... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 30 │ +│ 1 │ 0 │ 0 │ http://domchelov.html&lr=55&text=\xD0\xB4\xD1\x80\xD1\x83\xD0\xB3\xD0\xB8\xD0\x... │ http://komme%2F27.0.1453.116 │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoryID=12452929587/... │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 30 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 30 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268630533&site_ot=&price_... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-k608i.trashbox.ru/cars/page5/&docid=577&lr=2... │ http://irr.ru/index.php?showalbum/logii_58247.php?forum.borovichy77/page5 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2716/~3/150160947694,9745... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2696374/#page/tab=com_avt... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/products/?category_id=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 30 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.14&he=768&wi=1920 │ 30 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/topic │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605446518%2F&sr=http://e... │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26979553039353936694&ch=u... │ 30 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://smeshariki.ru/obucheyelants │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-carava/fotok-8-steklove.ru │ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26928142&op_products/view... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kupibatikov/?recrete/personal/klimat.ru/work... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_countpage/1 │ 29 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x9A\xD0\xBE\xD1\x80\xD0\xBE\xD1\... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertifications[0][150]=60&inp... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/wedditeli_foto-2/__48/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274229696.0 (Windows)&bL=... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/click.net/paged=696&lo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-14132&with_photo=1&srtime-zone.net/catalog/t... │ http://irr.ru/index.php?showalbum/login-sierra%2Fdlia-zhienskaia-moda-zhiensmed │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 29 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704.html%3Fhtml5/v12/?fr... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2664952&xdm_p=1#country=-... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734/fotographic_2017666&... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategoriya/zhienskaya-... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9649.html%3... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/small_mercial-shoppicc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27350350394&ch=UTF-8&sF=1... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_seo_entr... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-baza/gadge... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27425.3120%26ntype_id=2&r... │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 28 │ +│ 1 │ 0 │ 0 │ https://directions[0][1541769377921968 │ http://komme%2F1.7.1364.172 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert272291684/hasimage=0&view... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13733097&op_categ... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/mann japanel/?text=\xD1\x81\xD0\xBC\xD0... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269500469412216388/detail... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-my-sovies/bebybum.homestion bonprix.ru/... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikarbox=2&tz=9b81998&po_y... │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?lang=all&fi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-176-kakaya-obl.irr.ru/search?lr=191&ei=N6rrg... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\xA4\... │ 28 │ +│ 3 │ 95 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-eve-nn.ru/cars/passenger/\xD0\x92\xD0\x90\xD... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/anime-2/#album/l... │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274236&pv=15&prr=8&sid=35... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/41452626u1zIq0SGLXCI │ 28 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic/8939858-59929477/detailshop │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://ekburg.irr.ru/#lingvo │ 28 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F22.14&he=768486 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678/page=2&marka=84&mode... │ 27 │ +│ 3 │ 2 │ 0 │ │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/search?cl4url=http://yandex.ru/online... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27013.ya.ru/sportalznakom... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert24061.jpg.html%3Fhtml?1=1... │ 27 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031343-sh-898675/sort=pri... │ http://irr.ru/index.php?showalbum/login-5158&jenre/slyudya_metroman.ru/GameMain... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19195/offset=101&district=&city&with_photo=¤cy │ http://irr.ru/img/catalog/53485785/topic/8939850.php?page=3&marka=84&mm │ 27 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 27 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 27 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fhit_list.html?s... │ http://irr.ru/index.php?showalbum/login-irake-myservierk-supierts%2F&ti=\xD0\x9... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-oleginnesujeli-i-centum=etarget=search?clid=... │ http://irr.ru/index.php?showalbum/login-kupe.html_params%3Drhost%3Dad.adriver.r... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27928092_price=\xD0\xBC\x... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/mazda-dievochnye_avari... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-19.xhtml?city_to_one=All&film]/on/orders/810... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/1.19.mobile_photo=6001... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27630/?item_id=0&bodystyl... │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ 1 │ 0 │ 0 │ http://bonprix_ru_11559&lr=12&usln │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lizova_ii_1112_1150&option[price_do=300... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E&wher... │ 26 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://obninsk/detail │ 26 │ +│ 1 │ 0 │ 0 │ http://yandex.ua/?target=search/tab=user │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detall/seconomicsmovinki │ http://komme%2F27.0.1453.116 │ 26 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login-jjjekrju-s-pring=1&price[price=\xD0\xBC... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/loginsk.irr.ru%2Fkategory_id=9204471-650/?_h=... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lejandsearch?text=\xD1\x82\xD0\xB8\xD1\x85\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert21124631/?Search.php │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification.ru/messa.ru/rea... │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 26 │ +│ -1 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_category... │ 26 │ +│ 3 │ 197 │ 0 │ │ http://komme%2F27.0.1453.116 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?messa.ru/worlds/page2/7277932582&text=\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 26 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-kupe-20010120652838799.html?n=7148.html... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemey-volvom80Cw&where=a... │ 26 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=607&state=4... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.22 (KHTML, like Gecko) │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 25 │ +│ 1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 25 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/people.ru/cars/passets... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731/?city=0&pvno=2&evlg=... │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vivarki/redki_sdelaet-law.ru/produkty/kartgo... │ http://irr.ru/index.php?showalbum/login=driff/en-ru/?p=2#messages/00001216629 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 25 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert264314953); ru) AppleWebK... │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.html&ei=GcXrUYe8F2DAU-RbuRlLMczoJ--5uDCx8 │ http://irr.ru/index.php?showalbum/login-132/#images/0000.h95/\xD1\x82\xD1\x8E\x... │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search?text=myaccountry │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login │ 25 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://obninsk/detail │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguard-payments-sale/se... │ http://irr.ru/index.php?showalbum/login-88i8LaDyEkCVv6-DhRfEDcw==&action │ 25 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/yandex.ru/?f... │ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.ru/film/46351/frl-2/bage │ 25 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605838.html5/v12/?from=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-link=1147373-1&p=1&p=2&text=\xD0\xBC\xD0\xBE... │ http://irr.ru/index.php?showalbum/logisterlingvo/#! │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741559&t=5204/make=Chrys... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694589/detail/555-javata... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=shops.html?id=1&body_type=\xD0\xBF\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781472265&op_seo_entry=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626rleurl%3D//ad.adriver... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685/price_ot=&price=\xD0... │ 24 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://diary.ru/forum/intries │ 24 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-117031&op_category&op_seo_entry=&op_uid │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26685857947301_Zoryatiya/... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671291&fridgets/2012&pri... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27399992.php/board,13.0) ... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguar.ru/page4/?emain.a... │ http://irr.ru/index.php?showalbum/login=ogabass.ru/filmId=9WOqzzitive&view │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-annative-expressageId=0oVXx21hUXI&where=all&... │ http://irr.ru/index.php?showalbum/login-rybnovlevojj_mamountry=-1&type%3D0 │ 24 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://video.yandex.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo/7... │ http://irr.ru/index.php?showalbum/login-kupit-plitka-s-korsiety/art/151/n4p/160... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/intrumen │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kupalnaya_elit=&id=3&clid=9403&lr=1913849 │ http://irr.ru/index.php?showalbum/login-gallebia_zhurnalCall D.R.E.mp3ex.net/ph... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lolacake/tatyaka.html?1=1&cid=577&oki=1 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinglish.rus-l7-p70505-1... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/yandsearch?lr=1... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-yvaken/topic=7702.jpg.html?1=1&cid=577&... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=1&bc=3&ct=1&pr │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-547552/1/?sma=RAINBOW&op_uid=fdd1b9d2721728&... │ http://irr.ru/index.php?showalbum/login-kapusta-advertika/search/room=1&damage=... │ 23 │ +│ 1 │ 0 │ 0 │ http://auto_volkswagency=1&text │ http://komme%2F27.0.1453.116 │ 23 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgarials/commend/searchvage-2.html&dt=13734... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-tuniki_510... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263090024189-528619c2077/... │ 23 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/ru/index.ru%26bid │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333572620201709/page/10... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26939.html?page/3/#count=... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news/radio&clid=198555... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/kategory_id=5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2740974%26pz%3D0%26ar_sli... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 23 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/resultatya9176da22f1a521a5853.html&... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26600721376439322%26pz%3D... │ 23 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga_728x90.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://afisha.yandex.ru │ 22 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemennoke0070553995f27d6... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2697574697.html_param=0&u... │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-105vr/ │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=search.tutung/s... │ 22 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/wheel.ceratornaya_solnechka │ http://komme%2F27.0.1453.116 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-10760b31b65633eZateq eb806e887d9f15ccf593280... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2091&local=1&TypeSearch?mail.ru/yandsearch&c... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26058&nnum=s4746835895&op... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-the-ili-tempera-minsk.irr.ru/produkty/bluzki... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodny │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2649.html?pg=menu_29.jpg&... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739693071/pomer... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/v1465][from]=&int[157281 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-business/sale/ru/search?mail.ru/film%2Fbarna... │ http://irr.ru/index.php?showalbum/login-zakon_type=1&fuelRatesTypeSearch │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267830840994,95688781470%... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 22 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27200,55.7654.html_parat-... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26601629][from=&fuelRateT... │ 22 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&l... │ http://irr.ru/introlux_page5/2/page/Renaul.irr.ru/start=1500-rublic/gamemain/Tu... │ 22 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://ekburg.irr.ru%2Fpuloveplanet │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liliate_id=24145602&with_phoney.yandex.ru;ya... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-natashkarola.irr.ru%2Fviewforum/MsgList.html... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26900/technics-technics-t... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&city[7]=23239330794,25826044_Black_lis... │ 21 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?price_till beli.php?cx=015216684_36 │ http://komme%2F27.0.1453.116 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691_ru_17832523.html_par... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694,978825315f373400/det... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1) AppleWebKit%2F537 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/world/photo/41/62b1dfa450/3/women-clother%26tms%3D%26ev_ltx%3D... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/basketshop.ru/yandsear... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/forum%2Fukhov/l... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27025&Select[4][]=32598.h... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265228.html?1=1&cid=577&o... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo44953.116.php?t=4... │ http://irr.ru/index.php?showalbum/login=ko&page=0&view.aspx?group_cod_1s=85&key... │ 21 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://wildberrior/uphold │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/?from │ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/houses/passenge... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-dance/index.ru/?favorite_off=1&encoding&hl=\... │ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logino-s-grigerator/page1=&input_age1 │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cars/commeddesk.ru/google_s&12.5.746.59954.30 (KHTML, like/\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login.html?1=1&input_who1=2&input_who2=1&inpu... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/logii-bin/click.cgi%3Fsid%3D158195,97987231-9... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ramblery/pic/893985650697... │ http://smeshariki.ru/obucheyelants │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26737865/?page/12186/#/ec... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dietsik.ru/razdel_id=111,7,700&w=728x90.html... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929&from%3D%26custom=0&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/club.ru/anime-zone.ru/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-brie... │ 21 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739353/details.... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2186/detail.aspx#location... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kupalnik │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification%2F4.0; XBLWP7; ... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/9-0--navam-zhien... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741465][from]=&input_wit... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_uid=1147... │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login=uzpp2XnEw&bvm=bv.49784469][from │ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 20 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-Larki-i-korobeg-1124-95367/guestblowinp... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26219&wi=1280&lo=http://w... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estatic.diary.ru/... │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=58&Selectronics-technics/k... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/yandex.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b706234651&op_uid=1&b... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?er=2&text=\xD0\xBA\xD1\x83\xD0\xBF\xD0\xB8\... │ http://irr.ru/index.php?showalbum/login=razer2.moikrug.ru/recipes/shop.spb │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://video.yandex.php │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=NeIdeaCenternet Explorer&aV=5.0 │ 20 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&price │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertificirovka.ru/noteating-i... │ 20 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271161076&st=261&t=170977... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate=0&ReturnUr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313163307/?from]=&int[15... │ http://che.ru/produkty_zarubezhei-niepochekhly │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_api.php?id=7262882,9454472&op_product_n... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604370757034dea482207549... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 20 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/cars │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-karbox=0&top=0&category/1961/#images/00... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26637&model=1705.html?1=1... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumilora481 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt=13733129/room │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-iulyanovskaya-obl/lyubvi?page=166733&eid=485... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27502/detail/?folders/#pa... │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://video.yandex.php │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626u1zIq0SGLXCI&where=al... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=240&u_cd=242035165&input_who2=1... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news_id_72387877055/nu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikulina.ru/real-estate/ou... │ 19 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?sort=popup/casualg... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBB\xD0\xB8\xD0\xBA\xD0\xBE\xD0\xBB\xD0\... │ http://irr.ru/index.php │ 19 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/filmId=eRaB4pYAXCI │ http://komme%2F27.0.1453.116 │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.ru/daily │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260540718534/?dateOn=1&bo... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login=perfect.yandex.ru%2Fkategoriya%2F537 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26672655462.html?city.ru/... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261921&pr=2441185112.html... │ 19 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostok.ru/cars │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671&Destige-all.html_par... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27404895,95923.html%26cus... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/check=1&redir=1&lang=a... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313437&pvno=2&evlg=VC,2;... │ http://irr.ru/index.php?showalbum/login-rizova.ru/look/timashirtsevm.cofe │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 19 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2638/?from=&raceTo=&power... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6HS │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166333/price[price_till]=&pri... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F_liveresum... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27355f3132366336601&uuid=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.php?f=11340.1j1j2.12...5998-103358071/8/page... │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/00007/10/1320006&p... │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto_repai... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://smeshariki.ru/obucheyelants │ 19 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.15751 Safari%2F5.0 (Windows │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2675406828ac956028692581/... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://obninsk/detail │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26968794618/irr.ru/real-e... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2702483,631;IC,444041%2F&... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2629&lr=65&rstr=-213&text=back=False&withmos... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=http://video.yandex.ru/real-estate │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26669E116-1-1550046560013... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?search?text=\xD1\x80\xD1\x83\xD1\x81\xD0\xB... │ http://irr.ru/index.php?showalbum/login-inadlinny-sched_car=0&city=0&price=18&p... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274026181891&rn=52&brand=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/dlia-zhiensk... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&checked=0&state/room=10002-g-v-program... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-165&jenre]/49047&lr=163&text=samsung ga-moda... │ http://irr.ru/index.php?showalbum/login-2-komn-v-na-92f5-6ccf-fef3-013f9f926a21... │ 18 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ru/index │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5 │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?elmt=popular&where=all&film/723/num │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/restate/out-of-town-resh=1&cnt=1373... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2012-recept-Ragu-iz-2-x │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupaljinik-slidi/places/?PAGEN_1=2 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 18 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=deltec&type=citymo=&version%2F4.0 (Linu... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27534.30 (KHTML, like Gec... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kochtinsk.pulscendinskiy-krasnodar.irr.ru │ http://irr.ru/index.php?showalbum/login-kuplyuskij/zapchastorii_state/out │ 18 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login.moikrug.ru/catalog/otchenko-ul-advert27... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zzzi.ru/a-shop and blademas/?id=1&marka=0&ma... │ http://irr.ru/index.php?showalbum/login-2003prev=/search/index.ru/meteor.html%3... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\... │ 18 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27132069304;IC,1511e8d158... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278453&with_exchange=0&ex... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=367132&pv=2... │ 18 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27071038_114736895,923401... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x9A\... │ 18 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/8018&l=malkogo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27420780790931.html5/v12/... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kanza_tab_2499472&lr=1074&sort=popular │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-natura.ru/jobs-education=post_137336ID0... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/?target=search?... │ http://irr.ru/index.php?showalbum/login-bigutensiysk.irr.ru/regular&bid=3205&bt... │ 18 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-21102&text=\xD0\xB1\xD0\xB0\xD0\xB1\xD0\xBA\... │ http://irr.ru/index.php?showalbum/login.mospsy.ru/super-na-kostronics/tv-audio.... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/obuv%2F │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685&numphoto=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626p/ │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertimeshariki.ru/cgi-bin/cli... │ 18 │ +│ 1 │ 0 │ 0 │ https://diary.ru/magnitogorsk │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sien-zhienskaya-i-kvartir.html?id=1955451-01... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260908861%26point-peter=&... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeSearch?text=\xD0\xB2\xD0\xBA\xD1\x83\xD1... │ 18 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1453.116 Safari%2F8536 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=yators/?jumping.ru/series.ru/priceup&page=3&... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinger/\xD0\x93\xD0\x90\... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=36427929&stat... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929750%26ar_sliceid%3D2... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga1788778.137329TVmbFNmbVNaR0YwW$UyNDg4fxS... │ http://irr.ru/index.php?showalbum/login-sienskaia-moda-zhienskikh_rabotjaga.ru/... │ 18 │ +│ 4 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691c352005&pvno=2&evlg=V... │ 17 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27422544/3/womens.ru/ufa.... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru%2Ffilm/4858?pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/cars/communalux.ru/dos... │ http://irr.ru/index.php?showalbum/loshaya-obl.irr.ru/film/35562C?analytics/kto-... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271527091/frl-2/bage-2.ht... │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#7878... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.103402.html%3Fhtml │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=artira-Lyubyat │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.aspx#location │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=yes&y1=2013-07-07.ya.ru/5_search?text=\... │ 17 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://aliningrad │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.15.html?1=1 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266149_51928/detail.ru/ka... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%26rleurl%3D%26CompPath%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2670308&po_yers=0&price_o... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2613168312.71 Safari%2F__... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_Bolers-device.aspx#commersanta_premiery... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=8&ch=UTF-8&ifr=1&av=1&nm=1&ved=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 17 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6HS │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-dlia-zhiensmed.ru/el... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginyazevskaya%2F5.0 (Windows NT 5.1) Prestorygoo... │ http://irr.ru/index.php?showalbum/login-kupilomatic.aspx#location=rr&days&city&... │ 17 │ +│ 1 │ 0 │ 0 │ http://bdsmpeople.ru/register2123 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logistereda.ru/photo/70861/6#f │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263161366&bid=2823&numpho... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowthreadreplies=24&ids=74&cu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313&ussp=mstp&usln=1&inp... │ http://irr.ru/index.php?showalbum/login-3767436/roomootofile/obzor.com/iframe │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26041.htm%3Fsid%3D0%26pz%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27595,9305f3931339322%26n... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273363331251798796&op_seo... │ 17 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/stan/index.kz/yandex │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertistia.html?partment/searc... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-search%3Futm_source=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031323532363&win=70&mode=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 3 │ 22 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://diary.ru/forum/intries │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 17 │ +│ 1 │ 0 │ 0 │ http://bibieters_sig=5ea8QizwGSPy0yGcm14ATH74D4Bw&usg=AFQjCNHxMZlonova.ru/p1847... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_style... │ 17 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/messar.ru/professig │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-futbolki-k... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lenfiki-zhienskaia-moda-muzhchin-sitafa ishq... │ http://irr.ru/index.php?showalbum/logical.ru/link=11485-9065383235348%2F&sr=htt... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261636/detail/odnoklassim... │ 17 │ +│ 1 │ 0 │ 0 │ http://acase.php?input_who1=2&input_who2=1 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.10 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694&option%2F12.14&he=76... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733145625/details... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268814453957595,94406/det... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26618531&t=111246.html?p=... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=Like Gecko) Chrome%2Fpotnik=1&price_do=&curr... │ http://irr.ru/index.php?showalbum/login-the-poxudet_sponsor=&o=6000708498/?caut... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-irina19910735%2F27.0.1453.116 Safari │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=bestwo.diary/details&id=9160/0/posti.ri... │ 17 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-53584715,1327288/belgium/arch=1&themec.... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b76faact/less=1&ru=1&... │ 17 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 16 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/category=cinem rasmusic │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27034195,9520160173/5/wom... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgas.rQRAX2Ua3IF1iHJcaz4ATv34DABw │ http://irr.ru/index.php?showalbum/login/?page=1024&wi=144438-88-3906740/currenc... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267044005320AA76)&vendor_... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098707209463401090/deta... │ 16 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search?clid=19554786.0.8.0.2.2003558_3497926... │ http://irr.ru/index.php?showalbum/logie-niz-doktops/electronics/4185570c72 │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-herokee_tatus=1&rm=18606bAxFEcQT6smBB4W... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search/cuZXdzJTJGJmxyPTI4fQ,... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26396284046.xhtml%3Fhtml%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-plan... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&pt=b&pd=7&pw=2&page5... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260612d7cf.4082813,74,756... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate/out-of-tow... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/page=91552&q=\... │ http://irr.ru/index.php │ 16 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/movinki... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?&clients-sale&siteurl%3D//ads/search?text... │ http://irr.ru/index.php?showalbum/login-kapusta-advert273786/foto-5/#photo=2817... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login.aspx?sle=13&s_yers=0&page_type=0&door=0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnaja-prost-petersburg/detail/?fold... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-krasok.html_params%3Drhost%3Dad.adriver │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661232&streamfood.com/if... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiensmed.ru/dl/\xD0\xB7\x... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti/redmonds %2F offset=403134333.2201560&c... │ http://irr.ru/index.php?showalbum/login-v40-velopiter.feriod=0&scroll_to_auto.r... │ 16 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/70948/35.htm?id=... │ http://irr.ru/index.php?showalbum/logiy-luchaiev%2F&sr=http:%2F%2Fwww.bonprix c... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166303133334%2F&ei=horia+iudi... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26765.html_params%3Drhost... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-57548811426&text=\xD0\xBB\xD1\x83\xD1\x87\xD... │ http://irr.ru/index.php?showalbum/login-coolonellana-Molodilnik.ru/index.php?vi... │ 16 │ +│ 1 │ 0 │ 0 │ http://histore/profile;u= │ http://irr.ru/index.php?showalbum/login-kupe-20013&uuid=1373356164564_1sort/sta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/showtopic,803813.html&... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_catalog/1250/?itemsg/cd... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2755597.html%3Fhtml?1=1&c... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=findjob.ru/planet.ru/index.ru/carinov.h... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert260477/cities/visas/exp?s... │ 16 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://video.yandex.php │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27429&input_bdsm_position... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2728024/detail/508/?instv... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26887301/Zona/simferopol.... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-153-4b9c4.4331626.htm?size%3D0%26rleurl │ 16 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect │ http://komme%2F27.0.1453.116 │ 16 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://msuzie-shop/premiery-c-38208_2.html │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-marka=23&model&desting?field_town/search/pri... │ http://irr.ru/index.php?showalbum/login-492ea9&show/417582,9626512874":10157628... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/posts&q=\xD0\xB2\xD0\xB5\xD0\xB4\xD1\x83\xD1... │ http://irr.ru/index.php?showalbum/login-mistore/#CATALOG_LIST-s-ovosibirsk/deta... │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/sch/price][min]=41&lr=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27364229586121%26url%3D%2... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ 1 │ 0 │ 0 │ http://volgografiyah_27_iyunya_50_let%2FgetId │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333%26bid%3D1%26rleurl%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-maritkiN │ http://irr.ru/index.php?showalbum/login-ladimir.irr.ru/remiery-telefon.ru │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new=127201148][fr... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661251-6efa-d61f-fef3-01... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/tv-audi/a7-spec=9894797179698712/p1/8... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti%2F%3Ff%3D100%&http://afisha.yandsearch&... │ http://irr.ru/index.php?showalbum/login-6030d.html_params%3Drhost%3D90%26height │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/7427510/detail/5... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269899458/price/3815&pvno... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=view/5/item3963... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logiste's a di galaxy-s4-story1.aspx#location... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5.0 (Win... │ 16 │ +│ 1 │ 0 │ 0 │ http://yandsearch?lr=2&color │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-gorod/search?p=7&oprnd=9902.jpg&img_url=http... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27222.vk.me/u3166 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2753][from]=&pricedownloa... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new10152954vac │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2735030373434-152495.php?... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makeevka.ru/perm.irr.ru/slingvo/#1\xD0\... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691.html?1=1&input_age2/... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26708662307][]=&selection... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313033393633310,932803][... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2010000087378687/pic/8939375f303839303935373... │ http://irr.ru/index.php?showalbum/login-souse=2/path=39_1.html?1=1&cid=577&oki=... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-irinakai/page_num_read2306e4574&ei=Ot_rUfjPG... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/artira │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/?strict=5710... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertists/736850/?item_no=737&... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2695/19545602cf94d77/repl... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumy.ua/search?text=\xD1\x81\xD0\xB5\... │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikal.ru/search/room=1&dam... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login/?do=ready-mansion%3D0%26url%3D%26bn%3D0... │ 15 │ +│ 1 │ 0 │ 0 │ http://forums/liiiervierk-suppohudeemvmesting/294465&op_categoriya │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb=1&prepairs=0&city[1 │ http://irr.ru/index.php?showalbum/lounona-muzhchin-kupaljinik-chernyj-odnoe/san... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&model=1173... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=new&cad=rjt&fu=0&input_country_id=228&lr=961... │ http://irr.ru/index.php?showalbum/login-cam.shtml#objdesc=true&uA=Mozilla │ 15 │ +│ 1 │ 0 │ 0 │ http://launcher-searchads/search │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-4433140796851/detail/536180&all=False&i... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26981583/page=1089592445/... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-album/login.2/second... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781308;IC,238208836746/0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginsk.eu/ru/Pagesize=13&m1=07 │ http://irr.ru/index.php?showalbum/login-3muda/truction/vacancies/750207190765.h... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_produkty/kiev.org/forum... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273631253711/foto-6320166... │ 15 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F1.7.1364.172 │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945HPS?analog/r10418/sort=price_do=200&site_off=1 │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 15 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshop/id_art_type=7&s_yers │ http://irr.ru/index.php?showalbum/login │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2724/?_h=search?text=\xD0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273389; U; Android 4.0.14... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-goluboj-podserial&dfs=13 │ http://irr.ru/index.php?showalbum/login-haus.html#news/228670,257&pci=3012/frl │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#67 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266356163f39ea6f8/7a8745&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/washes/built-in_two_ch... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26605566254/room=1.6&wher... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list.html?typ=SMA&anbieter=aleks_evilkos.com │ 15 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/state=1909644 │ http://afisha.yandex.ua/auto_id=0&with_photo.kurortmag.ru/razdnitsya-vishnury │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://irr.ru/index.ru/show/414526863_112 │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-land_search?text=\xD0\xB0\xD0\xBC\xD0\xB1\xD... │ http://irr.ru/6323%26bn%3D27888895,963095425 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?page37/?sta... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?Topic │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/index.ru/ange=0&s_yers=(3000&static.diary.ru... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/produkty%2Fplatj... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginskikh-viana.irr.ru/GameMain.aspx?sle=1/house.... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?transk.i... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678&op_page=60000/curren... │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?Id=9582 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liloveplanet.ru/futurer533/women.aspx?group-... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2631920&lo=http://person_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.1Uv1UfqCA8SonYC4BQ&usg=AFQjCNGB3pBUuKY1jJPP3... │ http://irr.ru/index.php?showalbum/login-tank-sale/search%3Fmode=&page_type │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-tumbov.irr.ru/page1=&input_who1=2&id=29... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=alini... │ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2718599/photo=0&is_hot=0&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27515/418695&st=327-B110Q │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.php?city[1]=700003 │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2699364224073532663835386... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26761,55.654289600/detail... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login=vladimir/page_type=0&expand_search?text... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?dok=001&rightbox/week&From=0&user │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/frl-4/trailer/view/3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-lential/secondary/details9.html_params%... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27265484158197%26width%3D... │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page9/#14... │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=25127691%2F... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/ch/floore troubleclick... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-676216b8af/4fd00fa61b3185631821/page_ty... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/gamemain.asp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27877437494,943082&stat_t... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2730675595,9292fa-d61f-fe... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1955451&lr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienshchin-planet.ru/myma... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_appliazh-pliance/mista-bez-uchaiev/000202&cl... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginy_name/3196906481/currency=6465373200&price=\... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2776/?date=0&doorov.irr.r... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-102-821922237&arrFilter2013/08-iH4AT5zIGQDA │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_type=&freetao.diary.ru/sea... │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 15 │ +│ 3 │ 123 │ 0 │ │ http://komme%2F27.0.1453.116 │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Ford-antent... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 15 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nashinger/users/search?textilead&353%26ev_pl... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert276278-ploschaya_checked_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9584%26pz%3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert262997385f32313335781094&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2693_763613.html_params%3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/877/ru/buildin... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274298799461981/?date=129... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://ekburg.irr.ru%2Fpuloveplanet │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.10 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=on&input_onliner... │ http://irr.ru/index.php?showalbum/login.html%26custom%3D%26CompPath.2; WOW64; r... │ 15 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credir=1 │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/gosthelp.ru/auto.ria.... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=on&in... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/litlip/saint-peter557932E-8C62-4917%26ad%3D64... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19&numphoto/login=A-CL-MS-smi.org%2F40 (KHTML, like Gecko) Version... │ http://irr.ru/index.ru/widgetchrome%2F&ti=no&dom_sell/pansiyskaya-obl.irr.html%... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search?text=\xD1\x84\x... │ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert269257798044.html_partmen... │ 15 │ +└────────────────┴────────────────┴─────────────┴────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.683 user 1.444000 sys 0.132000 +D 07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +Run Time: real 1.480 user 0.196000 sys 0.048000 +D D (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +Run Time: real 1.744 user 0.252000 sys 0.172000 +D " = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) ORDER BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))); +Run Time: real 0.508 user 0.712000 sys 0.024000 +D +D +D +D +D +D +D SELECT count(*) FROM hits;+ +┌──────────────┐ +│ count_star() │ +├──────────────┤ +│ 100000000 │ +└──────────────┘ +Run Time: real 0.010 user 0.080000 sys 0.000000 +D SELECT count(*) FROM hits WHERE AdvEngineID != 0;d +┌──────────────┐ +│ count_star() │ +├──────────────┤ +│ 630535 │ +└──────────────┘ +Run Time: real 0.639 user 0.520000 sys 0.060000 +D SELECT sum(AdvEngineID), count(*), avg(ResolutionWidth) FROM hits;m +┌──────────────────┬──────────────┬──────────────────────┐ +│ sum(advengineid) │ count_star() │ avg(resolutionwidth) │ +├──────────────────┼──────────────┼──────────────────────┤ +│ 7280824 │ 100000000 │ 1513.48908394 │ +└──────────────────┴──────────────┴──────────────────────┘ +Run Time: real 0.053 user 0.780000 sys 0.044000 +D SELECT sum(UserID) FROM hits; +┌───────────────────────┐ +│ sum(userid) │ +├───────────────────────┤ +│ 3.230605869408804e+26 │ +└───────────────────────┘ +Run Time: real 0.039 user 0.604000 sys 0.004000 +D SELECT COUNT(DISTINCT UserID) FROM hits; +┌───────────────┐ +│ count(userid) │ +├───────────────┤ +│ 17630976 │ +└───────────────┘ +Run Time: real 8.105 user 9.812000 sys 0.996000 +D SELECT COUNT(DISTINCT SearchPhrase) FROM hits; +o┌─────────────────────┐ +│ count(searchphrase) │ +├─────────────────────┤ +│ 6019589 │ +└─────────────────────┘ +Run Time: real 12.975 user 17.084000 sys 1.176000 +D SELECT min(EventDate), max(EventDate) FROM hits; +o┌────────────────┬────────────────┐ +│ min(eventdate) │ max(eventdate) │ +├────────────────┼────────────────┤ +│ 15888 │ 15917 │ +└────────────────┴────────────────┘ +Run Time: real 0.338 user 0.560000 sys 0.040000 +D SELECT AdvEngineID, count(*) FROM hits WHERE AdvEngineID != 0 GROUP BY AdvEngineID ORDER BY count(*) DESC;s +┌─────────────┬──────────────┐ +│ AdvEngineID │ count_star() │ +├─────────────┼──────────────┤ +│ 2 │ 404620 │ +│ 27 │ 113167 │ +│ 13 │ 45633 │ +│ 45 │ 38974 │ +│ 44 │ 9731 │ +│ 3 │ 6896 │ +│ 62 │ 5266 │ +│ 52 │ 3554 │ +│ 50 │ 938 │ +│ 28 │ 836 │ +│ 53 │ 350 │ +│ 25 │ 343 │ +│ 61 │ 158 │ +│ 21 │ 38 │ +│ 42 │ 20 │ +│ 16 │ 7 │ +│ 7 │ 3 │ +│ 22 │ 1 │ +└─────────────┴──────────────┘ +Run Time: real 0.030 user 0.456000 sys 0.000000 +D SELECT RegionID, COUNT(DISTINCT UserID) AS u FROM hits GROUP BY RegionID ORDER BY u DESC LIMIT 10; +┌──────────┬─────────┐ +│ RegionID │ u │ +├──────────┼─────────┤ +│ 229 │ 2845673 │ +│ 2 │ 1081016 │ +│ 208 │ 831676 │ +│ 169 │ 604583 │ +│ 184 │ 322661 │ +│ 158 │ 307152 │ +│ 34 │ 299479 │ +│ 55 │ 286525 │ +│ 107 │ 272448 │ +│ 42 │ 243181 │ +└──────────┴─────────┘ +Run Time: real 9.257 user 11.444000 sys 1.204000 +D SELECT RegionID, sum(AdvEngineID), count(*) AS c, avg(ResolutionWidth), COUNT(DISTINCT UserID) FROM hits GROUP BY RegionID ORDER BY c DESC LIMIT 10;i +┌──────────┬──────────────────┬──────────┬──────────────────────┬───────────────┐ +│ RegionID │ sum(advengineid) │ c │ avg(resolutionwidth) │ count(userid) │ +├──────────┼──────────────────┼──────────┼──────────────────────┼───────────────┤ +│ 229 │ 2078084 │ 18296430 │ 1506.0876750819696 │ 2845673 │ +│ 2 │ 441711 │ 6687708 │ 1479.8410618406187 │ 1081016 │ +│ 208 │ 285925 │ 4261945 │ 1285.260504769536 │ 831676 │ +│ 169 │ 100887 │ 3320286 │ 1465.90517142198 │ 604583 │ +│ 32 │ 81498 │ 1843721 │ 1538.0370495318978 │ 216010 │ +│ 34 │ 161779 │ 1792406 │ 1548.364990409539 │ 299479 │ +│ 184 │ 55526 │ 1755223 │ 1506.8102679830426 │ 322661 │ +│ 42 │ 108820 │ 1542771 │ 1587.1074287758845 │ 243181 │ +│ 107 │ 120470 │ 1516722 │ 1548.6039623609336 │ 272448 │ +│ 51 │ 98212 │ 1435598 │ 1579.8864215469791 │ 211505 │ +└──────────┴──────────────────┴──────────┴──────────────────────┴───────────────┘ +Run Time: real 10.892 user 14.136000 sys 1.056000 +D SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(MobilePhoneModel) > 0 GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10;e +┌──────────────────┬─────────┐ +│ MobilePhoneModel │ u │ +├──────────────────┼─────────┤ +│ iPad │ 1090347 │ +│ iPhone │ 45758 │ +│ A500 │ 16046 │ +│ N8-00 │ 5565 │ +│ iPho │ 3300 │ +│ ONE TOUCH 6030A │ 2759 │ +│ GT-P7300B │ 1907 │ +│ 3110000 │ 1871 │ +│ GT-I9500 │ 1598 │ +│ eagle75 │ 1492 │ +└──────────────────┴─────────┘ +Run Time: real 2.245 user 5.984000 sys 0.540000 +D SELECT MobilePhone, MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(MobilePhoneModel) > 0 GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10;, +┌─────────────┬──────────────────┬────────┐ +│ MobilePhone │ MobilePhoneModel │ u │ +├─────────────┼──────────────────┼────────┤ +│ 1 │ iPad │ 931038 │ +│ 5 │ iPad │ 48385 │ +│ 6 │ iPad │ 29710 │ +│ 7 │ iPad │ 28391 │ +│ 118 │ A500 │ 16005 │ +│ 6 │ iPhone │ 14516 │ +│ 26 │ iPhone │ 13566 │ +│ 10 │ iPad │ 11433 │ +│ 32 │ iPad │ 9503 │ +│ 13 │ iPad │ 9417 │ +└─────────────┴──────────────────┴────────┘ +Run Time: real 2.461 user 6.304000 sys 0.532000 +D SELECT SearchPhrase, count(*) AS c FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;+ +┌────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchPhrase │ c │ +├────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 70263 │ +│ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 34675 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 24579 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 21649 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 19703 │ +│ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 19195 │ +│ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 17284 │ +│ galaxy table │ 16746 │ +│ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 16620 │ +│ \xD1\x81\xD0\xBA\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xBA\xD0\xBE \xD0\xBC\xD1\x8B\xD1\x... │ 12317 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 1.045 user 14.536000 sys 0.016000 +D SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10;m +┌────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchPhrase │ u │ +├────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 23673 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 19743 │ +│ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 18394 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 17553 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 14600 │ +│ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 14529 │ +│ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 14198 │ +│ \xD1\x81\xD0\xBA\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xBA\xD0\xBE \xD0\xBC\xD1\x8B\xD1\x... │ 9007 │ +│ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 8792 │ +│ \xD0\xBA\xD0\xBE\xD0\xBC\xD0\xB1\xD0\xB8\xD0\xBD\xD0\xB8\xD1\x80\xD0\xBE\xD0\xB... │ 7572 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 14.072 user 18.988000 sys 1.104000 +D SELECT SearchEngineID, SearchPhrase, count(*) AS c FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10;m +┌────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchEngineID │ SearchPhrase │ c │ +├────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ 2 │ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 46258 │ +│ 2 │ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 18871 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 16905 │ +│ 3 │ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 16748 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 14911 │ +│ 2 │ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 13716 │ +│ 2 │ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 13414 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 13105 │ +│ 3 │ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 12815 │ +│ 2 │ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 11946 │ +└────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 1.297 user 18.044000 sys 0.072000 +D SELECT UserID, count(*) FROM hits GROUP BY UserID ORDER BY count(*) DESC LIMIT 10; +┌─────────────────────┬──────────────┐ +│ UserID │ count_star() │ +├─────────────────────┼──────────────┤ +│ 1313338681122956954 │ 29097 │ +│ 1907779576417363396 │ 25333 │ +│ 2305303682471783379 │ 10611 │ +│ 7982623143712728547 │ 7584 │ +│ 6018350421959114808 │ 6678 │ +│ 7280399273658728997 │ 6411 │ +│ 1090981537032625727 │ 6197 │ +│ 5730251990344211405 │ 6019 │ +│ 835157184735512989 │ 5211 │ +│ 770542365400669095 │ 4906 │ +└─────────────────────┴──────────────┘ +Run Time: real 1.002 user 12.864000 sys 0.004000 +D SELECT UserID, SearchPhrase, count(*) FROM hits GROUP BY UserID, SearchPhrase ORDER BY count(*) DESC LIMIT 10;l +┌─────────────────────┬──────────────┬──────────────┐ +│ UserID │ SearchPhrase │ count_star() │ +├─────────────────────┼──────────────┼──────────────┤ +│ 1313338681122956954 │ │ 29097 │ +│ 1907779576417363396 │ │ 25333 │ +│ 2305303682471783379 │ │ 10611 │ +│ 7982623143712728547 │ │ 6669 │ +│ 7280399273658728997 │ │ 6408 │ +│ 1090981537032625727 │ │ 6196 │ +│ 5730251990344211405 │ │ 6019 │ +│ 6018350421959114808 │ │ 5990 │ +│ 835157184735512989 │ │ 5209 │ +│ 770542365400669095 │ │ 4906 │ +└─────────────────────┴──────────────┴──────────────┘ +Run Time: real 2.324 user 30.028000 sys 0.292000 +D SELECT UserID, SearchPhrase, count(*) FROM hits GROUP BY UserID, SearchPhrase LIMIT 10; +h┌─────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬──────────────┐ +│ UserID │ SearchPhrase │ count_star() │ +├─────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼──────────────┤ +│ 1032076697239282790 │ \xD0\xBA\xD0\xBE\xD0\xBB\xD0\xBF\xD0\xB8\xD0\xBD\xD0\xBE \xD0\xBC\xD0\xBE\xD0\x... │ 2 │ +│ 2291669706871953428 │ │ 1 │ +│ 962730767009225899 │ │ 4 │ +│ 2233663724416113367 │ \xD0\xB6\xD0\xB0\xD0\xBD\xD0\xBD\xD1\x8B\xD0\xB5 \xD0\xB8\xD0\xB3\xD1\x80\xD0\x... │ 2 │ +│ 933748801326509236 │ │ 9 │ +│ 439500307031004026 │ \xD0\xB2\xD1\x81\xD0\xB5\xD0\xBB\xD1\x8F\xD1\x8E\xD1\x89\xD0\xB8\xD0\xB9 \xD1\x... │ 1 │ +│ 5695875839448562 │ │ 1 │ +│ 7102459534329662426 │ │ 3 │ +│ 1468681479646296604 │ \xD1\x81\xD0\xBC\xD0\xB5\xD1\x81\xD0\xB8\xD1\x82\xD0\xB5\xD1\x82 \xD0\xBC\xD0\x... │ 1 │ +│ 737933678636519547 │ │ 22 │ +└─────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴──────────────┘ +Run Time: real 1.908 user 29.032000 sys 0.268000 +D SELECT UserID, extract(minute FROM (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) AS m, SearchPhrase, count(*) FROM hits GROUP BY UserID, m, SearchPhrase ORDER BY count(*) DESC LIMIT 10;) +┌─────────────────────┬────┬──────────────┬──────────────┐ +│ UserID │ m │ SearchPhrase │ count_star() │ +├─────────────────────┼────┼──────────────┼──────────────┤ +│ 1313338681122956954 │ 31 │ │ 589 │ +│ 1313338681122956954 │ 28 │ │ 578 │ +│ 1313338681122956954 │ 29 │ │ 572 │ +│ 1313338681122956954 │ 33 │ │ 567 │ +│ 1313338681122956954 │ 27 │ │ 557 │ +│ 1313338681122956954 │ 32 │ │ 554 │ +│ 1313338681122956954 │ 30 │ │ 552 │ +│ 1313338681122956954 │ 34 │ │ 546 │ +│ 1313338681122956954 │ 26 │ │ 540 │ +│ 1313338681122956954 │ 10 │ │ 539 │ +└─────────────────────┴────┴──────────────┴──────────────┘ +Run Time: real 4.255 user 50.680000 sys 1.116000 +D SELECT UserID FROM hits WHERE UserID = 12345678901234567890;L +Run Time: real 0.258 user 0.260000 sys 0.000000 +D SELECT count(*) FROM hits WHERE URL::TEXT LIKE '%metrika%';e +┌──────────────┐ +│ count_star() │ +├──────────────┤ +│ 211 │ +└──────────────┘ +Run Time: real 2.665 user 42.256000 sys 0.000000 +D SELECT SearchPhrase, min(URL), count(*) AS c FROM hits WHERE URL::TEXT LIKE '%metrika%' AND octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;u +┌────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───┐ +│ SearchPhrase │ min(url) │ c │ +├────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───┤ +│ \xD0\xB8\xD1\x89\xD1\x83 \xD1\x80\xD0\xB0\xD0\xB1\xD0\xBE\xD1\x82\xD0\xB0 \xD0\... │ http://smeshariki.ru/index.ua/advanceForce.1primea/forum=1&district=25586/page4... │ 1 │ +│ \xD1\x82\xD0\xB5\xD0\xBA\xD1\x81\xD1\x82\xD1\x8B \xD0\xBF\xD0\xBE\xD0\xB4\xD1\x... │ http://bdsmpeople.ru/index.ru/metrikadeletedAutoSearch │ 1 │ +│ \xD0\xBE\xD0\xBA\xD0\xB5\xD0\xB0\xD0\xBD\xD1\x81\xD0\xBA\xD0\xBE\xD0\xB5 \xD1\x... │ http://bdsmpeople.ru/index.ru/metrikadeletedAutoSearch │ 1 │ +│ \xD1\x80\xD0\xB5\xD1\x86\xD0\xB5\xD0\xBF\xD1\x82 │ http://smeshariki.ru/index.ua/search/metrikanske-urali-belorussia/28.html?1=1&c... │ 1 │ +│ \xD0\xB4\xD0\xB8\xD0\xBD\xD0\xB0 \xD0\xB2\xD0\xB0\xD0\xBA\xD0\xB0\xD0\xBD\xD1\x... │ http://ecrn.ru/personal/gost277572,9589&pt=b&pd=8&pw=2&page3/?state=0&damages/0... │ 1 │ +│ \xD1\x82\xD1\x80\xD1\x83\xD0\xB4\xD0\xB0 \xD0\xB4\xD0\xBB\xD1\x8F \xD0\xB2\xD1\... │ http://smeshariki.ru/recipes/sadovka.ru/gorod55.ru/search?text=\xD0\xB8\xD0\xB7... │ 1 │ +│ \xD0\xBC\xD1\x8B\xD1\x81\xD0\xBB \xD0\xBF\xD0\xB5\xD1\x81\xD0\xB5\xD0\xBD \xD1\... │ http://smeshariki.ru/a-folder=cmarka=15&sort=&sll=36872/metrika/frl-2/bage-all/... │ 1 │ +│ \xD0\xB2\xD0\xB8\xD0\xB4\xD0\xB5\xD0\xBE \xD1\x82\xD0\xB0\xD0\xBA\xD0\xBE\xD0\x... │ http://maximum_438424&pvno=2&evlg=VC,0;VL,628;IC,1653-82676212&op_page=0&door=0... │ 1 │ +│ \xD1\x80\xD0\xB0\xD0\xB1\xD0\xBE\xD0\xB2\xD1\x8B\xD0\xB5 \xD0\xB4\xD0\xBE\xD1\x... │ http://smeshariki.ru/index.ua/auto.ria.ua/change=0&s_yers=0&with_video.yandex.u... │ 1 │ +│ \xD1\x83\xD0\xBD\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x80\xD0\xBC\xD0\xB5\xD0\xB4\xD0\xB... │ http://smeshariki.ru/index.ua/syllanet.ru/busine-tyazin?model=4878/page=10&cate... │ 1 │ +└────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───┘ +Run Time: real 0.721 user 11.368000 sys 0.000000 +D count(*) AS c, COUNT(DISTINCT UserID) FROM hits WHERE Title::TEXT LIKE '%Яндекс%' AND URL::TEXT NOT LIKE '%.yandex.%' AND octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;( +Run Time: real 8.537 user 19.856000 sys 1.200000 +D SELECT * FROM hits WHERE URL::TEXT LIKE '%metrika%' ORDER BY EventTime LIMIT 10; +┌─────────────────────┬────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┬────────────┬───────────┬───────────┬────────────┬──────────┬─────────────────────┬──────────────┬─────┬───────────┬────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬─────────┬───────────────────┬─────────────────┬───────────────┬─────────────┬─────────────────┬──────────────────┬─────────────────┬────────────┬────────────┬─────────────┬──────────┬──────────┬────────────────┬────────────────┬──────────────┬──────────────────┬──────────┬─────────────┬──────────────────┬────────┬─────────────┬────────────────┬────────────────┬──────────────┬─────────────┬─────────────┬───────────────────┬────────────────────┬────────────────┬─────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬──────────────────────┬─────────────┬────────┬────────────┬─────────────┬─────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┬──────────────┬─────────┬─────────────┬───────────────┬──────────┬──────────┬────────────────┬─────┬─────┬────────┬───────────┬───────────┬────────────┬────────────┬────────────┬───────────────┬─────────────────┬────────────────┬───────────────┬──────────────┬───────────┬────────────┬───────────┬───────────────┬─────────────────────┬───────────────────┬─────────────┬───────────────────────┬──────────────────┬────────────┬──────────────┬───────────────┬─────────────────┬─────────────────────┬────────────────────┬──────────────┬──────────────────┬───────────┬───────────┬─────────────┬────────────┬─────────┬─────────┬──────────┬──────────────────────┬──────────────────────┬──────┐ +│ WatchID │ JavaEnable │ Title │ GoodEvent │ EventTime │ EventDate │ CounterID │ ClientIP │ RegionID │ UserID │ CounterClass │ OS │ UserAgent │ URL │ Referer │ Refresh │ RefererCategoryID │ RefererRegionID │ URLCategoryID │ URLRegionID │ ResolutionWidth │ ResolutionHeight │ ResolutionDepth │ FlashMajor │ FlashMinor │ FlashMinor2 │ NetMajor │ NetMinor │ UserAgentMajor │ UserAgentMinor │ CookieEnable │ JavascriptEnable │ IsMobile │ MobilePhone │ MobilePhoneModel │ Params │ IPNetworkID │ TraficSourceID │ SearchEngineID │ SearchPhrase │ AdvEngineID │ IsArtifical │ WindowClientWidth │ WindowClientHeight │ ClientTimeZone │ ClientEventTime │ SilverlightVersion1 │ SilverlightVersion2 │ SilverlightVersion3 │ SilverlightVersion4 │ PageCharset │ CodeVersion │ IsLink │ IsDownload │ IsNotBounce │ FUniqID │ OriginalURL │ HID │ IsOldCounter │ IsEvent │ IsParameter │ DontCountHits │ WithHash │ HitColor │ LocalEventTime │ Age │ Sex │ Income │ Interests │ Robotness │ RemoteIP │ WindowName │ OpenerName │ HistoryLength │ BrowserLanguage │ BrowserCountry │ SocialNetwork │ SocialAction │ HTTPError │ SendTiming │ DNSTiming │ ConnectTiming │ ResponseStartTiming │ ResponseEndTiming │ FetchTiming │ SocialSourceNetworkID │ SocialSourcePage │ ParamPrice │ ParamOrderID │ ParamCurrency │ ParamCurrencyID │ OpenstatServiceName │ OpenstatCampaignID │ OpenstatAdID │ OpenstatSourceID │ UTMSource │ UTMMedium │ UTMCampaign │ UTMContent │ UTMTerm │ FromTag │ HasGCLID │ RefererHash │ URLHash │ CLID │ +├─────────────────────┼────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┼────────────┼───────────┼───────────┼────────────┼──────────┼─────────────────────┼──────────────┼─────┼───────────┼────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼─────────┼───────────────────┼─────────────────┼───────────────┼─────────────┼─────────────────┼──────────────────┼─────────────────┼────────────┼────────────┼─────────────┼──────────┼──────────┼────────────────┼────────────────┼──────────────┼──────────────────┼──────────┼─────────────┼──────────────────┼────────┼─────────────┼────────────────┼────────────────┼──────────────┼─────────────┼─────────────┼───────────────────┼────────────────────┼────────────────┼─────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼──────────────────────┼─────────────┼────────┼────────────┼─────────────┼─────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┼──────────────┼─────────┼─────────────┼───────────────┼──────────┼──────────┼────────────────┼─────┼─────┼────────┼───────────┼───────────┼────────────┼────────────┼────────────┼───────────────┼─────────────────┼────────────────┼───────────────┼──────────────┼───────────┼────────────┼───────────┼───────────────┼─────────────────────┼───────────────────┼─────────────┼───────────────────────┼──────────────────┼────────────┼──────────────┼───────────────┼─────────────────┼─────────────────────┼────────────────────┼──────────────┼──────────────────┼───────────┼───────────┼─────────────┼────────────┼─────────┼─────────┼──────────┼──────────────────────┼──────────────────────┼──────┤ +│ 9008228978173248400 │ 1 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372714203 │ 15888 │ 46429 │ 1741285710 │ 208 │ 727970985383478408 │ 0 │ 2 │ 2 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ http://smeshariki.ru/page%3D%26ev_n%3Dtvor_3_4 │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 1638 │ 1658 │ 37 │ 14 │ 0 │ 700.22 │ 0 │ 0 │ 15 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 2349927 │ -1 │ 0 │ │ 0 │ 0 │ 1844 │ 888 │ 135 │ 1372711075 │ 3 │ 0 │ 29241 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 0 │ │ 926364569 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372755313 │ 31 │ 1 │ 0 │ 0 │ 0 │ 1985697352 │ 13001 │ -1 │ 22 │ vG │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 16989158750233735299 │ 2619784076535420345 │ 0 │ +│ 7319686668886932386 │ 0 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372742048 │ 15888 │ 46429 │ 675534320 │ 208 │ 1167829038705361511 │ 0 │ 45 │ 1 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ http://smeshariki.ru/page=6&sqi=2&ved=0CC0QFjAA │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 280 │ 733 │ 0 │ 0 │ 0 │ │ 0 │ 0 │ 4 │ sO │ 1 │ 1 │ 1 │ 0 │ │ │ 1444853 │ -1 │ 0 │ │ 0 │ 0 │ 997 │ 800 │ 623 │ 1372713898 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 4655941889681510909 │ │ 721190565 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372747193 │ 31 │ 2 │ 3 │ 717 │ 0 │ 2935426383 │ 22084 │ -1 │ 1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 11629579472615090596 │ 2619784076535420345 │ 0 │ +│ 5650132582613869356 │ 0 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372742083 │ 15888 │ 46429 │ 675534320 │ 208 │ 1167829038705361511 │ 0 │ 45 │ 1 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ http://smeshariki.ru/page=6&sqi=2&ved=0CC0QFjAA │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 280 │ 733 │ 0 │ 0 │ 0 │ │ 0 │ 0 │ 4 │ D\xE0 │ 1 │ 1 │ 1 │ 0 │ │ │ 1444853 │ -1 │ 0 │ │ 0 │ 0 │ 997 │ 800 │ 623 │ 1372713960 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 4655941889681510909 │ │ 721255326 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372747245 │ 31 │ 2 │ 3 │ 717 │ 0 │ 2935426383 │ 64225 │ -1 │ 1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 11629579472615090596 │ 2619784076535420345 │ 0 │ +│ 6211862319117980382 │ 0 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372744794 │ 15888 │ 46429 │ 1384976586 │ 208 │ 45205883125357727 │ 0 │ 8 │ 1 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ │ 0 │ 0 │ 0 │ 9911 │ 216 │ 475 │ 368 │ 0 │ 0 │ 0 │ │ 0 │ 0 │ 7 │ D\xE0 │ 1 │ 1 │ 1 │ 0 │ │ │ 3195177 │ 0 │ 0 │ │ 0 │ 0 │ 412 │ 286 │ 135 │ 1372732810 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 7015666733105959947 │ │ 641313121 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372774931 │ 28 │ 1 │ 2 │ 1 │ 0 │ 1889444196 │ 44835 │ -1 │ 0 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 18150585289071012696 │ 2619784076535420345 │ 0 │ +│ 8127216893234548048 │ 0 │ \xD0\xA2\xD0\xBE\xD0\xBB\xD1\x81\xD1\x82\xD1\x83\xD1\x85\xD1\x83, \xD0\xB5\xD1\... │ 1 │ 1372752539 │ 15888 │ 46429 │ 1237806922 │ 208 │ 750085446646698731 │ 0 │ 2 │ 3 │ http://smeshariki.ru/used/99114578622-14406072,9269587/roometrika/?page=7&pw=2&... │ http://smeshariki.ru/page=11956bd3f5ba-bolshiient │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 1081 │ 979 │ 23 │ 15 │ 7 │ 700 │ 0 │ 0 │ 17 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 2914423 │ -1 │ 0 │ │ 0 │ 0 │ 1434 │ 739 │ 623 │ 1372781865 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 5496132257355632424 │ │ 983272850 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372760187 │ 50 │ 2 │ 2 │ 60 │ 18 │ 1113465640 │ 60610 │ -1 │ 29 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 194 │ 1631 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 13570011243001147277 │ 11339053197878713733 │ 0 │ +│ 5016976626924998727 │ 1 │ Toyota \xD1\x80\xD1\x83\xD0\xBA\xD0\xB0\xD0\xBB\xD1\x8B \xD0\xB4\xD0\xBB\xD1\x8... │ 1 │ 1372758784 │ 15888 │ 5645 │ 3888153915 │ 107 │ 4058808124307537573 │ 1 │ 2 │ 88 │ http:%2F%2Fwwww.bonprix.ru&pvid=131&op_products/transformality.pulsceness/01-me... │ http://forum.amur.info/node/12451180167540 │ 0 │ 10868 │ 635 │ 16361 │ 943 │ 1638 │ 777 │ 37 │ 15 │ 7 │ 700 │ 0 │ 0 │ 1 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 2726799 │ -1 │ 0 │ │ 0 │ 0 │ 1509 │ 618 │ 135 │ 1372835656 │ 0 │ 0 │ 0 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 6227398498798751865 │ │ 255959698 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372763371 │ 31 │ 1 │ 3 │ 3555 │ 13 │ 4006630121 │ -1 │ -1 │ -1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 10333931216342739575 │ 10009133566342666602 │ 0 │ +│ 4963765960745323978 │ 0 │ \xD0\x93\xD0\x90\xD0\x97 (ZAZ) 5403J \xE2\x80\x93 \xD0\xA4\xD0\xB8\xD0\xBB\xD1\... │ 1 │ 1372793626 │ 15888 │ 46429 │ 2063319617 │ 23967 │ 5283184799411504286 │ 0 │ 44 │ 2 │ http://smeshariki.ru/userId=0&matched_car=Volkswagency=1&p=8090/roometrika/?pag... │ http://smeshariki.ru/smsarhiv/num/33363634383294&lr=66&v6s=2&bodystyle │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 1996 │ 1781 │ 37 │ 15 │ 7 │ 700 │ 0 │ 0 │ 10 │ nA │ 1 │ 1 │ 0 │ 0 │ │ │ 4110783 │ -1 │ 0 │ │ 0 │ 0 │ 1551 │ 955 │ 291 │ 1372730435 │ 7 │ 1 │ 9577 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 8904020920948834668 │ │ 883138215 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372777308 │ 22 │ 2 │ 2 │ 11339 │ 18 │ 2136940575 │ 1653 │ -1 │ 1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 18276268115953212999 │ 9484754903086635093 │ 0 │ +│ 6284148982888572412 │ 1 │ Morskoj port \xE2\x80\x93 \xD0\x9D\xD0\xBE\xD0\xB2\xD0\xBE\xD1\x81\xD1\x82\xD1\... │ 1 │ 1372795222 │ 15889 │ 3922 │ 2460998382 │ 40 │ 1643466856862289966 │ 1 │ 44 │ 7 │ http://moikrug.ru/message-12-kak-pravdorubovnik_metrika-info.php?f=23&prr │ http://diary.ru/GameMain.aspx?d=1412&lr=75&mode=photo/login=igorod.irr.ru/i6102... │ 0 │ 306 │ 29199 │ 92 │ 247 │ 1368 │ 554 │ 37 │ 15 │ 7 │ 800.94 │ 0 │ 0 │ 12 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 1166094 │ 1 │ 0 │ │ 0 │ 0 │ 1253 │ 642 │ 135 │ 1372799147 │ 4 │ 1 │ 16561 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 7061143530822060136 │ │ 699865379 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372810401 │ 31 │ 2 │ 3 │ 6 │ 0 │ 3849445958 │ -1 │ -1 │ -1 │ S0 │ h1 │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 14060834305267311691 │ 1791983733815963315 │ 0 │ +│ 6024648629746505393 │ 0 │ \xD0\x9F\xD0\xBE\xD0\xB3\xD1\x80\xD0\xB5\xD0\xB2\xD0\xB0\xD1\x82\xD0\xB5\xD0\xB... │ 1 │ 1372795271 │ 15889 │ 1200 │ 2932550360 │ 208 │ 1578473929930714515 │ 1 │ 107 │ 82 │ http://afisha.yandex.ru/real-estate/out-of-town/household_app_metrika.ru/wildbe... │ http://ad.adrive_type_id=1959251&stUrl%3Dpopular/kw/306161&lr=1418][to]=&input_... │ 0 │ 15265 │ 19757 │ 8953 │ 32252 │ 958 │ 1871 │ 37 │ 0 │ 0 │ │ 0 │ 0 │ 3 │ D\xE0 │ 1 │ 1 │ 1 │ 6 │ │ │ 4010641 │ -1 │ 0 │ │ 0 │ 0 │ 521 │ 1803 │ -1 │ 1372870507 │ 0 │ 0 │ 0 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 0 │ http://b.kavanga.ru/tags/%FD%ED%FB%E2%F3%E6%E5%E6%ED%E8%ED%F1%FF%ED&ti=%D0%BD%D... │ 120241233 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372842094 │ 0 │ 0 │ 0 │ 0 │ 0 │ 3975911785 │ -1 │ -1 │ -1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 9685011611637290144 │ 5941547189901908071 │ 0 │ +│ 4857420640250996887 │ 1 │ Suzuki Escort 4* (\xD0\xA4\xD1\x80\xD0\xB0\xD0\xBD\xD1\x86\xD1\x8B 3 \xD1\x81\x... │ 1 │ 1372800737 │ 15889 │ 3922 │ 3201307115 │ 190 │ 7335986183190726964 │ 1 │ 44 │ 88 │ http://pova-ul-mir.irr.ru/search.php?gidcar=37408&uuid=1&bc=3&city=0&pv=20&s_ye... │ http://news/238/~6/?cauth=1&av=1&nm=1&ms=1,2/currency=RUR/page_num_id=15366563&... │ 0 │ 306 │ 144 │ 304 │ 132 │ 1368 │ 554 │ 37 │ 15 │ 4 │ 202 │ 0 │ 0 │ 1 │ fi │ 1 │ 1 │ 0 │ 0 │ │ │ 2311071 │ -1 │ 0 │ │ 0 │ 0 │ 1333 │ 924 │ 322 │ 1372840359 │ 4 │ 1 │ 16561 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 7659179697273795837 │ │ 232010762 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372866397 │ 31 │ 2 │ 2 │ 3658 │ 28 │ 2920265313 │ -1 │ -1 │ -1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 8839345929686869081 │ 5449259806403761803 │ 0 │ +└─────────────────────┴────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┴────────────┴───────────┴───────────┴────────────┴──────────┴─────────────────────┴──────────────┴─────┴───────────┴────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴─────────┴───────────────────┴─────────────────┴───────────────┴─────────────┴─────────────────┴──────────────────┴─────────────────┴────────────┴────────────┴─────────────┴──────────┴──────────┴────────────────┴────────────────┴──────────────┴──────────────────┴──────────┴─────────────┴──────────────────┴────────┴─────────────┴────────────────┴────────────────┴──────────────┴─────────────┴─────────────┴───────────────────┴────────────────────┴────────────────┴─────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴──────────────────────┴─────────────┴────────┴────────────┴─────────────┴─────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┴──────────────┴─────────┴─────────────┴───────────────┴──────────┴──────────┴────────────────┴─────┴─────┴────────┴───────────┴───────────┴────────────┴────────────┴────────────┴───────────────┴─────────────────┴────────────────┴───────────────┴──────────────┴───────────┴────────────┴───────────┴───────────────┴─────────────────────┴───────────────────┴─────────────┴───────────────────────┴──────────────────┴────────────┴──────────────┴───────────────┴─────────────────┴─────────────────────┴────────────────────┴──────────────┴──────────────────┴───────────┴───────────┴─────────────┴────────────┴─────────┴─────────┴──────────┴──────────────────────┴──────────────────────┴──────┘ +Run Time: real 72.104 user 135.356000 sys 10.484000 +D SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY EventTime LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC \xD0\xBD\xD0\xB5\xD0\xB1\xD0\xBE\xD0\x... │ +│ galaxy s4 zoom \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC │ +│ \xD0\xBD\xD0\xBE\xD1\x87\xD0\xBD\xD0\xBE \xD0\xBA\xD0\xB8\xD1\x82\xD0\xB0\xD1\x... │ +│ \xD1\x81\xD0\xB8\xD0\xBC\xD0\xBF\xD1\x82\xD0\xBE\xD0\xBC\xD1\x8B \xD1\x80\xD0\x... │ +│ \xD0\xBE\xD1\x82\xD0\xB4\xD1\x8B\xD1\x85\xD0\xB0 \xD1\x87\xD0\xB5\xD0\xBC \xD0\... │ +│ \xD0\xBA\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ +│ \xD0\xB0\xD0\xB2\xD0\xBE\xD0\xBC \xD0\xBA\xD0\xBE\xD0\xBD\xD1\x81\xD1\x82\xD0\x... │ +│ \xD1\x81\xD0\xBB\xD0\xBE\xD0\xBD.\xD1\x80\xD1\x83\xD0\xB1., \xD0\xB4. \xD0\xB0.... │ +│ \xD1\x80\xD0\xB0\xD1\x81\xD0\xBF\xD0\xB8\xD1\x81\xD0\xB0\xD0\xBD\xD0\xB8\xD0\xB... │ +│ \xD0\xB0\xD0\xBD\xD0\xB0\xD0\xBF\xD0\xB0 \xD0\xBE\xD0\xBF\xD0\xB5\xD1\x80\xD0\x... │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 0.232 user 3.520000 sys 0.132000 +D SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY SearchPhrase LIMIT 10;e +┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ ! hektdf gjcgjhn conster │ +│ ! \xD1\x81\xD0\xBA\xD0\xB0\xD1\x80\xD0\xBF │ +│ !(\xD0\xBA\xD0\xB0\xD0\xBA \xD0\xB2\xD0\xBE\xD1\x80\xD0\xBE\xD0\xBD\xD0\xB8 │ +│ !(\xD0\xBF\xD0\xBE \xD0\xB3\xD0\xBE\xD1\x80\xD0\xB8\xD1\x8E \xD0\xB2 \xD1\x8F\x... │ +│ !(\xD1\x81) \xD0\xBF\xD1\x80\xD0\xBE \xD0\xB4\xD0\xBF\xD0\xBE \xD1\x81\xD0\xB5\... │ +│ !(\xD1\x81\xD0\xB0\xD0\xBB\xD0\xBE\xD0\xBD\xD1\x8B \xD0\xBE\xD1\x81\xD1\x82\xD0... │ +│ !(\xD1\x81\xD1\x82\xD0\xB0\xD1\x80\xD1\x82\xD0\xB5\xD1\x80 rav4 \xD1\x82\xD1\x8... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD0\xB4\xD0\xBB\xD1\x8F \xD0\xBC\xD1\x8F\xD1... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD0\xBC\xD0\xB0\xD1\x83\xD1\x81 \xD0\xBA\xD0... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD1\x81\xD0\xB5\xD1\x80\xD0\xB8\xD0\xB8 │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 0.248 user 3.696000 sys 0.012000 +D SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY EventTime, SearchPhrase LIMIT 10; +D┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ galaxy s4 zoom \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC │ +│ \xD0\xBD\xD0\xBE\xD1\x87\xD0\xBD\xD0\xBE \xD0\xBA\xD0\xB8\xD1\x82\xD0\xB0\xD1\x... │ +│ \xD1\x81\xD0\xB8\xD0\xBC\xD0\xBF\xD1\x82\xD0\xBE\xD0\xBC\xD1\x8B \xD1\x80\xD0\x... │ +│ \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC \xD0\xBD\xD0\xB5\xD0\xB1\xD0\xBE\xD0\x... │ +│ \xD0\xB0\xD0\xB2\xD0\xBE\xD0\xBC \xD0\xBA\xD0\xBE\xD0\xBD\xD1\x81\xD1\x82\xD0\x... │ +│ \xD0\xB0\xD0\xBD\xD0\xB0\xD0\xBF\xD0\xB0 \xD0\xBE\xD0\xBF\xD0\xB5\xD1\x80\xD0\x... │ +│ \xD0\xB1\xD1\x80\xD0\xB8\xD1\x82\xD0\xB0 \xD0\xB3\xD0\xB0\xD0\xBD\xD0\xB0\xD0\x... │ +│ \xD0\xBA\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ +│ \xD0\xBE\xD1\x82\xD0\xB4\xD1\x8B\xD1\x85\xD0\xB0 \xD1\x87\xD0\xB5\xD0\xBC \xD0\... │ +│ \xD1\x80\xD0\xB0\xD1\x81\xD0\xBF\xD0\xB8\xD1\x81\xD0\xB0\xD0\xBD\xD0\xB8\xD0\xB... │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 0.231 user 3.648000 sys 0.008000 +D SELECT CounterID, avg(octet_length(URL)) AS l, count(*) AS c FROM hits WHERE octet_length(URL) > 0 GROUP BY CounterID HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25;L +┌───────────┬────────────────────┬─────────┐ +│ CounterID │ l │ c │ +├───────────┼────────────────────┼─────────┤ +│ 233773 │ 469.18537326484886 │ 2938865 │ +│ 245438 │ 271.7892512777364 │ 2510103 │ +│ 122612 │ 238.64530987208474 │ 3574007 │ +│ 234004 │ 204.28793262381632 │ 238660 │ +│ 1634 │ 197.83321731651554 │ 323229 │ +│ 786 │ 186.75537634408602 │ 120528 │ +│ 114157 │ 142.91881538575285 │ 216408 │ +│ 515 │ 126.22860040706026 │ 146907 │ +│ 256004 │ 125.37108455074805 │ 858171 │ +│ 95427 │ 120.26856903175477 │ 374306 │ +│ 199550 │ 109.81720498866335 │ 7115413 │ +│ 220992 │ 105.85666196266179 │ 494614 │ +│ 196239 │ 98.34882201749727 │ 163797 │ +│ 62 │ 93.15981711034343 │ 738150 │ +│ 96948 │ 92.74321182146618 │ 396093 │ +│ 188878 │ 91.98308322489247 │ 311998 │ +│ 249603 │ 91.88026594639518 │ 120325 │ +│ 3922 │ 87.83856410684609 │ 8527069 │ +│ 191697 │ 86.95776647628826 │ 124664 │ +│ 97467 │ 84.2953696503987 │ 131178 │ +│ 186300 │ 83.97258027738701 │ 802561 │ +│ 146891 │ 77.77430173504756 │ 605286 │ +│ 38 │ 76.43757015971798 │ 507770 │ +│ 230962 │ 76.3127707226559 │ 169223 │ +│ 77639 │ 75.38681923602442 │ 253961 │ +└───────────┴────────────────────┴─────────┘ +Run Time: real 0.439 user 6.632000 sys 0.300000 +D //(?:www\.)?([^/]+)/.*$', '\1') AS key, avg(octet_length(Referer)) AS l, count(*) AS c, min(Referer) FROM hits WHERE octet_length(Referer) > 0 GROUP BY key HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25; +┌────────────────────────────────────────────────────────────────────────┬────────────────────┬─────────┬────────────────────────────────────────────────────────────────────────────────────┐ +│ key │ l │ c │ min(referer) │ +├────────────────────────────────────────────────────────────────────────┼────────────────────┼─────────┼────────────────────────────────────────────────────────────────────────────────────┤ +│ svpressa.ru │ 307.980979437341 │ 242527 │ http://svpressa.ru/ │ +│ msuzie-showforumdisplay │ 263.327228380409 │ 183676 │ http://msuzie-showforumdisplay/63/~2/?name=&cost_neu%3D400%26retpath=default777... │ +│ saint-peters-total=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 80 │ 242.5236948271821 │ 200529 │ http://saint-peters-total=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 80/c... │ +│ domics │ 212.92990978061542 │ 326094 │ http://domics/825179.11931861234499792 │ +│ e96.ru │ 210.09628206687884 │ 1019276 │ http://e96.ru/%3Ffrom]=&input_act[count_num=0&dff=arian-carrina1201517&cad=rjt&... │ +│ gadgets.irr.ru │ 131.9597008950273 │ 349710 │ https://gadgets.irr.ru/2jmj7l5rSw0yVb │ +│ google.ru │ 109.24485253818524 │ 2158491 │ http://google.ru/ │ +│ go.mail │ 108.63930572737723 │ 8228007 │ http://go.mail/04/detskaia-moda-zhiensmed │ +│ msouz.ru │ 106.10887286512423 │ 301774 │ http://msouz.ru/?ffshop │ +│ state=19945206 │ 105.6469046513171 │ 512414 │ http://state=19945206/foto-4/login%20NoTs3M&where=all&filmId=u8aGGqtWs3M&where=... │ +│ loveplanet.ru │ 104.60136383347789 │ 461200 │ http://loveplanet.ru/%3Faw_opel/page=2013 │ +│ bonprix.ru │ 104.41683309557774 │ 1125105 │ http://bonprix.ru/ │ +│ novjob.ru │ 96.75331644732393 │ 133049 │ http://novjob.ru/ │ +│ cn.ru │ 95.63198716663325 │ 124675 │ http://cn.ru/GameMain.aspx#catalog/100523&tails.xml?market_pc.html?pid=9403&lr=... │ +│ geomethiettai.ru │ 94.78816556817006 │ 115916 │ https://geomethiettai.ru/GameMain.aspx?group=houses/list=266559j7077&num=7&prun... │ +│ kino │ 90.27628829938655 │ 120139 │ http://kino/6/21/2/women.asp?whichpage4/#oversion=unreadm&uid │ +│ yaroslavens.ru │ 90.17077281117085 │ 124610 │ http://yaroslavens.ru/main.aspx#catalog%2F1004-1100000147-otvet/actions/disloca... │ +│ mysw.info │ 89.68684313159915 │ 984596 │ http://mysw.info/ │ +│ m.myloveplanet.ru │ 88.73233749439181 │ 151564 │ http://m.myloveplanet.ru/ │ +│ povarenok.ru │ 83.97395952020882 │ 144813 │ http://povarenok.ru/ │ +│ gorod │ 80.33107253811141 │ 110728 │ http://gorod/%3Fauto.ria.ua%2Fjob │ +│ yandsearch │ 80.21664430621621 │ 245970 │ http://www.yandsearch/rooms=1/page2 │ +│ myloveplanet.ru │ 80.08183067768715 │ 110582 │ http://myloveplanet.ru/#associety/auto │ +│ tambov.irr.ru │ 77.8650188064113 │ 315318 │ http://tambov.irr.ru/0/c1/tgFtaeLDK0yb01A7xvQF08sjCFqQxn51 │ +│ kurortmag.ru │ 75.74958779884584 │ 155264 │ http://kurortmag.ru/ │ +└────────────────────────────────────────────────────────────────────────┴────────────────────┴─────────┴────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 119.865 user 1866.652000 sys 4.096000 +D + 82), sum(ResolutionWidth + 83), sum(ResolutionWidth + 84), sum(ResolutionWidth + 85), sum(ResolutionWidth + 86), sum(ResolutionWidth + 87), sum(ResolutionWidth + 88), sum(ResolutionWidth + 89) FROM hits; +┌──────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┐ +│ sum(resolutionwidth) │ sum(resolutionwidth + 1) │ sum(resolutionwidth + 2) │ sum(resolutionwidth + 3) │ sum(resolutionwidth + 4) │ sum(resolutionwidth + 5) │ sum(resolutionwidth + 6) │ sum(resolutionwidth + 7) │ sum(resolutionwidth + 8) │ sum(resolutionwidth + 9) │ sum(resolutionwidth + 10) │ sum(resolutionwidth + 11) │ sum(resolutionwidth + 12) │ sum(resolutionwidth + 13) │ sum(resolutionwidth + 14) │ sum(resolutionwidth + 15) │ sum(resolutionwidth + 16) │ sum(resolutionwidth + 17) │ sum(resolutionwidth + 18) │ sum(resolutionwidth + 19) │ sum(resolutionwidth + 20) │ sum(resolutionwidth + 21) │ sum(resolutionwidth + 22) │ sum(resolutionwidth + 23) │ sum(resolutionwidth + 24) │ sum(resolutionwidth + 25) │ sum(resolutionwidth + 26) │ sum(resolutionwidth + 27) │ sum(resolutionwidth + 28) │ sum(resolutionwidth + 29) │ sum(resolutionwidth + 30) │ sum(resolutionwidth + 31) │ sum(resolutionwidth + 32) │ sum(resolutionwidth + 33) │ sum(resolutionwidth + 34) │ sum(resolutionwidth + 35) │ sum(resolutionwidth + 36) │ sum(resolutionwidth + 37) │ sum(resolutionwidth + 38) │ sum(resolutionwidth + 39) │ sum(resolutionwidth + 40) │ sum(resolutionwidth + 41) │ sum(resolutionwidth + 42) │ sum(resolutionwidth + 43) │ sum(resolutionwidth + 44) │ sum(resolutionwidth + 45) │ sum(resolutionwidth + 46) │ sum(resolutionwidth + 47) │ sum(resolutionwidth + 48) │ sum(resolutionwidth + 49) │ sum(resolutionwidth + 50) │ sum(resolutionwidth + 51) │ sum(resolutionwidth + 52) │ sum(resolutionwidth + 53) │ sum(resolutionwidth + 54) │ sum(resolutionwidth + 55) │ sum(resolutionwidth + 56) │ sum(resolutionwidth + 57) │ sum(resolutionwidth + 58) │ sum(resolutionwidth + 59) │ sum(resolutionwidth + 60) │ sum(resolutionwidth + 61) │ sum(resolutionwidth + 62) │ sum(resolutionwidth + 63) │ sum(resolutionwidth + 64) │ sum(resolutionwidth + 65) │ sum(resolutionwidth + 66) │ sum(resolutionwidth + 67) │ sum(resolutionwidth + 68) │ sum(resolutionwidth + 69) │ sum(resolutionwidth + 70) │ sum(resolutionwidth + 71) │ sum(resolutionwidth + 72) │ sum(resolutionwidth + 73) │ sum(resolutionwidth + 74) │ sum(resolutionwidth + 75) │ sum(resolutionwidth + 76) │ sum(resolutionwidth + 77) │ sum(resolutionwidth + 78) │ sum(resolutionwidth + 79) │ sum(resolutionwidth + 80) │ sum(resolutionwidth + 81) │ sum(resolutionwidth + 82) │ sum(resolutionwidth + 83) │ sum(resolutionwidth + 84) │ sum(resolutionwidth + 85) │ sum(resolutionwidth + 86) │ sum(resolutionwidth + 87) │ sum(resolutionwidth + 88) │ sum(resolutionwidth + 89) │ +├──────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┤ +│ 151348908394 │ 151448908394 │ 151548908394 │ 151648908394 │ 151748908394 │ 151848908394 │ 151948908394 │ 152048908394 │ 152148908394 │ 152248908394 │ 152348908394 │ 152448908394 │ 152548908394 │ 152648908394 │ 152748908394 │ 152848908394 │ 152948908394 │ 153048908394 │ 153148908394 │ 153248908394 │ 153348908394 │ 153448908394 │ 153548908394 │ 153648908394 │ 153748908394 │ 153848908394 │ 153948908394 │ 154048908394 │ 154148908394 │ 154248908394 │ 154348908394 │ 154448908394 │ 154548908394 │ 154648908394 │ 154748908394 │ 154848908394 │ 154948908394 │ 155048908394 │ 155148908394 │ 155248908394 │ 155348908394 │ 155448908394 │ 155548908394 │ 155648908394 │ 155748908394 │ 155848908394 │ 155948908394 │ 156048908394 │ 156148908394 │ 156248908394 │ 156348908394 │ 156448908394 │ 156548908394 │ 156648908394 │ 156748908394 │ 156848908394 │ 156948908394 │ 157048908394 │ 157148908394 │ 157248908394 │ 157348908394 │ 157448908394 │ 157548908394 │ 157648908394 │ 157748908394 │ 157848908394 │ 157948908394 │ 158048908394 │ 158148908394 │ 158248908394 │ 158348908394 │ 158448908394 │ 158548908394 │ 158648908394 │ 158748908394 │ 158848908394 │ 158948908394 │ 159048908394 │ 159148908394 │ 159248908394 │ 159348908394 │ 159448908394 │ 159548908394 │ 159648908394 │ 159748908394 │ 159848908394 │ 159948908394 │ 160048908394 │ 160148908394 │ 160248908394 │ +└──────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┘ +Run Time: real 6.176 user 97.964000 sys 0.000000 +D SELECT SearchEngineID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10; +┌────────────────┬────────────┬──────┬──────────────┬──────────────────────┐ +│ SearchEngineID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├────────────────┼────────────┼──────┼──────────────┼──────────────────────┤ +│ 2 │ 1138507705 │ 1633 │ 35 │ 1408.0122473974282 │ +│ 2 │ 1740861572 │ 1331 │ 28 │ 1577.945905334335 │ +│ 2 │ 3487820196 │ 1144 │ 35 │ 1553.1984265734266 │ +│ 2 │ 3797060577 │ 1140 │ 36 │ 1543.4140350877192 │ +│ 2 │ 2349209741 │ 1105 │ 30 │ 1557.387330316742 │ +│ 2 │ 2424344199 │ 1102 │ 31 │ 1555.6588021778584 │ +│ 2 │ 3663904793 │ 1083 │ 31 │ 1581.8171745152354 │ +│ 2 │ 3829154130 │ 1082 │ 30 │ 1541.253234750462 │ +│ 2 │ 2551371145 │ 1080 │ 24 │ 1559.8092592592593 │ +│ 2 │ 4029049820 │ 1058 │ 32 │ 1556.2003780718337 │ +└────────────────┴────────────┴──────┴──────────────┴──────────────────────┘ +Run Time: real 0.991 user 13.144000 sys 0.080000 +D SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +┌─────────────────────┬────────────┬───┬──────────────┬──────────────────────┐ +│ WatchID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├─────────────────────┼────────────┼───┼──────────────┼──────────────────────┤ +│ 8425973212606442266 │ 3882647820 │ 2 │ 0 │ 1368.0 │ +│ 4822815447136935941 │ 4109934802 │ 2 │ 0 │ 1638.0 │ +│ 5851512534509153320 │ 3968091174 │ 2 │ 0 │ 1368.0 │ +│ 7542988325649023791 │ 303701440 │ 2 │ 0 │ 1828.0 │ +│ 6992742809870752121 │ 3979611525 │ 2 │ 0 │ 100.0 │ +│ 8469206111441108042 │ 1485652260 │ 2 │ 0 │ 1368.0 │ +│ 8268832962994556606 │ 1627418068 │ 2 │ 0 │ 1638.0 │ +│ 6959397072495903875 │ 1568492334 │ 2 │ 0 │ 1368.0 │ +│ 8672760597587433971 │ 1269590216 │ 2 │ 0 │ 1368.0 │ +│ 6637243485645608094 │ 1468144163 │ 2 │ 0 │ 1917.0 │ +└─────────────────────┴────────────┴───┴──────────────┴──────────────────────┘ +Run Time: real 1.552 user 16.744000 sys 0.356000 +D SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +┌─────────────────────┬────────────┬───┬──────────────┬──────────────────────┐ +│ WatchID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├─────────────────────┼────────────┼───┼──────────────┼──────────────────────┤ +│ 4784371382202293288 │ 3735345744 │ 2 │ 0 │ 1638.0 │ +│ 6711685491586624976 │ 1408513058 │ 2 │ 0 │ 1638.0 │ +│ 7162529939784944130 │ 3932318335 │ 2 │ 0 │ 1996.0 │ +│ 8775946809982825654 │ 3518457715 │ 2 │ 0 │ 1368.0 │ +│ 8716405327873619806 │ 3518457715 │ 2 │ 0 │ 1368.0 │ +│ 8723645685735855902 │ 2003188719 │ 2 │ 0 │ 1594.0 │ +│ 9007142022850874662 │ 4006219740 │ 2 │ 0 │ 1638.0 │ +│ 7542988325649023791 │ 303701440 │ 2 │ 0 │ 1828.0 │ +│ 4632233196500506143 │ 93692316 │ 2 │ 0 │ 1750.0 │ +│ 7726072175618541265 │ 1876840662 │ 2 │ 0 │ 1638.0 │ +└─────────────────────┴────────────┴───┴──────────────┴──────────────────────┘ +Run Time: real 55.584 user 81.372000 sys 17.980000 +D SELECT URL, count(*) AS c FROM hits GROUP BY URL ORDER BY c DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬─────────┐ +│ URL │ c │ +├────────────────────────────────────────────────────────────────────────────────────┼─────────┤ +│ http://liver.ru/belgorod/page/1006.j\xD0\xBA\xD0\xB8/\xD0\xB4\xD0\xBE\xD0\xBF_\... │ 3288173 │ +│ http://kinopoisk.ru │ 1625251 │ +│ http://bdsm_po_yers=0&with_video │ 791465 │ +│ http://video.yandex │ 582404 │ +│ http://smeshariki.ru/region │ 514984 │ +│ http://auto_fiat_dlya-bluzki%2F8536.30.18&he=900&with │ 507995 │ +│ http://liver.ru/place_rukodel=365115eb7bbb90 │ 359893 │ +│ http://kinopoisk.ru/vladimir.irr.ru │ 354690 │ +│ http://video.yandex.ru/search/?jenre=50&s_yers │ 318979 │ +│ http://tienskaia-moda │ 289355 │ +└────────────────────────────────────────────────────────────────────────────────────┴─────────┘ +Run Time: real 14.208 user 54.440000 sys 3.008000 +D SELECT 1, URL, count(*) AS c FROM hits GROUP BY 1, URL ORDER BY c DESC LIMIT 10; +┌───┬────────────────────────────────────────────────────────────────────────────────────┬─────────┐ +│ 1 │ URL │ c │ +├───┼────────────────────────────────────────────────────────────────────────────────────┼─────────┤ +│ 1 │ http://liver.ru/belgorod/page/1006.j\xD0\xBA\xD0\xB8/\xD0\xB4\xD0\xBE\xD0\xBF_\... │ 3288173 │ +│ 1 │ http://kinopoisk.ru │ 1625251 │ +│ 1 │ http://bdsm_po_yers=0&with_video │ 791465 │ +│ 1 │ http://video.yandex │ 582404 │ +│ 1 │ http://smeshariki.ru/region │ 514984 │ +│ 1 │ http://auto_fiat_dlya-bluzki%2F8536.30.18&he=900&with │ 507995 │ +│ 1 │ http://liver.ru/place_rukodel=365115eb7bbb90 │ 359893 │ +│ 1 │ http://kinopoisk.ru/vladimir.irr.ru │ 354690 │ +│ 1 │ http://video.yandex.ru/search/?jenre=50&s_yers │ 318979 │ +│ 1 │ http://tienskaia-moda │ 289355 │ +└───┴────────────────────────────────────────────────────────────────────────────────────┴─────────┘ +Run Time: real 4.586 user 65.340000 sys 0.188000 +D SELECT ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3, count(*) AS c FROM hits GROUP BY ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3 ORDER BY c DESC LIMIT 10; +┌────────────┬──────────────┬──────────────┬──────────────┬───────┐ +│ ClientIP │ clientip - 1 │ clientip - 2 │ clientip - 3 │ c │ +├────────────┼──────────────┼──────────────┼──────────────┼───────┤ +│ 4255045322 │ 4255045321 │ 4255045320 │ 4255045319 │ 47008 │ +│ 2596862839 │ 2596862838 │ 2596862837 │ 2596862836 │ 29121 │ +│ 3119147744 │ 3119147743 │ 3119147742 │ 3119147741 │ 25333 │ +│ 1696638182 │ 1696638181 │ 1696638180 │ 1696638179 │ 20230 │ +│ 1138507705 │ 1138507704 │ 1138507703 │ 1138507702 │ 15778 │ +│ 3367941774 │ 3367941773 │ 3367941772 │ 3367941771 │ 12768 │ +│ 3032827420 │ 3032827419 │ 3032827418 │ 3032827417 │ 11349 │ +│ 1740861572 │ 1740861571 │ 1740861570 │ 1740861569 │ 11315 │ +│ 3487820196 │ 3487820195 │ 3487820194 │ 3487820193 │ 9881 │ +│ 3663904793 │ 3663904792 │ 3663904791 │ 3663904790 │ 9718 │ +└────────────┴──────────────┴──────────────┴──────────────┴───────┘ +Run Time: real 4.737 user 38.872000 sys 0.148000 +D '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(URL) > 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +┌──────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├──────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 102341 │ +│ http://komme%2F27.0.1453.116 │ 51218 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18315 │ +│ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16461 │ +│ http://irr.ru/index.php │ 12577 │ +│ http://irr.ru/index.php?showalbum/login │ 10880 │ +│ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 7627 │ +│ http://irr.ru/index.php?showalbum/login-kupalnik │ 4369 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 4058 │ +│ http://komme%2F27.0.1453.116 Safari │ 3021 │ +└──────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.819 user 1.016000 sys 0.152000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(Title) > 0 GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ Title │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ \xD0\xA2\xD0\xB5\xD1\x81\xD1\x82 (\xD0\xA0\xD0\xBE\xD1\x81\xD1\x81\xD0\xB8\xD1\... │ 122407 │ +│ \xD0\xA8\xD0\xB0\xD1\x80\xD0\xB0\xD1\x80\xD0\xB0\xD0\xB9), \xD0\x92\xD1\x8B\xD0... │ 82935 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA - IRR.ru │ 80958 │ +│ \xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\xB8 New Era H (\xD0\x90\xD1\x81\xD1\x83\xD... │ 39098 │ +│ \xD0\xA2\xD0\xB5\xD0\xBF\xD0\xBB\xD0\xBE\xD1\x81\xD0\xBA\xD1\x83 \xD0\xBD\xD0\x... │ 23123 │ +│ Dave and Hotpoint sport \xE2\x80\x93 \xD1\x81\xD0\xB0\xD0\xBC\xD1\x8B\xD0\xB5 \... │ 14329 │ +│ AUTO.ria.ua \xE2\x84\xA2 - \xD0\x90\xD0\xBF\xD0\xBF\xD0\xB5\xD1\x80 │ 14053 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA (\xD0\xA0\xD0\... │ 13912 │ +│ OWAProfessign), \xD0\xBF\xD1\x80\xD0\xBE\xD0\xB4\xD0\xB0\xD1\x82\xD1\x8C │ 10919 │ +│ \xD0\xA2\xD1\x80\xD1\x83\xD1\x81\xD0\xB8 - \xD0\xA8\xD0\xBE\xD1\x83\xD0\xB1\xD0... │ 10157 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.870 user 1.416000 sys 0.040000 +D AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 7479 │ +│ http://aliningrad │ 4791 │ +│ http://ekburg.irr.ru%2Fpuloveplanet │ 3584 │ +│ http://smeshariki.ru/obucheyelants │ 3064 │ +│ http://video.yandex.php │ 2887 │ +│ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 1084 │ +│ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 891 │ +│ http://afisha.yandex.ru/index │ 855 │ +│ http://sslow_13507.html?aspx?naId=6HS │ 521 │ +│ http://wildberrior/uphold │ 484 │ +│ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 289 │ +│ http://obninsk/detail │ 241 │ +│ http://diary.ru/forum/intries │ 208 │ +│ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 185 │ +│ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 185 │ +│ http://kurort/SINA, ADRIAN │ 157 │ +│ http://afisha.yandex.ru │ 132 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 124 │ +│ http://ssl.hurra.com/iframe │ 123 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 119 │ +│ http://stars-visa.html_params%3Drhost%3Dad.adriver.ru/catalog.php │ 105 │ +│ http://komme%2F27.0.1453.116 │ 83 │ +│ http://pogoda.yandex │ 80 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 79 │ +│ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 73 │ +│ http://video.yandex │ 71 │ +│ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 68 │ +│ http://wildberries.ru/daily │ 68 │ +│ http://smeshariki.ru/ru/index.ru%26bid │ 68 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 64 │ +│ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 64 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn │ 63 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 59 │ +│ http://sslow_135000008&position=search │ 58 │ +│ http:%2F%2Fwwwwww.bonprix.ru/topic │ 53 │ +│ http://sslow_13507.html/articles │ 52 │ +│ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 51 │ +│ http://rsdn.ru/rss.ya.ru/catalog │ 51 │ +│ http://ekburg.irr.ru/#lingvo │ 46 │ +│ http://pogoda.yandex.ru │ 45 │ +│ http://sslow_13500000%26rnd%3D2788881.html │ 44 │ +│ http://maps#ru_5_ru_22106.377648194,975924][to]=&int[14270pa106&op_uid=17759/6#... │ 42 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 37 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 37 │ +│ http://video.yandex.ru/film/46351/frl-2/bage │ 36 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 35 │ +│ http://direct.yandex │ 34 │ +│ http://sslow_13507.html?aspx?naId=3X_3bhLcs3M │ 33 │ +│ http://gotovim-doma │ 32 │ +│ http://che.ru/produkty_zarubezhei-niepochekhly │ 31 │ +│ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 30 │ +│ http://video.yandex.ru/Newsletter │ 29 │ +│ http://sslow_13507.html?aspx?naId=6D8IzMGys3M │ 29 │ +│ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ http://video.yandex.ru │ 28 │ +│ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 28 │ +│ http://notes=1/currency │ 27 │ +│ http://sslow_13507.html?aspx?naId=649&state/out-of-town=\xD0\xA5\xD0\xB0\xD0\xB... │ 27 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 26 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 26 │ +│ http:%2F%2Fwwww.bonprix.ru/tambov │ 24 │ +│ http://kinopoisk.ru/shoppich.ru/search?clid │ 24 │ +│ http://wildberries │ 23 │ +│ http:%2F%2Fwwwwww.bonprix.ru/searchAutoSearch?text=\xD0\xB2\xD0\xB5\xD0\xBB\xD0... │ 22 │ +│ http://myloveplanet │ 20 │ +│ http://stars-visa-litraj.txt","lpu":"http://pogoda │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/secondary │ 20 │ +│ http://msuzie-shop/premiery-c-38208_2.html │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 20 │ +│ http://smeshariki │ 19 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 19 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ http://irr.ru/6323%26bn%3D27888895,96772,97436 │ 18 │ +│ http://kinopoisk.ru │ 18 │ +│ http://nepogoda.yandex.ru%2Fproducts/search?text=subscripts/busineshop │ 17 │ +│ http://wildberries.ru │ 17 │ +│ http://kinopoisk.ru/catalog/9902224 │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://direct.yandex.html │ 17 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 17 │ +│ http://irr.ru/6323%26bn%3D27888895,963095425 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 16 │ +│ http://afisha.yandex.php?gidcar=36281664 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://auto.ria.ua/search │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://direct │ 15 │ +│ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ http://irr.ru/index.php?showalbum/login-kupalnaya-obl │ 15 │ +│ http://kinopoisk.ru/odessya │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 14 │ +│ http://ekburg.irr.irr.ru/maker │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.yandex │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.mail/rnd=0.9788 │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://auto_many_to_auto.ria.ua/igrush43/ │ 13 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 13 │ +│ http://afisha.yandex.ru/cars │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 13 │ +│ http://love.ru/a-myprofi │ 13 │ +│ http: │ 13 │ +│ http:%2F%2Fwww.bonprix │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://real-estate/aparther/offiliates/corruption/russinsk │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 12 │ +│ http://on-online=on&accetti │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 12 │ +│ http://en.lyrsenses/zamba_zaborah_coldplay=1&gearbox │ 12 │ +│ http://kinopoisk.ru/saledParams │ 12 │ +│ http://samara.irr.html5/v12/?from]= │ 12 │ +│ http://zvukovo/hondar/2007&state/renlew/rigma.ru/scribed │ 12 │ +│ http://pogoda.yandex.php?SECTION │ 12 │ +│ http://msk/platia-nashing/vanny.diary.ru/moscow │ 12 │ +│ http://video.yandex.ru/GameMain.E6smreQhiu_hXR4&where=all&film │ 12 │ +│ http://nizhnieiene/p17378705/currency=1&with_photo-ideapadeno │ 11 │ +│ http://news/6483731559676/Unlocknotebooks/m83/800_D_Black_list │ 11 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 11 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty/photo-12/#imag... │ 11 │ +│ http://msk/platia-nashing/vanny.diary.ru/sale/liver │ 11 │ +│ http://video.yandex.ru/GameMain.aspx#location │ 11 │ +│ http://guid=6&pw=6&pv=13 │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 11 │ +│ http://wildberries.ru/rost.html?1 │ 11 │ +│ http://smeshariki.ru/?win=82&stat=1&page/196264&pt │ 11 │ +│ http://pogoda.yandex.ru/catalog/jokers │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 11 │ +│ http://en.lyrsenses/zamba_zabudtrimazok.html?page=12&prr=http://fap1.adrive_typ... │ 11 │ +│ http://bonprix.ru%26bid │ 11 │ +│ http://loveplanet.ru/GameMain │ 10 │ +│ http://bdsmpeople.ru │ 10 │ +│ http://liver.ru/cheboksicily/foto.aspx?sort=newly&trafkey │ 10 │ +│ http://video.yandex.ru&pvid │ 10 │ +│ http:%2F%2F%2Fwwww.bonprix │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://club.ru/spokoiteli/photo37775280000 │ 10 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 10 │ +│ http:%2F%2Fwwww.bonprix │ 10 │ +│ http://auto_id=240&n=13901038 │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 10 │ +│ http://smeshariki.ru │ 10 │ +│ http://slovariant_new3077940810/detail │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://en.lyrsenses/zamba_zabor_id=1012_blank%26site │ 10 │ +│ http://sslow_13500000%26rnd%3D2788881.html?parts/passe │ 10 │ +│ http://pogoda.html%3Fhtml_params%3Drhost%3D43 │ 10 │ +│ http://irr.ru/index.php?showalbum/logout%26verstova.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://pogoda.yandex.php │ 9 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film/6781203.html?id=242037047/detai... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://mysw.info/blog/sankt-peter%3D1216/00001216629 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://e96.ru/albumfotok-15-fotki │ 9 │ +│ http://alpari.yandex.html?html_param=0&users/#page/Search/ab_dob%2Ffieiie-razvo... │ 9 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu │ 9 │ +│ http://bonprix.ru/catalog/8570/1006790 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://b2b.testered/main/discuss/matched_country=-1&top=0&cityid=1024&wi=1366&o... │ 9 │ +│ http://svpressa.ru/topic=17082630 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://bonprix.ru │ 9 │ +│ http:%2F%2Fwwww.bonprix.ru/filmId=8j5j97LRs3M&where=all&sources │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/#win_13.html_p... │ 9 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/4744089758 │ 9 │ +│ http://nail=Yes&target=search │ 9 │ +│ http://rlsnet.ru/vacancy/view_type_id=9677548268010367 │ 9 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_produkty%2F&sr=http://slovaria │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/imagecache/wm/2013&where=all&filmId │ 8 │ +│ https://m.myloveplanet.ru/forum/abrika-kobelenie_nebestsenal │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 8 │ +│ http://zapchast.com/iframe-owa.html?1=1&cid=577&oki=1&op │ 8 │ +│ http://afisha.yandex.php?t=141880517 │ 8 │ +│ http://poisk.ru/price_ot=&price_ot=&price │ 8 │ +│ http://zarplata.ru/velika_all=\xD0\xBE\xD1\x82 │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http:%2F%2Fwwwwww.bonprix.ru/news/222974895&op │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://fore=3&marka=0&top=0 │ 8 │ +│ http://direct.yandex.ru/catalog │ 8 │ +│ http://video.yandex.ru&xdm_p=1#item/search │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96777&oki │ 8 │ +│ http://zarplata.ru/?p=12977-B26358/currency=RUR/page=1080&wi=1024&lo=http://rzh... │ 8 │ +│ http://masterh4.adriver.yandex │ 8 │ +│ http://en.lyrsenses/zamba_zabor/bedroomolsk │ 8 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://mastered/main.aspx#location=1&bc=3&ct=1&pr=60322056107100919/page5/?_h=s... │ 8 │ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ==&page_avtomodules.php?f=100&ref... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://omsk.mlsn.ru │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96779/87 │ 8 │ +│ http://afisha.yandex.php?gidcar=367108851%2Fr%2F1 │ 8 │ +│ http://che.ru&pvid=13733142835/100/topic,5240556895&ch=UTF-8&sF=11,7,7,0 │ 8 │ +│ http://smeshariki.ru/GameMain │ 8 │ +│ http://love.ru/?p=17059 │ 8 │ +│ http://wildberries.xml?from]=&input │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://irr.ru/index.php?showalbum/login-kupit-topy%2Fplatjie-gotovlexandex.html... │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 8 │ +│ http://auto.ria.ua/auto_id=24126629/0/index.ru/real-estate/out │ 8 │ +│ http://victor?page_type=city.stol-yar.ru/cars │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://kinopoisk.ru/ch/feed/letniaiaprice/1609 │ 7 │ +│ http://video.yandex.ru%2F&sr=http://loveplants/65398f55 │ 7 │ +│ http://real-estate/aparts/Aquarevski │ 7 │ +│ http://bonprix.ru/social/product_id │ 7 │ +│ http://moscow/detail/5552/0/2792834&m=111,7,7,5 │ 7 │ +│ http://video.yandex.ru/a-album/login-vitiju/photo │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 7 │ +│ http://irr.ru/index.php?showalbum/login-kapustics?sort=pogoda.yandex.ru%26bt%3D... │ 7 │ +│ http://irr.ru/Registered/main/topnewsru.com/page=6 │ 7 │ +│ http://bonprix.ru/catalog/8570/14139489 │ 7 │ +│ http://afisha.yandex.ru/\xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB0/\xD0\x91\xD0\xA1\xD0\x... │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://love.ru/?p=1#country=&op_seo │ 7 │ +│ http://irr.htm?from]=&int[85][from]=&input_vsegodnyie │ 7 │ +│ http://bdsmpeople.ru/niktory/shtory/308/roomed.ru/p59473682740295 │ 7 │ +│ http:%2F%2Fwwwww.bonprix │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 7 │ +│ http://myloveplantrackIt?tid │ 7 │ +│ http://spb/event=big&marka=84&model=0&auto_id=0&s_yers=0&pv=10&can_be_check_PP │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 7 │ +│ http://pogoda.yandex.ru&pvid=1 │ 7 │ +│ http://irr.ru/index.php?showalbum/login-a-5-advert27114 │ 7 │ +│ http://video=0&is_hot │ 7 │ +│ http://bdsmpeople │ 7 │ +│ http://irr.ru/index.php?showalbum/login-zk34/pages/0001216629 │ 7 │ +│ http://svpressa.ru │ 7 │ +│ http://money.yandex │ 7 │ +│ http://gotovim-doma.ru │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 7 │ +│ http://afisha │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://afisha.yandex.ru%2F%2Fmail/169 │ 6 │ +│ http://omsk/evential/house.ru/catalog/kitchedule=213-606361653965283 │ 6 │ +│ http://video.yandex.ru%2Fkategory_id │ 6 │ +│ │ 6 │ +│ http://love.ru/?p=1#country=-1&sq_liver.ru/kyrgyzstan │ 6 │ +│ http://video.yandex.ru/ekt │ 6 │ +│ http://stars-varenok.ru/16745959680706/800_0.jpeg.html%3Fhtml5/v123593 │ 6 │ +│ http://afisha.yandex.ru/catalog=on │ 6 │ +│ http://bdsmpeople.ru/film/64544.690022.rar.html_params%3Drhost%3D_black_list=0&... │ 6 │ +│ http://v102.ru/investate/apartments-sale │ 6 │ +│ http://bdsmpeople.ru/GameMain │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://video.yandex.ru/GameMain.aspx#location/page_type=category │ 6 │ +│ http://afisha.yandex.ru%26bt%3D43%26anbietersburg │ 6 │ +│ http://wildberries.ru/search │ 6 │ +│ http://omsk/evential/housession%3D0 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://video.yandex.ru/a-topy │ 6 │ +│ http://direct.yandex.ru/refererprofile%2F2.10 │ 6 │ +│ http://rukodel=0&sort=newly&trafkey=2750 │ 6 │ +│ http://moscow/details │ 6 │ +│ http://smeshariki.ru/world/photofider_credit=0&view │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://novosibirsk.irr.ru%26bid │ 6 │ +│ http://irr.ru/index.php?showalbum/login-12.html%26custom │ 6 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 6 │ +│ http://solutions.diary.ru/realtitroenie_v_jurman.ru/albums/frame-owa.html?stric... │ 6 │ +│ http://mr7.ru/newsru.com/iframe_right%3D43 │ 6 │ +│ http://smeshariki.ru/catalog │ 6 │ +│ http://autodoc.ru/real-estate/apart │ 6 │ +│ http://edp2.adriver.ru/hocketshop.ru/moscow/detailanude │ 6 │ +│ http://povari.yandex.ru/greecondary/Products_id=&auto_vaz_2111 │ 6 │ +│ http://ereal-estate/rent │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://afisha.yandex.php/board,39.04839 │ 6 │ +│ http://msk/platia-nashing/vantralitsa_transion │ 6 │ +│ http://novo/detail.aspx?group_cod_1s │ 6 │ +│ http://video.yandex.ru/catalog │ 6 │ +│ http://3dnewsru.com/iframe_right.html?1=1&cid=51538 │ 6 │ +│ http://forum/topnews/22294&op_category │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://auto_hyundai_sarator │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://kalininmyclonus1 │ 6 │ +│ http://bdsmpeople.ru/saledParams=rhost%3D43%26bid%3D1 │ 6 │ +│ http://love.ru/?p=17055335 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://afisha.yandex.ru/mymail.php │ 6 │ +│ http://real-estate=week/page=1&expand_search?film/298677435615.html │ 6 │ +│ http://koolinar.ru/port.ru/doc │ 6 │ +│ http://afisha.yandex.ru/index.ru/recipe │ 6 │ +│ http://kinel-lab.com/rus/20130709_117485994,93304&op_seo_entry=1&gearbox=0&type... │ 6 │ +│ http://video=0&with_exchangeType │ 6 │ +│ http://diary.ru/exp?sid=3205 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://video.yandex.php?search?text=\xD0\x9A\xD0\xBE\xD0\xBD\xD1\x8C\xD1\x8F\xD... │ 6 │ +│ https://slovakia-600dd903c07022,101595,91194&op_seo_entry │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://video.yandex.php?from]=&interapy-wkti/ &cd │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D8393224 │ 6 │ +│ http://love.ru/ru/irk/event/search/ │ 6 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 5 │ +│ http://kinopoisk.ru/catalog │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://auto_volkswagen/vologdano/il_dlya-dnevka.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://barnaul/details/?cauth │ 5 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD0\xB5\xD1\x80&where=... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://sp-mamrostova │ 5 │ +│ http://zvukovo-gorodsk │ 5 │ +│ http://metal-lodku-Obzor │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 5 │ +│ http://tp66.ru/exp?sid=3860217/rooms=2/men.aspx#location%3D0%26rnd │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://video.yandex.by/?state_id=&auth=1..630;IC,7711588 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 5 │ +│ http:%2F%2Fwwww.bonprix.ru/?id=2013&where=all&filmId │ 5 │ +│ http://rmnt.ru/search/offilia_Sovetov_living_chamber/?78142 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://e96.ru/movies/614418821/artir.ua/search │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://slovari.yandex.ru%26orderovskij-index.ru │ 5 │ +│ http://povari.yandex │ 5 │ +│ http://tks.ru/cat/publish-cherkalnaya-ttpodporyadushek │ 5 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_seo_entry=&op_category_... │ 5 │ +│ http://slovarenok.com │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://video.yandex.ru/GameMain.aspx?Link │ 5 │ +│ http://auto.ria.ua/auto_id=241269.html?1=1&cid=2127970 │ 5 │ +│ http://slovari.yandex │ 5 │ +│ http://rustnye-sht-riemnikoi │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://radio&planet.ru/work.ru/catalog │ 5 │ +│ http://auto_volkswagen-Palities/horobki │ 5 │ +│ http://afisha.yandex.php?r=23436303135353.html?1 │ 5 │ +│ http://en.lyrsenses/zamba_zaborah_chamberk │ 5 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 40007&pt │ 5 │ +│ http://love.ru/product_id=0&po_yers=0&po_yers=2&refererro/model=1346488078722&c... │ 5 │ +│ http://myloveplanet.ru/v14572&lb_id=13000001216629 │ 5 │ +│ http://pogoda.yandex.php?gidcar │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://sslow_135000008&position=search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 5 │ +│ http://bibidohertki-i-OOOO_REPORT/07_2013 │ 5 │ +│ http://autodoc.ru/moscow │ 5 │ +│ http://avtomobile/motory.ru/comp.ru/view.php │ 5 │ +│ http://topnews.ru/GameMain.aspx?group_cod_1s=1983&pt=b&pd=9&pw=0 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://real-estate=week&m=Dvigenie.html?option │ 5 │ +│ http://loveplanet.ru/mymail/rudi │ 5 │ +│ http://video.yandex.ru/firms.turizm │ 5 │ +│ http://video.yandex.ru%2FkategoriendflowerTo=&powerTo= │ 5 │ +│ http://auto.ria.ua/auto │ 5 │ +│ http://auto.ria.ua │ 5 │ +│ http://nizhnieiewva88/photo/101246465376&cmd=show-to-buchaiev-pugache=51db32a68... │ 5 │ +│ http://msk/platia-nashing/vannyie-product_id=1841&page2 │ 5 │ +│ http://tks.ru/cat/publish-chemec.ru/search?filmId=CktclMBmUXI │ 5 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D158197%26width │ 5 │ +│ http://direct.yandex.ru/index │ 5 │ +│ http://club.ru/cinema/movies/no-pos │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://kinopoisk.ru/spb.pulscen.ru/exp?sid=3159&op_category_id=&auth=0&checked=... │ 5 │ +│ http://holodilnik-rp-ploschaya-obuv/?ci=1280&with_video=0&choosOyg==&op_uid=111... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://slovariant_neu%3D1%26bid%3D1216/0001216629%26bt%3Dad │ 5 │ +│ http://wildberries.ru/real │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://md.mirkovskaya-obl.irr.ru/jobinmoscow │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://wildberrior/kia/ │ 5 │ +│ http://jcmotorom-921205&bt=7 │ 5 │ +│ http://loveplanet.ru/\xD0\xB0\xD1\x80\xD0\xBE\xD0\xBC/curre-ap-i-showalbum/loui... │ 5 │ +│ http://en.lyrsense.com/obshchin-idieiala │ 5 │ +│ http://povari.yandex.php?showalbum/login.pl?cl=all&film/497794,90458 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://video.yandex.ru%26bt%3Dad.adriver.ru/recipe/view/10217/?from │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://smeshariki.ru/topic │ 5 │ +│ http://moscow/detail/Torgovuyu-organske.ru/real-estate │ 5 │ +│ http:%2F%2Fwww.bonprix.ru │ 5 │ +│ http://gaylyU │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://loveplanet.ru │ 5 │ +│ http://alib.mist.html%26custom%3D%26c2%3D278888592138 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://alpari.ru/gallery/pic845274 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://whoyougle.ru/images/images/00000i/specifiers.ru/image=1&furniture │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 4 │ +│ http://loveplanet │ 4 │ +│ http://video.yandex.ru/price │ 4 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 4 │ +│ http://video.yandex.ua │ 4 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 4 │ +│ http://sslovarenok.ru │ 4 │ +│ http://auto.ria.ua/auto_id=0 │ 4 │ +│ http://afisha.yandex.ru/zoom.php?f=5162613838.html_partments │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://loveche.html │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/filmId │ 4 │ +│ http://samarskii_krai/tuapse/detail/result.aspx │ 4 │ +│ http://irr.ru/index.php?showalbum/login-10618968476372773 │ 4 │ +│ http://bdsmpeople.ru/Web/Pages=1/feedsmag.ru/~\xD0\xBA\xD0\xBD\xD0\xB8\xD0\xB3\... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://e96.ru/news/39733/page2=&input_sponsor=&o=1015219.html_partments-sale&pa... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://radio&planet.ru/marka=62&model=1178128455&pvno=2&evlg=VC,5 │ 4 │ +│ http://wildberries.ru/catalog │ 4 │ +│ http://afisha.yandex.ru%252f7769%252fe │ 4 │ +│ http://echoradar-s-Levoshcha │ 4 │ +│ http://love.ru/?p=1#countpage/vacancies/events/738/0/3/women.aspx │ 4 │ +│ http://direct.yandex.php?formsof(INFLECTION_ID=30861/14365-4b11&state/apartment... │ 4 │ +│ http://diary.ru/catalog=on&input_city[3 │ 4 │ +│ http://rasp.pl?cmd │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 4 │ +│ http://travel.ru/state/apartments-sale/rashinitit%2F537 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.php?view_type=2&driveresult.ru/replies │ 4 │ +│ https://smeshariki.ru/cinema/article10363136000001216629%26site_offilia_Sovets.... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://afisha.yandex.php?r=3&bs=&day │ 4 │ +│ http://ssl.hurranovskaya-ul-31-foto.ria │ 4 │ +│ http://kinopoisk.ru/saledParams%3Drhost%3Dad.adriver.ru/GameMain.aspx#location │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://auto.ria.ua/auto_id=63799.html_params │ 4 │ +│ http://vkirovoe-tourisma │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://smeshariki.ru/domchelkakh_location=search?text=\xD0\xBC\xD0\xB8vents │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboy07/... │ 4 │ +│ http://card/windows)&bL=ru&cE │ 4 │ +│ http://kniga.ru/view=\xD0\xA1\xD1\x82\xD0\xB0\xD0\xB2\xD1\x80\xD0\xBE\xD0\xB2&w... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://smeshariki.ru/search/keukeru-soft │ 4 │ +│ http://guid=6&pw=2&pv=0&price_do=¤cy=1 │ 4 │ +│ http://v102.ru/?s=Adaments-sale │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/real │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://afisha.yandex.ru/search │ 4 │ +│ http://zarplata.ru/?p=12977-B26358/hasimages=1/page │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://matched_car=373838928155755775482794,9453.116 Safari%2F537.36&he=10&s_ye... │ 4 │ +│ http://video.yandex.ru/GameMain.aspx#location-4.0.html │ 4 │ +│ http://video.yandex.ru/GameMain.XYyZwYXRoPWEtbG9nb24vcG90Cw │ 4 │ +│ http://tks.ru/cat/publish-chernyjbelyj-9375966238&op_categoriya │ 4 │ +│ https:%2F%2Fwwww.yandex.ru │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://nizhny novgorod │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/social │ 4 │ +│ http://video.yandex.ru/realty/leaser_map=1/hasimay-2.html │ 4 │ +│ http://auto.ria.ua/canel_pe_mascona Hilfigeratov/153228 │ 4 │ +│ http://video.yandex.ru%26target=search/ab_area=categorija80119 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://guide.travel.ru/link │ 4 │ +│ http://victorhead.php?full&dom=780067167694.0; │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://kubikus.ru/search.php?r=4140211,1,7,7,7,7,0 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://e-kuzbass.ru/a-shop │ 4 │ +│ http://svpress_up.aspx#location[propfilter_pf[PODVAL]=&arrFilter][3463351841195... │ 4 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/cart.php/cars/papago-d-plosch │ 4 │ +│ http://afisha.mail.aspx#locationalOffers │ 4 │ +│ http:%2F%2Fwwww.bonprix.ru/real-estate/out-of-town/house │ 4 │ +│ https://produkty%2Fpulove.ru/gost/?page3 │ 4 │ +│ http://fitness/building │ 4 │ +│ http://afishi,Mudanted-belyj-974299099/guest-id=34089.html │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://anketka.ru/bridget │ 4 │ +│ http%3A//magnitogorod/page3/#over │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://afisha.yandex.php?action/2741920 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadbor_sh... │ 4 │ +│ http://tks.ru/cat/public/gamemain.aspx#location │ 4 │ +│ http://video.yandex.ru/GameMain/dukhovyy │ 4 │ +│ http://nepogoda.yandex.ru/search=1&target=search=0&can_be │ 4 │ +│ http://love.ru/image=2&marka=84&model/mihailovo │ 4 │ +│ http://kinopoisk.ru/searchAutoSearch=0&driver.ru/catalog/1/women.aspx#locationp... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://afisha.yandex.php?show=rlv&ru=1&expand_search │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://love.ru/?p=1705 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://internet Explorer&aV=5.0 (Windows)&bL=en │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://pogoda.yandex.ru/cooking_sm5_1148786993ab-417/photo/69363/26#formi.ru/co... │ 4 │ +│ http://auto_volkswagen_cated_cartovskaya-obl.irr.ru/album/login │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://afisha.yandex.php?p=31&input │ 4 │ +│ http://loveche.ru/job/1162323&PAGEN_1=30&state │ 4 │ +│ http://video.yandex.ru/If yours.avtogsm.ru/animals/calculate │ 4 │ +│ http://ssl.hurra.com │ 4 │ +│ http://auto_s_product_name=\xD0\x9A\xD1\x80\xD1\x83\xD0\xB3\xD0\xBB\xD0\xBE\xD0... │ 4 │ +│ http://rsdn.ru/details_103514,154;IC │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://inspelishchin-platjie-doma.ru/irkutsk.irr.ru │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://auto_volkswagen_pass_1161967 │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD1\x82\xD0\xBE\xD1\x8... │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboyzon... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://video.yandex.ru/topnews.ru/lanas-advert2713][to]=&int │ 4 │ +│ http%3A//edp1.adriverys/forum/view_type=city&custom=0&damages/0001216629%26bid%... │ 4 │ +│ http://auto_id=0&with_photo │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://afisha.yandex.ru/content2.adriver │ 4 │ +│ http://arma/frl-4/transportnoy-kv-m-malchik.ru/show │ 4 │ +│ http://en.lyrsenses/zamba_zabudka/photo-1/#page=0&sale/search?text=\xD0\x9C\xD0... │ 4 │ +│ http://b.kavanga.ru/?a=inneVolumeFrom │ 4 │ +│ http://smeshariki.ru/saint-petersburg-gorod/transfer/?id=7576149959760994861&op... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://afisha.yandex.ru&pvid=13733424 │ 4 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_category_id=592b9e01c48ce9403%26bn%3D0%2... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/GameMain │ 4 │ +│ http://tp66.ru/money.yandex.ru/albums_screenterval │ 4 │ +│ http://irr.htm?from]=&int[1151;IC,112 │ 4 │ +│ http://bdsmpeople.ru/film/64544.690078 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://romar/events/audio.ru/widget[]=vacancies/99.php?gidcar │ 3 │ +│ http://banantikov-nadushenie_orleona_server=sc.cheloveplant_11612/page │ 3 │ +│ http://afisha.yandex.php/topic104780204&op_uid=1954 │ 3 │ +│ http://afisha.yandex.php/tova.ru/uliya2076789599305953 │ 3 │ +│ http://afisha.yandex.ua/donetsk/urals │ 3 │ +│ http://afisha.yandex.ru/a-folders/misc │ 3 │ +│ http://afisha.yandex.ru/shop.ru/malta │ 3 │ +│ http://afisha.yandex.ru/project_price=&maxprice │ 3 │ +│ http://afisha.yandex.ru/kategoriya%2F5.0 (company │ 3 │ +│ http://afisha.yandex.ru/linkvac.php/board.php?topicseeng │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://kinopoisk.ru/service.ru/iframe │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://irr.kz/realty/lease/3516093&pvno=2&evlg │ 3 │ +│ https://produkty%2Fplatjie-kuzbass.ru/newsru.com/iframe_right=0&auto_ria=0&meta... │ 3 │ +│ http://fuckfind=rent/view/2021/3 │ 3 │ +│ https://orenburg/?arrFiltersburg │ 3 │ +│ http://radioscannerica/filmId=Ba_id=13733568414&city=\xD0\x9C\xD0\xBE\xD1\x81\x... │ 3 │ +│ http://radiorecord.ru/login-m3w.html?1=1&cid │ 3 │ +│ http://video.yandex.ru%2Fplata.ru/ch │ 3 │ +│ http://samara.irr.ru%2Fproduct │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://sp-money.yandex.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://astrobank.ru/image │ 3 │ +│ http://forum/topnews/2229605699574.html?1=1 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://love.qip.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://afisha.yandex.ru/forum.materinburg │ 3 │ +│ http://afisha.yandex.php?addriver.ru │ 3 │ +│ http://video.yandex.by/search/?target%3D43%26bid%3D2 │ 3 │ +│ http://love.ru/forum.cofe.ru/forum/view_type=city=790&Selectronics-technik │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ https://slovakia-600dd903c07022,101595,9143531427800648_elit │ 3 │ +│ http://wildberrior/bedroom]=&int[17][to]=&int[858 │ 3 │ +│ http://sp-money.yandex.ru/work rushki-sien-natalog/8570/page=0&expand │ 3 │ +│ https://slovakia-600dd903c06c999c226647639.html%3Fhtml │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category_id=0&wi=16000&... │ 3 │ +│ http://direct&sortdirect.yandex.ru/imagesize%3D0%26ar │ 3 │ +│ http://auto_kia_30 │ 3 │ +│ http://ssl.hurral=messages │ 3 │ +│ http://sp-mamrostokonkursovet │ 3 │ +│ http://kaluga/?ext=\xD0\xB3\xD0\xB5\xD1\x80\xD0\xBE\xD1\x8F\xD1\x82\xD0\xBD\xD1... │ 3 │ +│ http://video.yandex.ru&pvid=13735/?_h │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://rmnt.ru/stars │ 3 │ +│ http://edp2.adriver.ru/catalog/181 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://video.yandex.ru/circle&state/out-of-town/houses │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://bdsmpeople.ru/search │ 3 │ +│ http://b.kavanga.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http:%2F%2Fwww.bonprix_ru}%2Fnizhniynovgorod/request-id │ 3 │ +│ http://video.yandex.ua/auto_id │ 3 │ +│ http://rmnt.ru/film/88677/russia/rio.ru/search?filmId=NNr6aJrm4s3M │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://kazan.irr.ru/location │ 3 │ +│ http://pogoda │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://pogoda.yandex.kz/family │ 3 │ +│ http://edp2.adriver.ru/jobinmoscow/detail │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.ru/forum.donfiscategory │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://video.yandex.php?topbloveche │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com/iframe-owa.html?1=1&cid=577&o... │ 3 │ +│ http://nigma.ru/product&op_category_name=\xD0\x91\xD0\xB8\xD0\xBA\xD0\xB8\xD0\x... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://card/windows NT 6.1) AppleWebKit%2F5 │ 3 │ +│ http://tks.ru/cat/publish-chin-play.php?categoriya%2Fzhiensmed │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ https://produkty%2Fpulove.ru/voronezh-sien-zhienskaia-moda-zhienskaia-moda-zhie... │ 3 │ +│ http://svpress_w1t1042796786/6/?category │ 3 │ +│ http://radiorecord.ru/catalog/idShare │ 3 │ +│ http://msk/planet.ru/mymail.aspx#comme_me_saydinne │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountpage │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://ussuriysk.irr.ru/catalog/premiere/628962851d7fd0b6eb17b321d336f5bc7de189... │ 3 │ +│ http://ekategoriya%2F9B206 Safari │ 3 │ +│ http://magnitka_1_series.ru/?favorite_id=636233644&op_category_id=937514 │ 3 │ +│ http://afisha.yandex.ru/tatatit_chto.php?industry │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://smeshariki.ru/a-phony │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://omsk/evential/housession%3D0%26url%3D//ad.adriver.ru/link/justic/h2.php/... │ 3 │ +│ http://smeshariki.ru/catalog/286/women.aspx │ 3 │ +│ http://svpress/showbiz/photo.htm │ 3 │ +│ http://svpressa.ru/content/search │ 3 │ +│ http://video_dvd/game/iframe-owa.html │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/92054446660.ht... │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty%2Ftanki │ 3 │ +│ http://loveche.ru/volzhskiy │ 3 │ +│ http://sp-mamrostovestory │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://e96.ru/real-estate │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://my.kp.ru/albumfoto-1/pol-2 │ 3 │ +│ http://holodilnik.ru/catalog │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://smeshariki.ru/?win=82&stat=141882,373;IC,2552f48 │ 3 │ +│ http://personal/atlants/7292&xdm_c │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://msk/platia%2Fzhienskaia │ 3 │ +│ http://tp66.ru/search/?page=1&fuelRateTo │ 3 │ +│ http://povarenok.ru/files/eliteh.ru/perm.irr.ru/board,75.2013-07-09 │ 3 │ +│ http://love.ru/?p=1#country=&op_seo_entry=-1&target │ 3 │ +│ http://amobil-nye-pliazhnaia │ 3 │ +│ http://lk.wildberries │ 3 │ +│ http://brand=498&pvno │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory_id=577&search/ab_district/date_id=2271][from... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostavia.travel.ru/s... │ 3 │ +│ http://irr.ru/washek-s-printom │ 3 │ +│ http://irr.ru/index.php?showalbum/login-kupaljinik-chere │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://product_brand=RAINBOW&op_cated_content/search/keup/en-ru │ 3 │ +│ http://wildberries.ru/item_no=2&evlg=VC,0;VL,205;IC,14;VL,757138/currency=RUR/h... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://afisha.yandex.php?app=membered │ 3 │ +│ http://afisha.yandex.php?ELEMENT_ID │ 3 │ +│ http://afisha.yandex.ru/lesyach-hotels │ 3 │ +│ http://msuzie │ 3 │ +│ http://afisha.yandex.ru%26bt%3D90%26nid%3D1216629 │ 3 │ +│ http://afisha.yandex.php?id=727285 │ 3 │ +│ http://smeshariki.ru/goodavec/photo/6936325.html?id=223978/page=102 │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://love.ru/recipes/indows │ 3 │ +│ http://str_ob.html?1=1&choosO8gPJSs3M&where=all&filmId=mAyiC7y6M2mGV2GoA9hFoN3q... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic=79799398/?_h=search.htm... │ 3 │ +│ http://3dnews.ru/?p=12636464/5#f │ 3 │ +│ http://love.ru/ru/irk/event=little&cated_country=-192.html?1=1&cid │ 3 │ +│ http://love.ru/?p=17057 │ 3 │ +│ http://smeshariki.ru/real │ 3 │ +│ http://kinopoisk.ru/search │ 3 │ +│ http://kaluzha-na-NovletedAutoSearch=0 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://pogoda.yandex.ru/real-estate │ 3 │ +│ http://soft.oszone.ru │ 3 │ +│ http://povaria/chak_naytimes.ru │ 3 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD0\xB2\... │ 3 │ +│ http://li.ru/filmId=XpzlPj8P8gE&where=all&text=\xD1\x81\xD0\xBA\xD0\xB0\xD1\x87... │ 3 │ +│ http://kinopoisk.ru/sessulyanovka.ru/photosessid=3205&bt │ 3 │ +│ http://wildberries.ru/basket&ch │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberries.ru/GameMain │ 3 │ +│ http://afisha.yandex.ru/comment/search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 3 │ +│ http://afisha.yandex.ru%2Fobuv-sapozhkivka=23&price │ 3 │ +│ http://afisha.yandex.ru/hotel-agen-Goluboj-9730 │ 3 │ +│ http://notebooking pressa │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://state/room=94720-recept-Salat-iz-glasya1lesyat │ 3 │ +│ http://you_hashkaf.ua/search │ 3 │ +│ http://auto_repairs=0&confiscategoriya │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://auto_id=0&engineVolumeFrom │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://video_dvd/ratesTypeSearch?text=\xD1\x87\xD0\xB5\xD0\xBB\xD0\xBE\xD0\xB2\... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://auto_repairs=0&po_yers=0&price.ru/\xD0\xB6\xD0\xB5\xD0\xBB\xD0\xB5\xD0\x... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://smeshariki.ru/GameMain.aspx#location │ 3 │ +│ http://slovari.yandex.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://audio_video.yandex.ru/mosday.html?item=4#photo446962 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://v102.ru/investate/apartment/?id=137336IseNhcbx3J85GkHSnzgnsPdZUU&where=a... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com.ua/kiev/detail.ru/auth=1..640... │ 3 │ +│ http://video.yandex.ru/personal/offeebe34c7e12944&op_product │ 3 │ +│ http://pogoda.yandex.ru/vlas-moskovskaya │ 3 │ +│ http://video.yandex.ru/extra │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/photo/narod.irr.ru/katering=1&pr=569&s_yers │ 3 │ +│ http://dom.net/provoe-pervouralnaya/ChildGluZ19oZXJlci1kYXRpb25zPU4mbj0zJmlkPTM... │ 3 │ +│ http://trashbox.ru/book │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ https://slovarenok │ 3 │ +│ http://afishers/story │ 3 │ +│ http://love.ru/ru/irk/event=little&category_id=731-643736&mode=1 │ 3 │ +│ http://alpari.yandex.ru/saint-petersburg.irr.ru/cars/page3 │ 3 │ +│ http://auto_ford Mix).mp3.ucoz.ru/v1430497.html%3Fhtml │ 3 │ +│ http://kommersantamina │ 3 │ +│ http://guid=6&pw=2&pv=0&with_video.yandex.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.ru/cgi-bin/click.cgi%3Fsize │ 3 │ +│ http://state_shariki │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://bdsmpeople.ru/show/39932/Itemid,40.0.html_params%3DfsSaHR0cDovL2pzLnNtaT... │ 3 │ +│ http://afisha.yandex.php?partments │ 3 │ +│ http://video.yandex.ru/real-estate/out-of-town/house.ru&pvid=1&distreet_legkovo... │ 3 │ +│ http://loveplanet.ru/Bezli-all │ 3 │ +│ http://omsk/evential/housession%3D240%26rleurl%3D//ad.adriver.ru/marshavskaya-r... │ 3 │ +│ http://radiorecord │ 3 │ +│ http://kinopoisk.ru/registernet Explorer&aV=5.0 (Windows NT 5.1; ru-ru&cE=true&... │ 3 │ +│ http://en.lyrsenses/zamba_zabor_polnitsa-s.narod.irr.ru/bank/otzyvy/12031%2F%23... │ 3 │ +│ http://auto_id=0&color=0&confiscategory_id=3205&bt=7&bn=1&bc=3&ct=1&prr=http:%2... │ 3 │ +│ http://balcon_caddy Club relove │ 3 │ +│ http://video.yandex.ru%2Fkategory_id=9759527418 │ 3 │ +│ http://kinopoisk.ru/spb.pulscen.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://smeshariki.ru/cgi-bin/click.cgi%3Fsid%3D0%26pz │ 3 │ +│ http://video │ 3 │ +│ http://wildberring │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://cxem.net/324487194836848 │ 3 │ +│ http://sunmar.ru/cart&ch=utf-8&sF=11,7,700&aN=Opera&aV=9.80 (Windows │ 3 │ +│ http://afisha.yandex.ru/manga.ru/?rtext=\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB1\xD0\xB... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://smeshariki.ru/furniture.html5 │ 3 │ +│ http://myloveplanet.ru/passenger/kitched_country_id=4312&input │ 3 │ +│ http://wildberries.ru/comment/search │ 3 │ +│ http://klubnich/zrh/ │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http:%2F%2Fwww.bonprix.ru/imagesize │ 3 │ +│ http://saint-petersburg-gorod/goodal │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://un1.adriver.ru/page=30138117749516%252f110916%252fmedicinema/movie_ross ... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_product_brand=4200&lo=h... │ 3 │ +│ http://wildberries.ru/comme%2F2.12.388 Version/1552/page │ 3 │ +│ http://ssl.hurra.com/iframe-owa │ 3 │ +│ http://saint-peter │ 3 │ +│ http://lazarevskoe │ 3 │ +│ http://video.yandex.ru/realty/search/main.aspx?sort=popular │ 3 │ +│ http://whoyougle.com/iframe/iframe_right.ru/spb │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&film/67... │ 3 │ +│ http://jobs-education │ 3 │ +│ http://pogoda.yandex.ua/telefon_shtukaturkey │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://afisha.yandex.ru/sell/resident │ 3 │ +│ http://afisha.yandex.php?p=176d43f96ef32d5bc1272 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://video=0&input_with_video.yandex.ru/page/10/women.aspx │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://pogoda.yandex.ru/real-estate/apartments/73151 │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://bdsmpeople.ru/index.by/ru/page=0&confiscategory_id │ 3 │ +│ http://auto_id=0&color=0&confiscategoriya%2Fzhienskaya-advert25593 │ 3 │ +│ http://video_dvd/suppoll/dleead6718.php?SECTION │ 3 │ +│ http://gotovim-doma.ru/personal/commersant.ru/image=19&pvno=2&engineVolum │ 3 │ +│ http://radioscannerica/film/47018.html?1=1&cid=691390&pvno │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://krasnodar.irr.ru/yaransferapid │ 3 │ +│ http://forum/topics/ingradskazka-lookoformalities/poetry/events/?date&csrf-8200... │ 3 │ +│ http://irr.ru/index.php?showalbum/logizer8/num-1/refremost │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://tyva-5/country=-1&washestvo/den_sidentialAmount │ 3 │ +│ http://rukodel=0&sort=newly&trafkey=27065/2/child.aspx#location │ 3 │ +│ http://zapchastny_fashing_mashes/index.ru │ 3 │ +│ http://myloveplanet.ru/bad_by_sidential/nizhnieiewva88 │ 3 │ +│ http://irr.ru/index.php?showalbum/login-do-500-kv-m-Maya │ 3 │ +│ http://mylove.ru/zoom.php?GID=2&IsOrder │ 3 │ +│ http://arma/frl-4/travel.ru/moscow/details │ 3 │ +│ http://msk/platia-nashing/vanny.diary.ru/otdam_daily │ 3 │ +│ http://kinopoisk.ru/cgi-bin/click.cgi%3Fsid%3D1216 │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/procoolonelopitered/ministrict/3d-probeg-340-... │ 3 │ +│ http://ssl.hurra.com/iframe/iframe-owa.html%26custom%3D%26custom │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://maps#ru_5_ru_1_ru_ru_ru_202_ru_1_ru_ru_ru_ru_2_ru_1743.html?oscsid=36303... │ 3 │ +│ http://direct.yandex.ru%2F&sr │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://chehod/zvenia8312&input_who2=1&input_age1=35&aN=Netscape │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=&is... │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/used/KIA-Cee-d... │ 3 │ +│ http://kinopoisk.ru/real-estate=2013-07-2089241607/photo=0&with_exchangeType │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://rsdn.ru/info_all=yes&razdumy-i-trikshop/search&_h_page/1719920 │ 3 │ +│ http://smeshariki.ru/news/2013/peshnye-udivlekanka.ru/l_03_00/bodreamfood.ua │ 3 │ +│ http://forum/topnews/222968695,910112_1164074834-908745 │ 3 │ +│ http://myfashihtzu.html?1=1&cid=65625f313230303&po_yers=2013/07 │ 3 │ +│ http://myloveplants_list-obl.irr.ru%2Fobuv-zhienskaia-modiezhda │ 3 │ +│ http://smeshariki.ru/chipinfo │ 3 │ +│ http://zagranimals-planet.ru/user/31059&Module │ 3 │ +│ http://kuharka=48&modeloveplanet │ 3 │ +│ http://smeshariki.ru/index.ru/main.pl?cmd=show/47555 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://whoyougle.ru/basket&ch=utf-8&sF=11,7,7,7,700 │ 3 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 3 │ +│ http://afisha.yandex.ua/index.ru/recipe │ 3 │ +│ http://video.yandex.ru%2F%2Fwww.bonprix │ 3 │ +│ http://afisha.mail.ru/stars/page │ 3 │ +│ http://bdsmpeople.ru/Web/price │ 3 │ +│ http://video=0&is_hot=0&che_simeis │ 3 │ +│ http://irr.ru/6323%26bn%3D27888895,96772&op_page47 │ 3 │ +│ http://sendflower │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://avtoto.ashx/1001087496197797217530729; Media Centernet_mastersburg │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://votpusk.ru/ │ 3 │ +│ http://auto_operey-v-v-meha.ru/catalog/public │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountry │ 3 │ +│ http://wildberries.ru/page=0&vip │ 3 │ +│ http://forum/topnews/2229362067528195&op_categoriya │ 3 │ +│ http://nizhnieie-bielie-bieriends&fb_source-temno │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 3 │ +│ http://stories.ru/art/MACKLEMORE │ 3 │ +│ http://afisha.yandex.php?link=114735200&brand=23368 │ 3 │ +│ http://afisha.yandex.php?w=3160/transports │ 3 │ +│ http://kurort/SP1399&op │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://pogoda.turizm.ru/communit=0&vip=0&order_by=2 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://smeshariki.ru/Web/price │ 3 │ +│ http://irr.htm?from]=&int[852][to]=10&lastdiscussins/?keyworld │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 3 │ +│ http://zarplata.ru/?p=1290&op_product_price=990348531&schoosOSRquM8gE&where=all... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&top │ 3 │ +│ http://ej.ru/muss/roll_to_audi/mode=replies │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://ur.hh.ru/file/news/2013 \xD0\xB3\xD0\xBE\xD0\xB4\xD0\xB0 │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://radiorecord.ru │ 3 │ +│ http://my.alpari.ru/filmId=yJg89hqV8gE&where=all&film/530/?fromCityCodeForcentr... │ 3 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 │ 3 │ +│ http://gorbus.aspx#localiformalitic │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&text=\x... │ 3 │ +│ http://guid=6&pw=2&pv=0&po_yers=0&with_video │ 3 │ +│ http:%2F%2Fmuzhchine/ru-g-Chelya_v_tsentyabrskii │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://rlsnet.ru/nogin.html5/v12 │ 2 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 2 │ +│ http://edp2.adrive_type=4754679564&pt=b&pd=9&price │ 2 │ +│ http://poisk.ru/news/articles │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 2 │ +│ http://wildberries.ru/editem_no=100¤cy=1#country=&op_proizvodskaya-obuv-z... │ 2 │ +│ http://wildberries.ru/filmId=4920/room=1&lang=all&filmId=DnGbyVQVUXI&wheretomug... │ 2 │ +│ http://smeshariki.ru/product&op │ 2 │ +│ http://forum.php?t=420 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://afisha.yandex.php?id=1620_4_licanel │ 2 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD1\x81\... │ 2 │ +│ http://moscow/detail/Torgovljatory/storii_efferanslyatting │ 2 │ +│ http://mysw.inform%26q%3Dversion.cheltyj │ 2 │ +│ http://wildberrin/foton │ 2 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 2 │ +│ http://sslow_13500000%26rnd%3D278888 │ 2 │ +│ http://wildberries.ru/index.ua │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://smeshariki.ru/kitched_country=-1&target= │ 2 │ +│ http://balance/#21792/guest=\xD1\x89\xD0\xB5\xD0\xBD\xD0\xBA\xD0\xBE \xD0\xB8 \... │ 2 │ +│ http://afisha.yandex.php?s=4d450&pid │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://diary.ru/search?familliklink │ 2 │ +│ http://kaluga/?ext=\xD1\x80\xD0\xB5\xD0\xB9 \xD0\xBD\xD0\xB0 \xD0\xB1\xD1\x80\x... │ 2 │ +│ http://afisha.yandex.php?city=418&view │ 2 │ +│ http://afisha.yandex.ru/?trafkey=54073799 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://ssl.hurra.com.ua/auto_repairs=0&page=10&category_id=detail │ 2 │ +│ http://video.yandex.html?1=1&cid=1&bodystyle=0&color=0 │ 2 │ +│ http://hotel-2-komn-kvarticle/7081272794,921006 │ 2 │ +│ http://svpressages/00012166260001216629%26sliceid%3D0%26ad │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 2 │ +│ http://video.yandex.ru/?win=82a&cid │ 2 │ +│ http://video.yandex.ru/rent/info/messa.ru │ 2 │ +│ http://news/398261_enl.jpg-1 │ 2 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 2 │ +│ http://auto.ria.ua/auto_auto.ria │ 2 │ +│ http://loveplants/740392319 │ 2 │ +│ http://yaroslavl.irr │ 2 │ +│ http://masterlingvo/#I 1 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://ur.hh.ru/page=10&can_be_checked_auto_region=1&rm=1&lang=all&film/18212.1... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://video.yandex.html5/v12 │ 2 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 2 │ +│ http://pogoda.yandex.ru&xdm_e=http://name=\xD0\x91\xD0\xB0\xD0\xBB\xD0\xB5\xD1\... │ 2 │ +│ http://auto_id=3159&input_age2 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://smeshariki.ru/user_id=1&bodystyle=0&vip=&int[12][from=last_auto_id=13143... │ 2 │ +│ http://en.lyrsense.com/iframe-owa.html?query=2&hide_black.asp?TOPIC_ID=914958&o... │ 2 │ +│ http://pogoda.yandex.ru/places/premiery%2Fpage=2&confiscategoriya │ 2 │ +│ http://video=0&wi=1362653061306535333&site_id=&auth │ 2 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=2furii10.html?city=0&hide │ 2 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.117 user 0.520000 sys 0.028000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +┌────────────────┬────────────────┬─────────────┬────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ TraficSourceID │ SearchEngineID │ AdvEngineID │ src │ dst │ pageviews │ +├────────────────┼────────────────┼─────────────┼────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33069 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 24703 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 15817 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 14233 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 │ 6549 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 │ 5257 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 5257 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 3547 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login │ 3538 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik │ 3371 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php │ 3333 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 3309 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 2923 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 2616 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 2441 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php │ 2418 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 2390 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari │ 2367 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 2349 │ +│ 1 │ 0 │ 0 │ https://google.com.ua/url?sa=t&rct │ http://komme%2F27.0.1453.116 │ 2228 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 1920 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://komme%2F27.0.1453.116 │ 1679 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ekburg.irr.ru%2Fpuloveplanet │ 1340 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://aliningrad │ 1270 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1254 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1213 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1193 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1186 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1142 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F27.0.1453.116 │ 1007 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 954 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://aliningrad │ 859 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login │ 821 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 791 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 777 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 757 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 722 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://video.yandex.php │ 702 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 691 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/obucheyelants │ 684 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 632 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 593 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 577 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://smeshariki.ru/obucheyelants │ 566 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.php │ 452 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 445 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBA\xD0\xBE\xD0\xBD\xD1\x82\xD1\x80\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 422 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 421 │ +│ 0 │ 0 │ 0 │ │ http://obninsk/detail │ 407 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 386 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug.ru │ http://irr.ru/index.php │ 374 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru/index │ 360 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 348 │ +│ 2 │ 0 │ 13 │ │ http://komme%2F27.0.1453.116 │ 347 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-2011/43597 │ 293 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 293 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6HS │ 282 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 268 │ +│ 3 │ 72 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 267 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 259 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 257 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari │ 256 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 │ 241 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login │ 237 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 │ 236 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/28435&lr=157 │ http://komme%2F27.0.1453.116 │ 233 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/ru/photo/6936313555&text=\xD1\x85\xD0\xBA \xD0\xBB\xD0\xBE\xD... │ http://komme%2F27.0.1453.116 │ 224 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php │ 223 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cat/dushkirillovyj │ http://komme%2F27.0.1453.116 │ 222 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=359&op_page2/... │ 218 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kriminally-bezhevsk │ 217 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0 │ 212 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 207 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 202 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 199 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://ekburg.irr.ru%2Fpuloveplanet │ 199 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 198 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 197 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 195 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/414526863.xlsx │ 191 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CDMQFjAJ │ http://irr.ru/index.php?showalbum/login-kiriskaya-obl.irr.ru/index.ru/GameMain.... │ 190 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=0&with_photo.ashx/101/4/?cat=6257271 │ 188 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=partments-sale/search?text=\xD1\x81\xD0... │ 187 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://afisha.yandex.ru/index │ 183 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://ekburg.irr.ru%2Fpuloveplanet │ 171 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 168 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 164 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 163 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://ekburg.irr.ru%2Fpuloveplanet │ 160 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 160 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/life.ru/cars/misc/travel.ru/?trafkey=058143&p... │ 155 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 │ 154 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=577&oki=1&oby=&op_s... │ 152 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://wildberrior/uphold │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6HS │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 149 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 146 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustic/meterburg │ 144 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 144 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 144 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E │ 141 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 140 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 136 │ +│ 1 │ 0 │ 0 │ http://kombardighantnie │ http://komme%2F27.0.1453.116 │ 136 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login │ 135 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kysjacevtika │ 132 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://komme%2F27.0.1453.116 Safari │ 124 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 121 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category/stroy/dachines... │ 114 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/?state │ http://komme%2F27.0.1453.116 │ 113 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/GameMain │ http://komme%2F27.0.1453.116 │ 113 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 111 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login │ 110 │ +│ 3 │ 85 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 110 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kardigan │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 107 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosoftwarenok.ru/projects/zhbi.po... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 105 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268143.html?1=1&cid=577&o... │ 104 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 104 │ +│ 0 │ 0 │ 0 │ │ http://tvidi.ru/photo=0&confiscategory_id=0&engineVolumeFrom=&fuelRateFrom=type... │ 103 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 102 │ +│ 3 │ 14 │ 0 │ │ http://komme%2F27.0.1453.116 │ 102 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 100 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 98 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://video.yandex.php │ 97 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 96 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.21150895 │ 96 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?sort=price │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 95 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login │ 95 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.12.388 │ 93 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 93 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 92 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberrior/uphold │ 92 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 91 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-tanks/search=1&ady=62&modeloveplanet.ru │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 90 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.145332.15&he=10&category_id=2740387993 │ 89 │ +│ 1 │ 0 │ 0 │ http://in-the-weightEnd=2351&numphoto=&isExclusiver.ru/alertljus │ http://komme%2F27.0.1453.116 │ 88 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fprodazha_Italja_unit=1&av=1&nm=1&lang=ru │ http://irr.ru/index.ru/show/414526863.xlsx │ 87 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 86 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb1.html?item_no=386703/?bundle=7172&msid=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 86 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 │ 85 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 84 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733582852/ │ 84 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupit/action │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 82 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 82 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?bodystyle │ http://komme%2F27.0.1453.116 │ 81 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F22.14&he=768486 │ 81 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusk.ru/ru/lookaginitial/Prodayu-Dach... │ 80 │ +│ 3 │ 4 │ 0 │ │ http://komme%2F27.0.1453.116 │ 80 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 79 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://aliningrad │ 78 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 78 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login │ 76 │ +│ 1 │ 0 │ 0 │ https://go.1ps.ru/show&showforum │ http://komme%2F27.0.1453.116 │ 76 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandex.ru │ http://komme%2F27.0.1453.116 │ 76 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26221/detail.ru/v1496366&... │ 75 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php │ 75 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 74 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%2F&sr=http://bonprix.ru... │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len80/page/product │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filtr/all/perm.pulscen... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 73 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 73 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F1.7.1364.172 │ 72 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://diary.ru/forum/intries │ 72 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/show/414526863_112 │ 72 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2618561&pp=1059&op_produc... │ 72 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://video.yandex.php │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 71 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 71 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari │ 71 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://aliningrad │ 71 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=product_id=42&Selection.chelov.ru/searc... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/yandsearch?te... │ http://irr.ru/index.php │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/server=sc.chel.ru/main... │ http://irr.ru/index.php │ 70 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification/?year=\xD0\xB1\... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2791954~43.87725656132&op... │ 69 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://komme%2F27.0.1453.116 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/produkty/bleacs/udilis... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 69 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&wi=1366&br... │ 68 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 67 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731&CgID=124jc&where=all... │ 66 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/Yozh/Goodda │ http://komme%2F27.0.1453.116 │ 66 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2725215195&ti=\xD0\x9F\xD... │ 66 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://ekburg.irr.ru%2Fpuloveplanet │ 65 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru/index │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 64 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://afisha.yandex.ru/index │ 64 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 63 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nmg.com%2F4.0 Safari%26clients-sale/search&e... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 63 │ +│ 2 │ 13 │ 13 │ │ http://komme%2F27.0.1453.116 │ 62 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 62 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login │ 62 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://ekburg.irr.ru%2Fpuloveplanet │ 61 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 61 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 61 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26092.html?s_text=\x5C\x5... │ 59 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/thenon-houses/public/g... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27755f32316.30; .NET CLR ... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742/details/?cauth=0&dam... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fautoad/kniga.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26004/?_h=galle/\xD0\xBF\... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert27930555&sob=1&p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2692.html%3Fhtml?period=3... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/world/photo31469:Album... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=leting "HalUXI&where=\xD0\x9F\xD0\xB5\xD1\x8... │ http://irr.ru/index.php?showalbum/lofiver.ru/articles/86121%26uid%3D139750%26ad... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27000,224648804-recept-so... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/koshka.com/ig/iframe-o... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory=cinema.perm.p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/realty/suntime-5/extre... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742357/detskii_gosts.xml... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742304][from]=&int[14670... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694336/photo/suzannason/... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Forum25/top... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268320995,968650f45491882... │ 57 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupit/action │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1375605&ga... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://video.yandex.php │ 56 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga/choice/... │ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_product_... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?showtopic,5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26017/quarius_Moscow/cavi... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2726125413975d77cf&search... │ 55 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 54 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266848223/review_type=pro... │ 53 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 53 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26989%26bt%3Dad.adriver.r... │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/album/login-1800002&pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 52 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0 │ 51 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2698172,93932353064614618... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605085268a9c4d61-9862.49... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19&numphoto/login=A-CL-MS-36575c72937][to]=&int[12822304 │ http://irr.ru/index.ru/widgetchrome%2F&ti=no&dom_v_bordovye-printime.ru │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/investate/comple/make/?page5/&docid=jlMNIrXw... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 50 │ +│ 0 │ 0 │ 0 │ │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 50 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F11.7.1364 │ 50 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 50 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26051.htBeg=6&NightRegist... │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xBE\xD1\x81\xD0\xB8\xD0\xB1... │ 49 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 49 │ +│ 5 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 49 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?group=days=3&text=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27410/photo-2.xhtml&serve... │ 48 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandsearch │ http://komme%2F27.0.1453.116 │ 48 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 48 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusty-i-vkont.at.ua/search=0&userId=0... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266128182&op_seo_entry/de... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?sort=&br... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/intrumen │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://afisha.yandex.ru/index │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumanegenre=33155?analog/kitchen_mini... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik │ 46 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login%2Flick.g.doubleclick.diary.ru/car/kw/3061/us... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734.html_params%3Dfh_loc... │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://afisha.yandex.ru/index │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/GameMain.p1Yo4A │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ua/searchads/jo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605906/frl-2/sportal.ru/... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fshow/lpp/cre.ru/pers... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.asp?search&ev... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logize.ru/msk/events_liver.ru/russert-plies.r... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26099486633033&countpage=... │ 44 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://sslow_135000008&position=search │ 43 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 43 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischet-solik/odezhda-plos... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert277553/38021/66936575776/... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271050&with_photo.kurortm... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 43 │ +│ 1 │ 0 │ 0 │ http://forums/liii-kuler S22oHgBJTngegotavgorod55.ru/filtr[2]=42 │ http://komme%2F27.0.1453.116 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-folders/?end=9a08488... │ http://irr.ru/index.php?showalbum/litamak.irr.ru/catalog/8570/travel.ru/cgi-bin... │ 41 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 41 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 41 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/0001216629/#top_by │ 41 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26040931&s_yers=0&with_vi... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://ekburg.irr.ru%2Fpuloveplanet │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.137508&s_yers=200... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://aliningrad │ 40 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logito8ergo_6470/page_type_id=20872/0/001:12:... │ 40 │ +│ 0 │ 0 │ 0 │ │ http://afisha.mail.ru/dmitrij │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/readar-nashi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27924563724&key=46960/med... │ 40 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://lib.ru/exp?sid=3205&bt=7&bn │ 40 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 39 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credit │ http://komme%2F27.0.1453.116 │ 38 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=8570/page=5&s_yers=2006 │ 38 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2679/detail/5482,935033/2... │ 38 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 38 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login │ 37 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dnevnoy-kv-Samara.irr.ru/searchAutos&marka=4... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://komme%2F27.0.1453.116 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 37 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=theating&page=... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?group │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2784389/room=39695,966681... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/forum/topicID=269&stat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/votkim-rukav-i-kova-ul-adve... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filmId=xFX1UbTNJjxe4yF... │ http://irr.ru/index.php?showalbum/login.asp?razdel7/test/matched=115909d9_dsc07... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wolf-club478561/OPEL | \xD0\xB0\xD0\xB2\xD1\... │ http://irr.ru/index.php?showalbum/login-marka=13&city&custom=0&damages/0001216 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27553&s_yers=0&po_yers/46... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert275226607660?design=6efxq... │ 36 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=show=&fgroup-tab-mara.irinables/yearT... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278171&size=52094&op_seo_... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27330528/photo/6223799%26... │ 36 │ +│ 5 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://smeshariki.ru/obucheyelants │ 36 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36&he │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=post_neu%3D22%26pz%3D0%26rleurl%3D%26xp... │ 35 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/8569 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/index.ru/katego... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vip.ru/book.com/photo/7086/page=0&state=mont... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-cukickdrops_bak_yant4tlGtZgy3BQ&bvm=bv.49478... │ http://irr.ru/index.php?showalbum/login-501-98552&op_uid=1060948/6#f │ 35 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (Windows │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19&m_staraya-obl │ http://irr.ru/index.ru/show/414526863_112 │ 34 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.12.388 │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/promo=C-Tease/rent/dat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 34 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_uid=1... │ 34 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/list │ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 34 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/directadvert/kavanga_728x90.html │ http://komme%2F27.0.1453.116 │ 34 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 33 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshops.xml?typ │ http://komme%2F27.0.1453.116 │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?cPath=default.ru/yandex.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33 │ +│ 1 │ 0 │ 0 │ http://auto.ria.ua/\xD0\x9A\xD0\xBB\xD0\xB8\xD0\xBC\xD0\xB0\xD1\x82\xD1\x8C\xD1... │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 33 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://video.yandex.php │ 33 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 33 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser │ 33 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265748ba3f755671_1162684&... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertif?sle=85000 \xD0\xB4\xD0... │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364 │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/pub │ 32 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zxcvbnm1990&search/jobinmoscow.ru/yandex.by/... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements-obschaya │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fproduct/foto-4/login... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&op_category_id=1174]... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniturers_id=575386110 │ http://irr.ru/index.php?showalbum/login.exit/rem/php/board/10_kruizer_8267049&o... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiepochto_id=93231238][to... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://afisha.yandex.ru/index │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ssl.hurra.com/iframe │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischuk_Kerasivye-klavik/?... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/jobs-education/m_acces... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26791e3a7c543c9bf9ef5c0-9... │ 31 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt │ http://komme%2F27.0.1453.116 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertificia/?letteo_985428161/... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_api.php?cid=41389/rooms/perm.pulscen.ru/sear... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 30 │ +│ 1 │ 0 │ 0 │ http://domchelov.html&lr=55&text=\xD0\xB4\xD1\x80\xD1\x83\xD0\xB3\xD0\xB8\xD0\x... │ http://komme%2F27.0.1453.116 │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoryID=12452929587/... │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 30 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 30 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268630533&site_ot=&price_... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-k608i.trashbox.ru/cars/page5/&docid=577&lr=2... │ http://irr.ru/index.php?showalbum/logii_58247.php?forum.borovichy77/page5 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2716/~3/150160947694,9745... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2696374/#page/tab=com_avt... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/products/?category_id=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 30 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/topic │ 30 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.14&he=768&wi=1920 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605446518%2F&sr=http://e... │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26979553039353936694&ch=u... │ 30 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://smeshariki.ru/obucheyelants │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-carava/fotok-8-steklove.ru │ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26928142&op_products/view... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kupibatikov/?recrete/personal/klimat.ru/work... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 29 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x9A\xD0\xBE\xD1\x80\xD0\xBE\xD1\... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_countpage/1 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertifications[0][150]=60&inp... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/wedditeli_foto-2/__48/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/click.net/paged=696&lo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274229696.0 (Windows)&bL=... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-14132&with_photo=1&srtime-zone.net/catalog/t... │ http://irr.ru/index.php?showalbum/login-sierra%2Fdlia-zhienskaia-moda-zhiensmed │ 29 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704.html%3Fhtml5/v12/?fr... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2664952&xdm_p=1#country=-... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategoriya/zhienskaya-... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734/fotographic_2017666&... │ 29 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9649.html%3... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/small_mercial-shoppicc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27350350394&ch=UTF-8&sF=1... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_seo_entr... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27425.3120%26ntype_id=2&r... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-baza/gadge... │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 28 │ +│ 1 │ 0 │ 0 │ https://directions[0][1541769377921968 │ http://komme%2F1.7.1364.172 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13733097&op_categ... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert272291684/hasimage=0&view... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/mann japanel/?text=\xD1\x81\xD0\xBC\xD0... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269500469412216388/detail... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-my-sovies/bebybum.homestion bonprix.ru/... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikarbox=2&tz=9b81998&po_y... │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?lang=all&fi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-176-kakaya-obl.irr.ru/search?lr=191&ei=N6rrg... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\xA4\... │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 28 │ +│ 3 │ 95 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/anime-2/#album/l... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-eve-nn.ru/cars/passenger/\xD0\x92\xD0\x90\xD... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274236&pv=15&prr=8&sid=35... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/41452626u1zIq0SGLXCI │ 28 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic/8939858-59929477/detailshop │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://ekburg.irr.ru/#lingvo │ 28 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F22.14&he=768486 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678/page=2&marka=84&mode... │ 27 │ +│ 3 │ 2 │ 0 │ │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/search?cl4url=http://yandex.ru/online... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27013.ya.ru/sportalznakom... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert24061.jpg.html%3Fhtml?1=1... │ 27 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031343-sh-898675/sort=pri... │ http://irr.ru/index.php?showalbum/login-5158&jenre/slyudya_metroman.ru/GameMain... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19195/offset=101&district=&city&with_photo=¤cy │ http://irr.ru/img/catalog/53485785/topic/8939850.php?page=3&marka=84&mm │ 27 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 27 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 27 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-oleginnesujeli-i-centum=etarget=search?clid=... │ http://irr.ru/index.php?showalbum/login-kupe.html_params%3Drhost%3Dad.adriver.r... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fhit_list.html?s... │ http://irr.ru/index.php?showalbum/login-irake-myservierk-supierts%2F&ti=\xD0\x9... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27928092_price=\xD0\xBC\x... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/mazda-dievochnye_avari... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-19.xhtml?city_to_one=All&film]/on/orders/810... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/1.19.mobile_photo=6001... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27630/?item_id=0&bodystyl... │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ 1 │ 0 │ 0 │ http://bonprix_ru_11559&lr=12&usln │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lizova_ii_1112_1150&option[price_do=300... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E&wher... │ 26 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detall/seconomicsmovinki │ http://komme%2F27.0.1453.116 │ 26 │ +│ 1 │ 0 │ 0 │ http://yandex.ua/?target=search/tab=user │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://obninsk/detail │ 26 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/loginsk.irr.ru%2Fkategory_id=9204471-650/?_h=... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login-jjjekrju-s-pring=1&price[price=\xD0\xBC... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification.ru/messa.ru/rea... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lejandsearch?text=\xD1\x82\xD0\xB8\xD1\x85\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert21124631/?Search.php │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 26 │ +│ -1 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_category... │ 26 │ +│ 3 │ 197 │ 0 │ │ http://komme%2F27.0.1453.116 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?messa.ru/worlds/page2/7277932582&text=\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 26 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-kupe-20010120652838799.html?n=7148.html... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemey-volvom80Cw&where=a... │ 26 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=607&state=4... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.22 (KHTML, like Gecko) │ 25 │ +│ 1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 25 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/people.ru/cars/passets... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731/?city=0&pvno=2&evlg=... │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vivarki/redki_sdelaet-law.ru/produkty/kartgo... │ http://irr.ru/index.php?showalbum/login=driff/en-ru/?p=2#messages/00001216629 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.html&ei=GcXrUYe8F2DAU-RbuRlLMczoJ--5uDCx8 │ http://irr.ru/index.php?showalbum/login-132/#images/0000.h95/\xD1\x82\xD1\x8E\x... │ 25 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert264314953); ru) AppleWebK... │ 25 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://obninsk/detail │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search?text=myaccountry │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguard-payments-sale/se... │ http://irr.ru/index.php?showalbum/login-88i8LaDyEkCVv6-DhRfEDcw==&action │ 25 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/yandex.ru/?f... │ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.ru/film/46351/frl-2/bage │ 25 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605838.html5/v12/?from=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-link=1147373-1&p=1&p=2&text=\xD0\xBC\xD0\xBE... │ http://irr.ru/index.php?showalbum/logisterlingvo/#! │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741559&t=5204/make=Chrys... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694589/detail/555-javata... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=shops.html?id=1&body_type=\xD0\xBF\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781472265&op_seo_entry=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626rleurl%3D//ad.adriver... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685/price_ot=&price=\xD0... │ 24 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://diary.ru/forum/intries │ 24 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-117031&op_category&op_seo_entry=&op_uid │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26685857947301_Zoryatiya/... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27399992.php/board,13.0) ... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671291&fridgets/2012&pri... │ 24 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://video.yandex.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo/7... │ http://irr.ru/index.php?showalbum/login-kupit-plitka-s-korsiety/art/151/n4p/160... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguar.ru/page4/?emain.a... │ http://irr.ru/index.php?showalbum/login=ogabass.ru/filmId=9WOqzzitive&view │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-annative-expressageId=0oVXx21hUXI&where=all&... │ http://irr.ru/index.php?showalbum/login-rybnovlevojj_mamountry=-1&type%3D0 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/intrumen │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kupalnaya_elit=&id=3&clid=9403&lr=1913849 │ http://irr.ru/index.php?showalbum/login-gallebia_zhurnalCall D.R.E.mp3ex.net/ph... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lolacake/tatyaka.html?1=1&cid=577&oki=1 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinglish.rus-l7-p70505-1... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/yandsearch?lr=1... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-yvaken/topic=7702.jpg.html?1=1&cid=577&... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-547552/1/?sma=RAINBOW&op_uid=fdd1b9d2721728&... │ http://irr.ru/index.php?showalbum/login-kapusta-advertika/search/room=1&damage=... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=1&bc=3&ct=1&pr │ 23 │ +│ 1 │ 0 │ 0 │ http://auto_volkswagency=1&text │ http://komme%2F27.0.1453.116 │ 23 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgarials/commend/searchvage-2.html&dt=13734... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-tuniki_510... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263090024189-528619c2077/... │ 23 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/ru/index.ru%26bid │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333572620201709/page/10... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news/radio&clid=198555... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26939.html?page/3/#count=... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/kategory_id=5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2740974%26pz%3D0%26ar_sli... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 23 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/resultatya9176da22f1a521a5853.html&... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26600721376439322%26pz%3D... │ 23 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga_728x90.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://afisha.yandex.ru │ 22 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2697574697.html_param=0&u... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemennoke0070553995f27d6... │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-105vr/ │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=search.tutung/s... │ 22 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/wheel.ceratornaya_solnechka │ http://komme%2F27.0.1453.116 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-10760b31b65633eZateq eb806e887d9f15ccf593280... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2091&local=1&TypeSearch?mail.ru/yandsearch&c... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26058&nnum=s4746835895&op... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-the-ili-tempera-minsk.irr.ru/produkty/bluzki... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodny │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2649.html?pg=menu_29.jpg&... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739693071/pomer... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/v1465][from]=&int[157281 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267830840994,95688781470%... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-business/sale/ru/search?mail.ru/film%2Fbarna... │ http://irr.ru/index.php?showalbum/login-zakon_type=1&fuelRatesTypeSearch │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 22 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27200,55.7654.html_parat-... │ 22 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26601629][from=&fuelRateT... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&l... │ http://irr.ru/introlux_page5/2/page/Renaul.irr.ru/start=1500-rublic/gamemain/Tu... │ 22 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://ekburg.irr.ru%2Fpuloveplanet │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liliate_id=24145602&with_phoney.yandex.ru;ya... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-natashkarola.irr.ru%2Fviewforum/MsgList.html... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26900/technics-technics-t... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&city[7]=23239330794,25826044_Black_lis... │ 21 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?price_till beli.php?cx=015216684_36 │ http://komme%2F27.0.1453.116 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694,978825315f373400/det... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691_ru_17832523.html_par... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1) AppleWebKit%2F537 │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/world/photo/41/62b1dfa450/3/women-clother%26tms%3D%26ev_ltx%3D... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/basketshop.ru/yandsear... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265228.html?1=1&cid=577&o... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/forum%2Fukhov/l... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27025&Select[4][]=32598.h... │ 21 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://wildberrior/uphold │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/houses/passenge... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo44953.116.php?t=4... │ http://irr.ru/index.php?showalbum/login=ko&page=0&view.aspx?group_cod_1s=85&key... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/?from │ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-dance/index.ru/?favorite_off=1&encoding&hl=\... │ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 21 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logino-s-grigerator/page1=&input_age1 │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cars/commeddesk.ru/google_s&12.5.746.59954.30 (KHTML, like/\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 21 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/logii-bin/click.cgi%3Fsid%3D158195,97987231-9... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ramblery/pic/893985650697... │ http://smeshariki.ru/obucheyelants │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26737865/?page/12186/#/ec... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login.html?1=1&input_who1=2&input_who2=1&inpu... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929&from%3D%26custom=0&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dietsik.ru/razdel_id=111,7,700&w=728x90.html... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/club.ru/anime-zone.ru/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-brie... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2186/detail.aspx#location... │ 21 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739353/details.... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kupalnik │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification%2F4.0; XBLWP7; ... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/9-0--navam-zhien... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741465][from]=&input_wit... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_uid=1147... │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login=uzpp2XnEw&bvm=bv.49784469][from │ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 20 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-Larki-i-korobeg-1124-95367/guestblowinp... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26219&wi=1280&lo=http://w... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/yandex.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estatic.diary.ru/... │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=58&Selectronics-technics/k... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b706234651&op_uid=1&b... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?er=2&text=\xD0\xBA\xD1\x83\xD0\xBF\xD0\xB8\... │ http://irr.ru/index.php?showalbum/login=razer2.moikrug.ru/recipes/shop.spb │ 20 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://video.yandex.php │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&price │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=NeIdeaCenternet Explorer&aV=5.0 │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertificirovka.ru/noteating-i... │ 20 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate=0&ReturnUr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271161076&st=261&t=170977... │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313163307/?from]=&int[15... │ http://che.ru/produkty_zarubezhei-niepochekhly │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604370757034dea482207549... │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_api.php?id=7262882,9454472&op_product_n... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 20 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/cars │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-karbox=0&top=0&category/1961/#images/00... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26637&model=1705.html?1=1... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumilora481 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt=13733129/room │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-iulyanovskaya-obl/lyubvi?page=166733&eid=485... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27502/detail/?folders/#pa... │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://video.yandex.php │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626u1zIq0SGLXCI&where=al... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=240&u_cd=242035165&input_who2=1... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news_id_72387877055/nu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?sort=popup/casualg... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikulina.ru/real-estate/ou... │ 19 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/filmId=eRaB4pYAXCI │ http://komme%2F27.0.1453.116 │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBB\xD0\xB8\xD0\xBA\xD0\xBE\xD0\xBB\xD0\... │ http://irr.ru/index.php │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.ru/daily │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260540718534/?dateOn=1&bo... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login=perfect.yandex.ru%2Fkategoriya%2F537 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261921&pr=2441185112.html... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26672655462.html?city.ru/... │ 19 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostok.ru/cars │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/check=1&redir=1&lang=a... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671&Destige-all.html_par... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27404895,95923.html%26cus... │ 19 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2638/?from=&raceTo=&power... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313437&pvno=2&evlg=VC,2;... │ http://irr.ru/index.php?showalbum/login-rizova.ru/look/timashirtsevm.cofe │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6HS │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27355f3132366336601&uuid=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166333/price[price_till]=&pri... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F_liveresum... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.php?f=11340.1j1j2.12...5998-103358071/8/page... │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/00007/10/1320006&p... │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto_repai... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://smeshariki.ru/obucheyelants │ 19 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.15751 Safari%2F5.0 (Windows │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2675406828ac956028692581/... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://obninsk/detail │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26968794618/irr.ru/real-e... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2629&lr=65&rstr=-213&text=back=False&withmos... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2702483,631;IC,444041%2F&... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26669E116-1-1550046560013... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?search?text=\xD1\x80\xD1\x83\xD1\x81\xD0\xB... │ http://irr.ru/index.php?showalbum/login-inadlinny-sched_car=0&city=0&price=18&p... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=http://video.yandex.ru/real-estate │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274026181891&rn=52&brand=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/dlia-zhiensk... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-165&jenre]/49047&lr=163&text=samsung ga-moda... │ http://irr.ru/index.php?showalbum/login-2-komn-v-na-92f5-6ccf-fef3-013f9f926a21... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&checked=0&state/room=10002-g-v-program... │ 18 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ru/index │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5 │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?elmt=popular&where=all&film/723/num │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/restate/out-of-town-resh=1&cnt=1373... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2012-recept-Ragu-iz-2-x │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupaljinik-slidi/places/?PAGEN_1=2 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 18 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=deltec&type=citymo=&version%2F4.0 (Linu... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27534.30 (KHTML, like Gec... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kochtinsk.pulscendinskiy-krasnodar.irr.ru │ http://irr.ru/index.php?showalbum/login-kuplyuskij/zapchastorii_state/out │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zzzi.ru/a-shop and blademas/?id=1&marka=0&ma... │ http://irr.ru/index.php?showalbum/login-2003prev=/search/index.ru/meteor.html%3... │ 18 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login.moikrug.ru/catalog/otchenko-ul-advert27... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\... │ 18 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278453&with_exchange=0&ex... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27132069304;IC,1511e8d158... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=367132&pv=2... │ 18 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27071038_114736895,923401... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x9A\... │ 18 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27420780790931.html5/v12/... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-natura.ru/jobs-education=post_137336ID0... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kanza_tab_2499472&lr=1074&sort=popular │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/8018&l=malkogo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/?target=search?... │ http://irr.ru/index.php?showalbum/login-bigutensiysk.irr.ru/regular&bid=3205&bt... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/obuv%2F │ 18 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-21102&text=\xD0\xB1\xD0\xB0\xD0\xB1\xD0\xBA\... │ http://irr.ru/index.php?showalbum/login.mospsy.ru/super-na-kostronics/tv-audio.... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685&numphoto=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626p/ │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertimeshariki.ru/cgi-bin/cli... │ 18 │ +│ 1 │ 0 │ 0 │ https://diary.ru/magnitogorsk │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260908861%26point-peter=&... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sien-zhienskaya-i-kvartir.html?id=1955451-01... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 18 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1453.116 Safari%2F8536 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=yators/?jumping.ru/series.ru/priceup&page=3&... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeSearch?text=\xD0\xB2\xD0\xBA\xD1\x83\xD1... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinger/\xD0\x93\xD0\x90\... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga1788778.137329TVmbFNmbVNaR0YwW$UyNDg4fxS... │ http://irr.ru/index.php?showalbum/login-sienskaia-moda-zhienskikh_rabotjaga.ru/... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929750%26ar_sliceid%3D2... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=36427929&stat... │ 18 │ +│ 4 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691c352005&pvno=2&evlg=V... │ 17 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27422544/3/womens.ru/ufa.... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru%2Ffilm/4858?pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/cars/communalux.ru/dos... │ http://irr.ru/index.php?showalbum/loshaya-obl.irr.ru/film/35562C?analytics/kto-... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271527091/frl-2/bage-2.ht... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.103402.html%3Fhtml │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#7878... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=artira-Lyubyat │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.aspx#location │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=yes&y1=2013-07-07.ya.ru/5_search?text=\... │ 17 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://aliningrad │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.15.html?1=1 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266149_51928/detail.ru/ka... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%26rleurl%3D%26CompPath%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=8&ch=UTF-8&ifr=1&av=1&nm=1&ved=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2670308&po_yers=0&price_o... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_Bolers-device.aspx#commersanta_premiery... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2613168312.71 Safari%2F__... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginyazevskaya%2F5.0 (Windows NT 5.1) Prestorygoo... │ http://irr.ru/index.php?showalbum/login-kupilomatic.aspx#location=rr&days&city&... │ 17 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6HS │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-dlia-zhiensmed.ru/el... │ 17 │ +│ 1 │ 0 │ 0 │ http://bdsmpeople.ru/register2123 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logistereda.ru/photo/70861/6#f │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263161366&bid=2823&numpho... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowthreadreplies=24&ids=74&cu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273363331251798796&op_seo... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313&ussp=mstp&usln=1&inp... │ http://irr.ru/index.php?showalbum/login-3767436/roomootofile/obzor.com/iframe │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26041.htm%3Fsid%3D0%26pz%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27595,9305f3931339322%26n... │ 17 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/stan/index.kz/yandex │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertistia.html?partment/searc... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-search%3Futm_source=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031323532363&win=70&mode=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://diary.ru/forum/intries │ 17 │ +│ 1 │ 0 │ 0 │ http://bibieters_sig=5ea8QizwGSPy0yGcm14ATH74D4Bw&usg=AFQjCNHxMZlonova.ru/p1847... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 17 │ +│ 3 │ 22 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_style... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261636/detail/odnoklassim... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-futbolki-k... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lenfiki-zhienskaia-moda-muzhchin-sitafa ishq... │ http://irr.ru/index.php?showalbum/logical.ru/link=11485-9065383235348%2F&sr=htt... │ 17 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/messar.ru/professig │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 1 │ 0 │ 0 │ http://acase.php?input_who1=2&input_who2=1 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.10 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26618531&t=111246.html?p=... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694&option%2F12.14&he=76... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-irina19910735%2F27.0.1453.116 Safari │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268814453957595,94406/det... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733145625/details... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=Like Gecko) Chrome%2Fpotnik=1&price_do=&curr... │ http://irr.ru/index.php?showalbum/login-the-poxudet_sponsor=&o=6000708498/?caut... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b76faact/less=1&ru=1&... │ 17 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-53584715,1327288/belgium/arch=1&themec.... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=bestwo.diary/details&id=9160/0/posti.ri... │ 17 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/category=cinem rasmusic │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098707209463401090/deta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgas.rQRAX2Ua3IF1iHJcaz4ATv34DABw │ http://irr.ru/index.php?showalbum/login/?page=1024&wi=144438-88-3906740/currenc... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267044005320AA76)&vendor_... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-herokee_tatus=1&rm=18606bAxFEcQT6smBB4W... │ 16 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search?clid=19554786.0.8.0.2.2003558_3497926... │ http://irr.ru/index.php?showalbum/logie-niz-doktops/electronics/4185570c72 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27034195,9520160173/5/wom... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search/cuZXdzJTJGJmxyPTI4fQ,... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26396284046.xhtml%3Fhtml%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-plan... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&pt=b&pd=7&pw=2&page5... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate/out-of-tow... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260612d7cf.4082813,74,756... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/page=91552&q=\... │ http://irr.ru/index.php │ 16 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login.aspx?sle=13&s_yers=0&page_type=0&door=0... │ 16 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/movinki... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?&clients-sale&siteurl%3D//ads/search?text... │ http://irr.ru/index.php?showalbum/login-kapusta-advert273786/foto-5/#photo=2817... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnaja-prost-petersburg/detail/?fold... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-krasok.html_params%3Drhost%3Dad.adriver │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661232&streamfood.com/if... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti/redmonds %2F offset=403134333.2201560&c... │ http://irr.ru/index.php?showalbum/login-v40-velopiter.feriod=0&scroll_to_auto.r... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiensmed.ru/dl/\xD0\xB7\x... │ 16 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-57548811426&text=\xD0\xBB\xD1\x83\xD1\x87\xD... │ http://irr.ru/index.php?showalbum/login-coolonellana-Molodilnik.ru/index.php?vi... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/70948/35.htm?id=... │ http://irr.ru/index.php?showalbum/logiy-luchaiev%2F&sr=http:%2F%2Fwww.bonprix c... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166303133334%2F&ei=horia+iudi... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26765.html_params%3Drhost... │ 16 │ +│ 1 │ 0 │ 0 │ http://histore/profile;u= │ http://irr.ru/index.php?showalbum/login-kupe-20013&uuid=1373356164564_1sort/sta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=findjob.ru/planet.ru/index.ru/carinov.h... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2755597.html%3Fhtml?1=1&c... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/showtopic,803813.html&... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_catalog/1250/?itemsg/cd... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert260477/cities/visas/exp?s... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://video.yandex.php │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2728024/detail/508/?instv... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26887301/Zona/simferopol.... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27429&input_bdsm_position... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-153-4b9c4.4331626.htm?size%3D0%26rleurl │ 16 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect │ http://komme%2F27.0.1453.116 │ 16 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://msuzie-shop/premiery-c-38208_2.html │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-marka=23&model&desting?field_town/search/pri... │ http://irr.ru/index.php?showalbum/login-492ea9&show/417582,9626512874":10157628... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/posts&q=\xD0\xB2\xD0\xB5\xD0\xB4\xD1\x83\xD1... │ http://irr.ru/index.php?showalbum/login-mistore/#CATALOG_LIST-s-ovosibirsk/deta... │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/sch/price][min]=41&lr=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27364229586121%26url%3D%2... │ 16 │ +│ 1 │ 0 │ 0 │ http://volgografiyah_27_iyunya_50_let%2FgetId │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-maritkiN │ http://irr.ru/index.php?showalbum/login-ladimir.irr.ru/remiery-telefon.ru │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333%26bid%3D1%26rleurl%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661251-6efa-d61f-fef3-01... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/tv-audi/a7-spec=9894797179698712/p1/8... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new=127201148][fr... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269899458/price/3815&pvno... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5.0 (Win... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=view/5/item3963... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/7427510/detail/5... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti%2F%3Ff%3D100%&http://afisha.yandsearch&... │ http://irr.ru/index.php?showalbum/login-6030d.html_params%3Drhost%3D90%26height │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logiste's a di galaxy-s4-story1.aspx#location... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2753][from]=&pricedownloa... │ 16 │ +│ 1 │ 0 │ 0 │ http://yandsearch?lr=2&color │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2735030373434-152495.php?... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new10152954vac │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-gorod/search?p=7&oprnd=9902.jpg&img_url=http... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27222.vk.me/u3166 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691.html?1=1&input_age2/... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makeevka.ru/perm.irr.ru/slingvo/#1\xD0\... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-irinakai/page_num_read2306e4574&ei=Ot_rUfjPG... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26708662307][]=&selection... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313033393633310,932803][... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2010000087378687/pic/8939375f303839303935373... │ http://irr.ru/index.php?showalbum/login-souse=2/path=39_1.html?1=1&cid=577&oki=... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumy.ua/search?text=\xD1\x81\xD0\xB5\... │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/artira │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikal.ru/search/room=1&dam... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2695/19545602cf94d77/repl... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/?strict=5710... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertists/736850/?item_no=737&... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&model=1173... │ 15 │ +│ 1 │ 0 │ 0 │ http://forums/liiiervierk-suppohudeemvmesting/294465&op_categoriya │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=new&cad=rjt&fu=0&input_country_id=228&lr=961... │ http://irr.ru/index.php?showalbum/login-cam.shtml#objdesc=true&uA=Mozilla │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login/?do=ready-mansion%3D0%26url%3D%26bn%3D0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb=1&prepairs=0&city[1 │ http://irr.ru/index.php?showalbum/lounona-muzhchin-kupaljinik-chernyj-odnoe/san... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginsk.eu/ru/Pagesize=13&m1=07 │ http://irr.ru/index.php?showalbum/login-3muda/truction/vacancies/750207190765.h... │ 15 │ +│ 1 │ 0 │ 0 │ http://launcher-searchads/search │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-album/login.2/second... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_produkty/kiev.org/forum... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781308;IC,238208836746/0... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-4433140796851/detail/536180&all=False&i... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26981583/page=1089592445/... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945HPS?analog/r10418/sort=price_do=200&site_off=1 │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 15 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshop/id_art_type=7&s_yers │ http://irr.ru/index.php?showalbum/login │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F1.7.1364.172 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273389; U; Android 4.0.14... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2724/?_h=search?text=\xD0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-goluboj-podserial&dfs=13 │ http://irr.ru/index.php?showalbum/login-haus.html#news/228670,257&pci=3012/frl │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273631253711/foto-6320166... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#67 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266356163f39ea6f8/7a8745&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26605566254/room=1.6&wher... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/washes/built-in_two_ch... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?Topic │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/state=1909644 │ http://afisha.yandex.ua/auto_id=0&with_photo.kurortmag.ru/razdnitsya-vishnury │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://irr.ru/index.ru/show/414526863_112 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?transk.i... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/index.ru/ange=0&s_yers=(3000&static.diary.ru... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678&op_page=60000/curren... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginskikh-viana.irr.ru/GameMain.aspx?sle=1/house.... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-land_search?text=\xD0\xB0\xD0\xBC\xD0\xB1\xD... │ http://irr.ru/6323%26bn%3D27888895,963095425 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/produkty%2Fplatj... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list.html?typ=SMA&anbieter=aleks_evilkos.com │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?page37/?sta... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.1Uv1UfqCA8SonYC4BQ&usg=AFQjCNGB3pBUuKY1jJPP3... │ http://irr.ru/index.php?showalbum/login-tank-sale/search%3Fmode=&page_type │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=alini... │ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?Id=9582 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-tumbov.irr.ru/page1=&input_who1=2&id=29... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2718599/photo=0&is_hot=0&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liloveplanet.ru/futurer533/women.aspx?group-... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2631920&lo=http://person_... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.php?city[1]=700003 │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26761,55.654289600/detail... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27515/418695&st=327-B110Q │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login=vladimir/page_type=0&expand_search?text... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2699364224073532663835386... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?dok=001&rightbox/week&From=0&user │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/frl-4/trailer/view/3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-lential/secondary/details9.html_params%... │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page9/#14... │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=25127691%2F... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-676216b8af/4fd00fa61b3185631821/page_ty... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/gamemain.asp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1955451&lr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27877437494,943082&stat_t... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2730675595,9292fa-d61f-fe... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_appliazh-pliance/mista-bez-uchaiev/000202&cl... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/ch/floore troubleclick... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienshchin-planet.ru/myma... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27265484158197%26width%3D... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-102-821922237&arrFilter2013/08-iH4AT5zIGQDA │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_type=&freetao.diary.ru/sea... │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 15 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Ford-antent... │ 15 │ +│ 3 │ 123 │ 0 │ │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nashinger/users/search?textilead&353%26ev_pl... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginy_name/3196906481/currency=6465373200&price=\... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2776/?date=0&doorov.irr.r... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert276278-ploschaya_checked_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/877/ru/buildin... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274298799461981/?date=129... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert262997385f32313335781094&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2693_763613.html_params%3... │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9584%26pz%3... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://ekburg.irr.ru%2Fpuloveplanet │ 15 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credir=1 │ http://komme%2F27.0.1453.116 │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.10 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=on&input_onliner... │ http://irr.ru/index.php?showalbum/login.html%26custom%3D%26CompPath.2; WOW64; r... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/gosthelp.ru/auto.ria.... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert269257798044.html_partmen... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2651734&pt=b&pd=7&pw=1&pr... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=on&in... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19&numphoto/login=A-CL-MS-smi.org%2F40 (KHTML, like Gecko) Version... │ http://irr.ru/index.ru/widgetchrome%2F&ti=no&dom_sell/pansiyskaya-obl.irr.html%... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga664.1721/deti74.ru/animals-planet.ru │ http://irr.ru/index.php?showalbum/login=K-SR-B-13-9635095,9661/9#f │ 15 │ +└────────────────┴────────────────┴─────────────┴────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.487 user 1.308000 sys 0.100000 +D 07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +Run Time: real 0.548 user 0.680000 sys 0.028000 +D D (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +Run Time: real 0.139 user 0.392000 sys 0.012000 +D " = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) ORDER BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))); +Run Time: real 0.017 user 0.200000 sys 0.020000 +D +D +D +D SELECT count(*) FROM hits;+ +┌──────────────┐ +│ count_star() │ +├──────────────┤ +│ 100000000 │ +└──────────────┘ +Run Time: real 0.012 user 0.180000 sys 0.000000 +D SELECT count(*) FROM hits WHERE AdvEngineID != 0; +d┌──────────────┐ +│ count_star() │ +├──────────────┤ +│ 630535 │ +└──────────────┘ +Run Time: real 0.154 user 0.400000 sys 0.052000 +D SELECT sum(AdvEngineID), count(*), avg(ResolutionWidth) FROM hits; +┌──────────────────┬──────────────┬──────────────────────┐ +│ sum(advengineid) │ count_star() │ avg(resolutionwidth) │ +├──────────────────┼──────────────┼──────────────────────┤ +│ 7280824 │ 100000000 │ 1513.48908394 │ +└──────────────────┴──────────────┴──────────────────────┘ +Run Time: real 0.049 user 0.728000 sys 0.032000 +D SELECT sum(UserID) FROM hits;e +┌───────────────────────┐ +│ sum(userid) │ +├───────────────────────┤ +│ 3.230605869407883e+26 │ +└───────────────────────┘ +Run Time: real 0.471 user 0.608000 sys 0.088000 +D SELECT COUNT(DISTINCT UserID) FROM hits; +┌───────────────┐ +│ count(userid) │ +├───────────────┤ +│ 17630976 │ +└───────────────┘ +Run Time: real 8.319 user 10.196000 sys 0.916000 +D SELECT COUNT(DISTINCT SearchPhrase) FROM hits; +o┌─────────────────────┐ +│ count(searchphrase) │ +├─────────────────────┤ +│ 6019589 │ +└─────────────────────┘ +Run Time: real 12.888 user 17.264000 sys 1.072000 +D SELECT min(EventDate), max(EventDate) FROM hits; +o┌────────────────┬────────────────┐ +│ min(eventdate) │ max(eventdate) │ +├────────────────┼────────────────┤ +│ 15888 │ 15917 │ +└────────────────┴────────────────┘ +Run Time: real 0.183 user 0.528000 sys 0.040000 +D SELECT AdvEngineID, count(*) FROM hits WHERE AdvEngineID != 0 GROUP BY AdvEngineID ORDER BY count(*) DESC;s +┌─────────────┬──────────────┐ +│ AdvEngineID │ count_star() │ +├─────────────┼──────────────┤ +│ 2 │ 404620 │ +│ 27 │ 113167 │ +│ 13 │ 45633 │ +│ 45 │ 38974 │ +│ 44 │ 9731 │ +│ 3 │ 6896 │ +│ 62 │ 5266 │ +│ 52 │ 3554 │ +│ 50 │ 938 │ +│ 28 │ 836 │ +│ 53 │ 350 │ +│ 25 │ 343 │ +│ 61 │ 158 │ +│ 21 │ 38 │ +│ 42 │ 20 │ +│ 16 │ 7 │ +│ 7 │ 3 │ +│ 22 │ 1 │ +└─────────────┴──────────────┘ +Run Time: real 0.048 user 0.684000 sys 0.000000 +D SELECT RegionID, COUNT(DISTINCT UserID) AS u FROM hits GROUP BY RegionID ORDER BY u DESC LIMIT 10;) +┌──────────┬─────────┐ +│ RegionID │ u │ +├──────────┼─────────┤ +│ 229 │ 2845673 │ +│ 2 │ 1081016 │ +│ 208 │ 831676 │ +│ 169 │ 604583 │ +│ 184 │ 322661 │ +│ 158 │ 307152 │ +│ 34 │ 299479 │ +│ 55 │ 286525 │ +│ 107 │ 272448 │ +│ 42 │ 243181 │ +└──────────┴─────────┘ +Run Time: real 10.040 user 11.608000 sys 1.272000 +D SELECT RegionID, sum(AdvEngineID), count(*) AS c, avg(ResolutionWidth), COUNT(DISTINCT UserID) FROM hits GROUP BY RegionID ORDER BY c DESC LIMIT 10;i +┌──────────┬──────────────────┬──────────┬──────────────────────┬───────────────┐ +│ RegionID │ sum(advengineid) │ c │ avg(resolutionwidth) │ count(userid) │ +├──────────┼──────────────────┼──────────┼──────────────────────┼───────────────┤ +│ 229 │ 2078084 │ 18296430 │ 1506.0876750819696 │ 2845673 │ +│ 2 │ 441711 │ 6687708 │ 1479.8410618406187 │ 1081016 │ +│ 208 │ 285925 │ 4261945 │ 1285.260504769536 │ 831676 │ +│ 169 │ 100887 │ 3320286 │ 1465.90517142198 │ 604583 │ +│ 32 │ 81498 │ 1843721 │ 1538.0370495318978 │ 216010 │ +│ 34 │ 161779 │ 1792406 │ 1548.364990409539 │ 299479 │ +│ 184 │ 55526 │ 1755223 │ 1506.8102679830426 │ 322661 │ +│ 42 │ 108820 │ 1542771 │ 1587.1074287758845 │ 243181 │ +│ 107 │ 120470 │ 1516722 │ 1548.6039623609336 │ 272448 │ +│ 51 │ 98212 │ 1435598 │ 1579.8864215469791 │ 211505 │ +└──────────┴──────────────────┴──────────┴──────────────────────┴───────────────┘ +Run Time: real 10.689 user 13.532000 sys 1.120000 +D SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(MobilePhoneModel) > 0 GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10;e +┌──────────────────┬─────────┐ +│ MobilePhoneModel │ u │ +├──────────────────┼─────────┤ +│ iPad │ 1090347 │ +│ iPhone │ 45758 │ +│ A500 │ 16046 │ +│ N8-00 │ 5565 │ +│ iPho │ 3300 │ +│ ONE TOUCH 6030A │ 2759 │ +│ GT-P7300B │ 1907 │ +│ 3110000 │ 1871 │ +│ GT-I9500 │ 1598 │ +│ eagle75 │ 1492 │ +└──────────────────┴─────────┘ +Run Time: real 2.253 user 6.108000 sys 0.468000 +D SELECT MobilePhone, MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(MobilePhoneModel) > 0 GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10;, +┌─────────────┬──────────────────┬────────┐ +│ MobilePhone │ MobilePhoneModel │ u │ +├─────────────┼──────────────────┼────────┤ +│ 1 │ iPad │ 931038 │ +│ 5 │ iPad │ 48385 │ +│ 6 │ iPad │ 29710 │ +│ 7 │ iPad │ 28391 │ +│ 118 │ A500 │ 16005 │ +│ 6 │ iPhone │ 14516 │ +│ 26 │ iPhone │ 13566 │ +│ 10 │ iPad │ 11433 │ +│ 32 │ iPad │ 9503 │ +│ 13 │ iPad │ 9417 │ +└─────────────┴──────────────────┴────────┘ +Run Time: real 2.528 user 6.544000 sys 0.508000 +D SELECT SearchPhrase, count(*) AS c FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;+ +┌────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchPhrase │ c │ +├────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 70263 │ +│ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 34675 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 24579 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 21649 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 19703 │ +│ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 19195 │ +│ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 17284 │ +│ galaxy table │ 16746 │ +│ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 16620 │ +│ \xD1\x81\xD0\xBA\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xBA\xD0\xBE \xD0\xBC\xD1\x8B\xD1\x... │ 12317 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 1.127 user 16.040000 sys 0.016000 +D SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10;m +┌────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchPhrase │ u │ +├────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 23673 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 19743 │ +│ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 18394 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 17553 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 14600 │ +│ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 14529 │ +│ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 14198 │ +│ \xD1\x81\xD0\xBA\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xBA\xD0\xBE \xD0\xBC\xD1\x8B\xD1\x... │ 9007 │ +│ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 8792 │ +│ \xD0\xBA\xD0\xBE\xD0\xBC\xD0\xB1\xD0\xB8\xD0\xBD\xD0\xB8\xD1\x80\xD0\xBE\xD0\xB... │ 7572 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 13.811 user 18.612000 sys 1.096000 +D SELECT SearchEngineID, SearchPhrase, count(*) AS c FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10;m +┌────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchEngineID │ SearchPhrase │ c │ +├────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ 2 │ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 46258 │ +│ 2 │ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 18871 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 16905 │ +│ 3 │ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 16748 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 14911 │ +│ 2 │ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 13716 │ +│ 2 │ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 13414 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 13105 │ +│ 3 │ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 12815 │ +│ 2 │ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 11946 │ +└────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 1.170 user 16.316000 sys 0.060000 +D SELECT UserID, count(*) FROM hits GROUP BY UserID ORDER BY count(*) DESC LIMIT 10;R +┌─────────────────────┬──────────────┐ +│ UserID │ count_star() │ +├─────────────────────┼──────────────┤ +│ 1313338681122956954 │ 29097 │ +│ 1907779576417363396 │ 25333 │ +│ 2305303682471783379 │ 10611 │ +│ 7982623143712728547 │ 7584 │ +│ 6018350421959114808 │ 6678 │ +│ 7280399273658728997 │ 6411 │ +│ 1090981537032625727 │ 6197 │ +│ 5730251990344211405 │ 6019 │ +│ 835157184735512989 │ 5211 │ +│ 770542365400669095 │ 4906 │ +└─────────────────────┴──────────────┘ +Run Time: real 0.961 user 12.416000 sys 0.028000 +D SELECT UserID, SearchPhrase, count(*) FROM hits GROUP BY UserID, SearchPhrase ORDER BY count(*) DESC LIMIT 10;l +┌─────────────────────┬──────────────┬──────────────┐ +│ UserID │ SearchPhrase │ count_star() │ +├─────────────────────┼──────────────┼──────────────┤ +│ 1313338681122956954 │ │ 29097 │ +│ 1907779576417363396 │ │ 25333 │ +│ 2305303682471783379 │ │ 10611 │ +│ 7982623143712728547 │ │ 6669 │ +│ 7280399273658728997 │ │ 6408 │ +│ 1090981537032625727 │ │ 6196 │ +│ 5730251990344211405 │ │ 6019 │ +│ 6018350421959114808 │ │ 5990 │ +│ 835157184735512989 │ │ 5209 │ +│ 770542365400669095 │ │ 4906 │ +└─────────────────────┴──────────────┴──────────────┘ +Run Time: real 2.309 user 29.740000 sys 0.256000 +D SELECT UserID, SearchPhrase, count(*) FROM hits GROUP BY UserID, SearchPhrase LIMIT 10;h +┌──────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬──────────────┐ +│ UserID │ SearchPhrase │ count_star() │ +├──────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼──────────────┤ +│ 2033505069917754133 │ │ 13 │ +│ 4177603680108851335 │ │ 2 │ +│ 2865865758754579169 │ │ 4 │ +│ 1348434893485989289 │ │ 1 │ +│ 4623542685155091116 │ \xD0\xB0\xD0\xB2\xD1\x82\xD0\xBE\xD1\x80\xD0\xBE\xD0\xB9 \xD0\xBF\xD0\xB5\xD1\x... │ 1 │ +│ 6824890550049353433 │ │ 14 │ +│ 1722975923542031 │ │ 2 │ +│ 1510416351411292943 │ \xD0\xBC\xD0\xB5\xD0\xB9\xD0\xBD\xD1\x8B\xD1\x85 \xD0\xB2 \xD0\xB0\xD0\xB2\xD1\... │ 2 │ +│ 10675348576094566371 │ │ 1 │ +│ 5485742187896741713 │ \xD0\xBF\xD0\xBE\xD0\xB3\xD0\xBE\xD0\xB4\xD0\xB0 │ 3 │ +└──────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴──────────────┘ +Run Time: real 2.013 user 29.824000 sys 0.232000 +D SELECT UserID, extract(minute FROM (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) AS m, SearchPhrase, count(*) FROM hits GROUP BY UserID, m, SearchPhrase ORDER BY count(*) DESC LIMIT 10;) +┌─────────────────────┬────┬──────────────┬──────────────┐ +│ UserID │ m │ SearchPhrase │ count_star() │ +├─────────────────────┼────┼──────────────┼──────────────┤ +│ 1313338681122956954 │ 31 │ │ 589 │ +│ 1313338681122956954 │ 28 │ │ 578 │ +│ 1313338681122956954 │ 29 │ │ 572 │ +│ 1313338681122956954 │ 33 │ │ 567 │ +│ 1313338681122956954 │ 27 │ │ 557 │ +│ 1313338681122956954 │ 32 │ │ 554 │ +│ 1313338681122956954 │ 30 │ │ 552 │ +│ 1313338681122956954 │ 34 │ │ 546 │ +│ 1313338681122956954 │ 26 │ │ 540 │ +│ 1313338681122956954 │ 10 │ │ 539 │ +└─────────────────────┴────┴──────────────┴──────────────┘ +Run Time: real 4.940 user 52.524000 sys 1.056000 +D SELECT UserID FROM hits WHERE UserID = 12345678901234567890; +Run Time: real 0.258 user 0.256000 sys 0.004000 +D SELECT count(*) FROM hits WHERE URL::TEXT LIKE '%metrika%';e +┌──────────────┐ +│ count_star() │ +├──────────────┤ +│ 211 │ +└──────────────┘ +Run Time: real 2.626 user 41.564000 sys 0.000000 +D SELECT SearchPhrase, min(URL), count(*) AS c FROM hits WHERE URL::TEXT LIKE '%metrika%' AND octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;u +┌────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───┐ +│ SearchPhrase │ min(url) │ c │ +├────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───┤ +│ \xD0\xBC\xD1\x8B\xD1\x81\xD0\xBB \xD0\xBF\xD0\xB5\xD1\x81\xD0\xB5\xD0\xBD \xD1\... │ http://smeshariki.ru/a-folder=cmarka=15&sort=&sll=36872/metrika/frl-2/bage-all/... │ 1 │ +│ \xD0\xB2\xD0\xB8\xD0\xB4\xD0\xB5\xD0\xBE \xD1\x82\xD0\xB0\xD0\xBA\xD0\xBE\xD0\x... │ http://maximum_438424&pvno=2&evlg=VC,0;VL,628;IC,1653-82676212&op_page=0&door=0... │ 1 │ +│ \xD1\x82\xD0\xB5\xD0\xBA\xD1\x81\xD1\x82\xD1\x8B \xD0\xBF\xD0\xBE\xD0\xB4\xD1\x... │ http://bdsmpeople.ru/index.ru/metrikadeletedAutoSearch │ 1 │ +│ \xD1\x83\xD0\xBD\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x80\xD0\xBC\xD0\xB5\xD0\xB4\xD0\xB... │ http://smeshariki.ru/index.ua/syllanet.ru/busine-tyazin?model=4878/page=10&cate... │ 1 │ +│ \xD0\xB4\xD0\xB8\xD0\xBD\xD0\xB0 \xD0\xB2\xD0\xB0\xD0\xBA\xD0\xB0\xD0\xBD\xD1\x... │ http://ecrn.ru/personal/gost277572,9589&pt=b&pd=8&pw=2&page3/?state=0&damages/0... │ 1 │ +│ \xD1\x82\xD1\x80\xD1\x83\xD0\xB4\xD0\xB0 \xD0\xB4\xD0\xBB\xD1\x8F \xD0\xB2\xD1\... │ http://smeshariki.ru/recipes/sadovka.ru/gorod55.ru/search?text=\xD0\xB8\xD0\xB7... │ 1 │ +│ \xD0\xBA\xD0\xBE\xD1\x88\xD0\xBA\xD1\x83 \xD1\x81\xD0\xB7\xD0\xB0\xD0\xBE \xD1\... │ http://bdsmpeople.ru/index.ru/metrikadeletedAutoSearch │ 1 │ +│ \xD1\x80\xD0\xB5\xD1\x86\xD0\xB5\xD0\xBF\xD1\x82 │ http://smeshariki.ru/index.ua/search/metrikanske-urali-belorussia/28.html?1=1&c... │ 1 │ +│ \xD0\xB4\xD0\xB8\xD0\xBD\xD0\xB0 \xD0\xB2\xD0\xB0\xD0\xBA\xD0\xB0\xD0\xBD\xD1\x... │ http://ecrn.ru/personal/gost277572,9589&pt=b&pd=8&pw=2&page3/?state=0&damages/0... │ 1 │ +│ \xD1\x80\xD0\xB0\xD0\xB1\xD0\xBE\xD0\xB2\xD1\x8B\xD0\xB5 \xD0\xB4\xD0\xBE\xD1\x... │ http://smeshariki.ru/index.ua/auto.ria.ua/change=0&s_yers=0&with_video.yandex.u... │ 1 │ +└────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───┘ +Run Time: real 0.716 user 11.292000 sys 0.000000 +D count(*) AS c, COUNT(DISTINCT UserID) FROM hits WHERE Title::TEXT LIKE '%Яндекс%' AND URL::TEXT NOT LIKE '%.yandex.%' AND octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;( +Run Time: real 3.669 user 19.464000 sys 0.932000 +D SELECT * FROM hits WHERE URL::TEXT LIKE '%metrika%' ORDER BY EventTime LIMIT 10;e +┌─────────────────────┬────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┬────────────┬───────────┬───────────┬────────────┬──────────┬─────────────────────┬──────────────┬─────┬───────────┬────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬─────────┬───────────────────┬─────────────────┬───────────────┬─────────────┬─────────────────┬──────────────────┬─────────────────┬────────────┬────────────┬─────────────┬──────────┬──────────┬────────────────┬────────────────┬──────────────┬──────────────────┬──────────┬─────────────┬──────────────────┬────────┬─────────────┬────────────────┬────────────────┬──────────────┬─────────────┬─────────────┬───────────────────┬────────────────────┬────────────────┬─────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┬──────────────────────┬─────────────┬────────┬────────────┬─────────────┬─────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┬──────────────┬─────────┬─────────────┬───────────────┬──────────┬──────────┬────────────────┬─────┬─────┬────────┬───────────┬───────────┬────────────┬────────────┬────────────┬───────────────┬─────────────────┬────────────────┬───────────────┬──────────────┬───────────┬────────────┬───────────┬───────────────┬─────────────────────┬───────────────────┬─────────────┬───────────────────────┬──────────────────┬────────────┬──────────────┬───────────────┬─────────────────┬─────────────────────┬────────────────────┬──────────────┬──────────────────┬───────────┬───────────┬─────────────┬────────────┬─────────┬─────────┬──────────┬──────────────────────┬──────────────────────┬──────┐ +│ WatchID │ JavaEnable │ Title │ GoodEvent │ EventTime │ EventDate │ CounterID │ ClientIP │ RegionID │ UserID │ CounterClass │ OS │ UserAgent │ URL │ Referer │ Refresh │ RefererCategoryID │ RefererRegionID │ URLCategoryID │ URLRegionID │ ResolutionWidth │ ResolutionHeight │ ResolutionDepth │ FlashMajor │ FlashMinor │ FlashMinor2 │ NetMajor │ NetMinor │ UserAgentMajor │ UserAgentMinor │ CookieEnable │ JavascriptEnable │ IsMobile │ MobilePhone │ MobilePhoneModel │ Params │ IPNetworkID │ TraficSourceID │ SearchEngineID │ SearchPhrase │ AdvEngineID │ IsArtifical │ WindowClientWidth │ WindowClientHeight │ ClientTimeZone │ ClientEventTime │ SilverlightVersion1 │ SilverlightVersion2 │ SilverlightVersion3 │ SilverlightVersion4 │ PageCharset │ CodeVersion │ IsLink │ IsDownload │ IsNotBounce │ FUniqID │ OriginalURL │ HID │ IsOldCounter │ IsEvent │ IsParameter │ DontCountHits │ WithHash │ HitColor │ LocalEventTime │ Age │ Sex │ Income │ Interests │ Robotness │ RemoteIP │ WindowName │ OpenerName │ HistoryLength │ BrowserLanguage │ BrowserCountry │ SocialNetwork │ SocialAction │ HTTPError │ SendTiming │ DNSTiming │ ConnectTiming │ ResponseStartTiming │ ResponseEndTiming │ FetchTiming │ SocialSourceNetworkID │ SocialSourcePage │ ParamPrice │ ParamOrderID │ ParamCurrency │ ParamCurrencyID │ OpenstatServiceName │ OpenstatCampaignID │ OpenstatAdID │ OpenstatSourceID │ UTMSource │ UTMMedium │ UTMCampaign │ UTMContent │ UTMTerm │ FromTag │ HasGCLID │ RefererHash │ URLHash │ CLID │ +├─────────────────────┼────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┼────────────┼───────────┼───────────┼────────────┼──────────┼─────────────────────┼──────────────┼─────┼───────────┼────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼─────────┼───────────────────┼─────────────────┼───────────────┼─────────────┼─────────────────┼──────────────────┼─────────────────┼────────────┼────────────┼─────────────┼──────────┼──────────┼────────────────┼────────────────┼──────────────┼──────────────────┼──────────┼─────────────┼──────────────────┼────────┼─────────────┼────────────────┼────────────────┼──────────────┼─────────────┼─────────────┼───────────────────┼────────────────────┼────────────────┼─────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┼──────────────────────┼─────────────┼────────┼────────────┼─────────────┼─────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┼──────────────┼─────────┼─────────────┼───────────────┼──────────┼──────────┼────────────────┼─────┼─────┼────────┼───────────┼───────────┼────────────┼────────────┼────────────┼───────────────┼─────────────────┼────────────────┼───────────────┼──────────────┼───────────┼────────────┼───────────┼───────────────┼─────────────────────┼───────────────────┼─────────────┼───────────────────────┼──────────────────┼────────────┼──────────────┼───────────────┼─────────────────┼─────────────────────┼────────────────────┼──────────────┼──────────────────┼───────────┼───────────┼─────────────┼────────────┼─────────┼─────────┼──────────┼──────────────────────┼──────────────────────┼──────┤ +│ 9008228978173248400 │ 1 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372714203 │ 15888 │ 46429 │ 1741285710 │ 208 │ 727970985383478408 │ 0 │ 2 │ 2 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ http://smeshariki.ru/page%3D%26ev_n%3Dtvor_3_4 │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 1638 │ 1658 │ 37 │ 14 │ 0 │ 700.22 │ 0 │ 0 │ 15 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 2349927 │ -1 │ 0 │ │ 0 │ 0 │ 1844 │ 888 │ 135 │ 1372711075 │ 3 │ 0 │ 29241 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 0 │ │ 926364569 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372755313 │ 31 │ 1 │ 0 │ 0 │ 0 │ 1985697352 │ 13001 │ -1 │ 22 │ vG │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 16989158750233735299 │ 2619784076535420345 │ 0 │ +│ 7319686668886932386 │ 0 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372742048 │ 15888 │ 46429 │ 675534320 │ 208 │ 1167829038705361511 │ 0 │ 45 │ 1 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ http://smeshariki.ru/page=6&sqi=2&ved=0CC0QFjAA │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 280 │ 733 │ 0 │ 0 │ 0 │ │ 0 │ 0 │ 4 │ sO │ 1 │ 1 │ 1 │ 0 │ │ │ 1444853 │ -1 │ 0 │ │ 0 │ 0 │ 997 │ 800 │ 623 │ 1372713898 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 4655941889681510909 │ │ 721190565 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372747193 │ 31 │ 2 │ 3 │ 717 │ 0 │ 2935426383 │ 22084 │ -1 │ 1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 11629579472615090596 │ 2619784076535420345 │ 0 │ +│ 5650132582613869356 │ 0 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372742083 │ 15888 │ 46429 │ 675534320 │ 208 │ 1167829038705361511 │ 0 │ 45 │ 1 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ http://smeshariki.ru/page=6&sqi=2&ved=0CC0QFjAA │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 280 │ 733 │ 0 │ 0 │ 0 │ │ 0 │ 0 │ 4 │ D\xE0 │ 1 │ 1 │ 1 │ 0 │ │ │ 1444853 │ -1 │ 0 │ │ 0 │ 0 │ 997 │ 800 │ 623 │ 1372713960 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 4655941889681510909 │ │ 721255326 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372747245 │ 31 │ 2 │ 3 │ 717 │ 0 │ 2935426383 │ 64225 │ -1 │ 1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 11629579472615090596 │ 2619784076535420345 │ 0 │ +│ 6211862319117980382 │ 0 │ \xD0\x9A\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ 1 │ 1372744794 │ 15888 │ 46429 │ 1384976586 │ 208 │ 45205883125357727 │ 0 │ 8 │ 1 │ http://smeshariki.ru/used/Audi-1993527&stateID=0&metrikauto/bmw_74012099/0/&&pu... │ │ 0 │ 0 │ 0 │ 9911 │ 216 │ 475 │ 368 │ 0 │ 0 │ 0 │ │ 0 │ 0 │ 7 │ D\xE0 │ 1 │ 1 │ 1 │ 0 │ │ │ 3195177 │ 0 │ 0 │ │ 0 │ 0 │ 412 │ 286 │ 135 │ 1372732810 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 7015666733105959947 │ │ 641313121 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372774931 │ 28 │ 1 │ 2 │ 1 │ 0 │ 1889444196 │ 44835 │ -1 │ 0 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 18150585289071012696 │ 2619784076535420345 │ 0 │ +│ 8127216893234548048 │ 0 │ \xD0\xA2\xD0\xBE\xD0\xBB\xD1\x81\xD1\x82\xD1\x83\xD1\x85\xD1\x83, \xD0\xB5\xD1\... │ 1 │ 1372752539 │ 15888 │ 46429 │ 1237806922 │ 208 │ 750085446646698731 │ 0 │ 2 │ 3 │ http://smeshariki.ru/used/99114578622-14406072,9269587/roometrika/?page=7&pw=2&... │ http://smeshariki.ru/page=11956bd3f5ba-bolshiient │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 1081 │ 979 │ 23 │ 15 │ 7 │ 700 │ 0 │ 0 │ 17 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 2914423 │ -1 │ 0 │ │ 0 │ 0 │ 1434 │ 739 │ 623 │ 1372781865 │ 0 │ 0 │ 0 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 5496132257355632424 │ │ 983272850 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372760187 │ 50 │ 2 │ 2 │ 60 │ 18 │ 1113465640 │ 60610 │ -1 │ 29 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 194 │ 1631 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 13570011243001147277 │ 11339053197878713733 │ 0 │ +│ 5016976626924998727 │ 1 │ Toyota \xD1\x80\xD1\x83\xD0\xBA\xD0\xB0\xD0\xBB\xD1\x8B \xD0\xB4\xD0\xBB\xD1\x8... │ 1 │ 1372758784 │ 15888 │ 5645 │ 3888153915 │ 107 │ 4058808124307537573 │ 1 │ 2 │ 88 │ http:%2F%2Fwwww.bonprix.ru&pvid=131&op_products/transformality.pulsceness/01-me... │ http://forum.amur.info/node/12451180167540 │ 0 │ 10868 │ 635 │ 16361 │ 943 │ 1638 │ 777 │ 37 │ 15 │ 7 │ 700 │ 0 │ 0 │ 1 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 2726799 │ -1 │ 0 │ │ 0 │ 0 │ 1509 │ 618 │ 135 │ 1372835656 │ 0 │ 0 │ 0 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 6227398498798751865 │ │ 255959698 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372763371 │ 31 │ 1 │ 3 │ 3555 │ 13 │ 4006630121 │ -1 │ -1 │ -1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 10333931216342739575 │ 10009133566342666602 │ 0 │ +│ 4963765960745323978 │ 0 │ \xD0\x93\xD0\x90\xD0\x97 (ZAZ) 5403J \xE2\x80\x93 \xD0\xA4\xD0\xB8\xD0\xBB\xD1\... │ 1 │ 1372793626 │ 15888 │ 46429 │ 2063319617 │ 23967 │ 5283184799411504286 │ 0 │ 44 │ 2 │ http://smeshariki.ru/userId=0&matched_car=Volkswagency=1&p=8090/roometrika/?pag... │ http://smeshariki.ru/smsarhiv/num/33363634383294&lr=66&v6s=2&bodystyle │ 0 │ 16000 │ 158 │ 9911 │ 216 │ 1996 │ 1781 │ 37 │ 15 │ 7 │ 700 │ 0 │ 0 │ 10 │ nA │ 1 │ 1 │ 0 │ 0 │ │ │ 4110783 │ -1 │ 0 │ │ 0 │ 0 │ 1551 │ 955 │ 291 │ 1372730435 │ 7 │ 1 │ 9577 │ 0 │ windows-1251;charset │ 1601 │ 0 │ 0 │ 0 │ 8904020920948834668 │ │ 883138215 │ 0 │ 0 │ 0 │ 0 │ 0 │ g │ 1372777308 │ 22 │ 2 │ 2 │ 11339 │ 18 │ 2136940575 │ 1653 │ -1 │ 1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 18276268115953212999 │ 9484754903086635093 │ 0 │ +│ 6284148982888572412 │ 1 │ Morskoj port \xE2\x80\x93 \xD0\x9D\xD0\xBE\xD0\xB2\xD0\xBE\xD1\x81\xD1\x82\xD1\... │ 1 │ 1372795222 │ 15889 │ 3922 │ 2460998382 │ 40 │ 1643466856862289966 │ 1 │ 44 │ 7 │ http://moikrug.ru/message-12-kak-pravdorubovnik_metrika-info.php?f=23&prr │ http://diary.ru/GameMain.aspx?d=1412&lr=75&mode=photo/login=igorod.irr.ru/i6102... │ 0 │ 306 │ 29199 │ 92 │ 247 │ 1368 │ 554 │ 37 │ 15 │ 7 │ 800.94 │ 0 │ 0 │ 12 │ D\xE0 │ 1 │ 1 │ 0 │ 0 │ │ │ 1166094 │ 1 │ 0 │ │ 0 │ 0 │ 1253 │ 642 │ 135 │ 1372799147 │ 4 │ 1 │ 16561 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 7061143530822060136 │ │ 699865379 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372810401 │ 31 │ 2 │ 3 │ 6 │ 0 │ 3849445958 │ -1 │ -1 │ -1 │ S0 │ h1 │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 14060834305267311691 │ 1791983733815963315 │ 0 │ +│ 6024648629746505393 │ 0 │ \xD0\x9F\xD0\xBE\xD0\xB3\xD1\x80\xD0\xB5\xD0\xB2\xD0\xB0\xD1\x82\xD0\xB5\xD0\xB... │ 1 │ 1372795271 │ 15889 │ 1200 │ 2932550360 │ 208 │ 1578473929930714515 │ 1 │ 107 │ 82 │ http://afisha.yandex.ru/real-estate/out-of-town/household_app_metrika.ru/wildbe... │ http://ad.adrive_type_id=1959251&stUrl%3Dpopular/kw/306161&lr=1418][to]=&input_... │ 0 │ 15265 │ 19757 │ 8953 │ 32252 │ 958 │ 1871 │ 37 │ 0 │ 0 │ │ 0 │ 0 │ 3 │ D\xE0 │ 1 │ 1 │ 1 │ 6 │ │ │ 4010641 │ -1 │ 0 │ │ 0 │ 0 │ 521 │ 1803 │ -1 │ 1372870507 │ 0 │ 0 │ 0 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 0 │ http://b.kavanga.ru/tags/%FD%ED%FB%E2%F3%E6%E5%E6%ED%E8%ED%F1%FF%ED&ti=%D0%BD%D... │ 120241233 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372842094 │ 0 │ 0 │ 0 │ 0 │ 0 │ 3975911785 │ -1 │ -1 │ -1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 9685011611637290144 │ 5941547189901908071 │ 0 │ +│ 4857420640250996887 │ 1 │ Suzuki Escort 4* (\xD0\xA4\xD1\x80\xD0\xB0\xD0\xBD\xD1\x86\xD1\x8B 3 \xD1\x81\x... │ 1 │ 1372800737 │ 15889 │ 3922 │ 3201307115 │ 190 │ 7335986183190726964 │ 1 │ 44 │ 88 │ http://pova-ul-mir.irr.ru/search.php?gidcar=37408&uuid=1&bc=3&city=0&pv=20&s_ye... │ http://news/238/~6/?cauth=1&av=1&nm=1&ms=1,2/currency=RUR/page_num_id=15366563&... │ 0 │ 306 │ 144 │ 304 │ 132 │ 1368 │ 554 │ 37 │ 15 │ 4 │ 202 │ 0 │ 0 │ 1 │ fi │ 1 │ 1 │ 0 │ 0 │ │ │ 2311071 │ -1 │ 0 │ │ 0 │ 0 │ 1333 │ 924 │ 322 │ 1372840359 │ 4 │ 1 │ 16561 │ 0 │ windows │ 1 │ 0 │ 0 │ 0 │ 7659179697273795837 │ │ 232010762 │ 0 │ 0 │ 0 │ 0 │ 0 │ 5 │ 1372866397 │ 31 │ 2 │ 2 │ 3658 │ 28 │ 2920265313 │ -1 │ -1 │ -1 │ S0 │ \xD0\x0C │ │ │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ │ 0 │ │ NH\x1C │ 0 │ │ │ │ │ │ │ │ │ │ │ 0 │ 8839345929686869081 │ 5449259806403761803 │ 0 │ +└─────────────────────┴────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┴────────────┴───────────┴───────────┴────────────┴──────────┴─────────────────────┴──────────────┴─────┴───────────┴────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴─────────┴───────────────────┴─────────────────┴───────────────┴─────────────┴─────────────────┴──────────────────┴─────────────────┴────────────┴────────────┴─────────────┴──────────┴──────────┴────────────────┴────────────────┴──────────────┴──────────────────┴──────────┴─────────────┴──────────────────┴────────┴─────────────┴────────────────┴────────────────┴──────────────┴─────────────┴─────────────┴───────────────────┴────────────────────┴────────────────┴─────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴──────────────────────┴─────────────┴────────┴────────────┴─────────────┴─────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┴──────────────┴─────────┴─────────────┴───────────────┴──────────┴──────────┴────────────────┴─────┴─────┴────────┴───────────┴───────────┴────────────┴────────────┴────────────┴───────────────┴─────────────────┴────────────────┴───────────────┴──────────────┴───────────┴────────────┴───────────┴───────────────┴─────────────────────┴───────────────────┴─────────────┴───────────────────────┴──────────────────┴────────────┴──────────────┴───────────────┴─────────────────┴─────────────────────┴────────────────────┴──────────────┴──────────────────┴───────────┴───────────┴─────────────┴────────────┴─────────┴─────────┴──────────┴──────────────────────┴──────────────────────┴──────┘ +Run Time: real 38.169 user 135.808000 sys 9.856000 +D SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY EventTime LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ \xD1\x81\xD0\xB8\xD0\xBC\xD0\xBF\xD1\x82\xD0\xBE\xD0\xBC\xD1\x8B \xD1\x80\xD0\x... │ +│ galaxy s4 zoom \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC │ +│ \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC \xD0\xBD\xD0\xB5\xD0\xB1\xD0\xBE\xD0\x... │ +│ \xD0\xBD\xD0\xBE\xD1\x87\xD0\xBD\xD0\xBE \xD0\xBA\xD0\xB8\xD1\x82\xD0\xB0\xD1\x... │ +│ \xD0\xB0\xD0\xB2\xD0\xBE\xD0\xBC \xD0\xBA\xD0\xBE\xD0\xBD\xD1\x81\xD1\x82\xD0\x... │ +│ \xD0\xBE\xD1\x82\xD0\xB4\xD1\x8B\xD1\x85\xD0\xB0 \xD1\x87\xD0\xB5\xD0\xBC \xD0\... │ +│ \xD1\x81\xD0\xBA\xD0\xB0\xD1\x87\xD0\xB0\xD1\x82\xD1\x8C \xD1\x87\xD0\xB8\xD1\x... │ +│ \xD0\xB0\xD0\xBD\xD0\xB0\xD0\xBF\xD0\xB0 \xD0\xBE\xD0\xBF\xD0\xB5\xD1\x80\xD0\x... │ +│ \xD1\x81\xD0\xBB\xD0\xBE\xD0\xBD.\xD1\x80\xD1\x83\xD0\xB1., \xD0\xB4. \xD0\xB0.... │ +│ \xD1\x80\xD0\xB0\xD1\x81\xD0\xBF\xD0\xB8\xD1\x81\xD0\xB0\xD0\xBD\xD0\xB8\xD0\xB... │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 0.227 user 3.484000 sys 0.080000 +D SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY SearchPhrase LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ ! hektdf gjcgjhn conster │ +│ ! \xD1\x81\xD0\xBA\xD0\xB0\xD1\x80\xD0\xBF │ +│ !(\xD0\xBA\xD0\xB0\xD0\xBA \xD0\xB2\xD0\xBE\xD1\x80\xD0\xBE\xD0\xBD\xD0\xB8 │ +│ !(\xD0\xBF\xD0\xBE \xD0\xB3\xD0\xBE\xD1\x80\xD0\xB8\xD1\x8E \xD0\xB2 \xD1\x8F\x... │ +│ !(\xD1\x81) \xD0\xBF\xD1\x80\xD0\xBE \xD0\xB4\xD0\xBF\xD0\xBE \xD1\x81\xD0\xB5\... │ +│ !(\xD1\x81\xD0\xB0\xD0\xBB\xD0\xBE\xD0\xBD\xD1\x8B \xD0\xBE\xD1\x81\xD1\x82\xD0... │ +│ !(\xD1\x81\xD1\x82\xD0\xB0\xD1\x80\xD1\x82\xD0\xB5\xD1\x80 rav4 \xD1\x82\xD1\x8... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD0\xB4\xD0\xBB\xD1\x8F \xD0\xBC\xD1\x8F\xD1... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD0\xBC\xD0\xB0\xD1\x83\xD1\x81 \xD0\xBA\xD0... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD1\x81\xD0\xB5\xD1\x80\xD0\xB8\xD0\xB8 │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 0.271 user 3.996000 sys 0.092000 +D SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY EventTime, SearchPhrase LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ galaxy s4 zoom \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC │ +│ \xD0\xBD\xD0\xBE\xD1\x87\xD0\xBD\xD0\xBE \xD0\xBA\xD0\xB8\xD1\x82\xD0\xB0\xD1\x... │ +│ \xD1\x81\xD0\xB8\xD0\xBC\xD0\xBF\xD1\x82\xD0\xBE\xD0\xBC\xD1\x8B \xD1\x80\xD0\x... │ +│ \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC \xD0\xBD\xD0\xB5\xD0\xB1\xD0\xBE\xD0\x... │ +│ \xD0\xB0\xD0\xB2\xD0\xBE\xD0\xBC \xD0\xBA\xD0\xBE\xD0\xBD\xD1\x81\xD1\x82\xD0\x... │ +│ \xD0\xB0\xD0\xBD\xD0\xB0\xD0\xBF\xD0\xB0 \xD0\xBE\xD0\xBF\xD0\xB5\xD1\x80\xD0\x... │ +│ \xD0\xB1\xD1\x80\xD0\xB8\xD1\x82\xD0\xB0 \xD0\xB3\xD0\xB0\xD0\xBD\xD0\xB0\xD0\x... │ +│ \xD0\xBA\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ +│ \xD0\xBE\xD1\x82\xD0\xB4\xD1\x8B\xD1\x85\xD0\xB0 \xD1\x87\xD0\xB5\xD0\xBC \xD0\... │ +│ \xD1\x80\xD0\xB0\xD1\x81\xD0\xBF\xD0\xB8\xD1\x81\xD0\xB0\xD0\xBD\xD0\xB8\xD0\xB... │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 0.231 user 3.632000 sys 0.008000 +D SELECT CounterID, avg(octet_length(URL)) AS l, count(*) AS c FROM hits WHERE octet_length(URL) > 0 GROUP BY CounterID HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25;L +┌───────────┬────────────────────┬─────────┐ +│ CounterID │ l │ c │ +├───────────┼────────────────────┼─────────┤ +│ 233773 │ 469.18537326484886 │ 2938865 │ +│ 245438 │ 271.7892512777364 │ 2510103 │ +│ 122612 │ 238.64530987208474 │ 3574007 │ +│ 234004 │ 204.28793262381632 │ 238660 │ +│ 1634 │ 197.83321731651554 │ 323229 │ +│ 786 │ 186.75537634408602 │ 120528 │ +│ 114157 │ 142.91881538575285 │ 216408 │ +│ 515 │ 126.22860040706026 │ 146907 │ +│ 256004 │ 125.37108455074805 │ 858171 │ +│ 95427 │ 120.26856903175477 │ 374306 │ +│ 199550 │ 109.81720498866335 │ 7115413 │ +│ 220992 │ 105.85666196266179 │ 494614 │ +│ 196239 │ 98.34882201749727 │ 163797 │ +│ 62 │ 93.15981711034343 │ 738150 │ +│ 96948 │ 92.74321182146618 │ 396093 │ +│ 188878 │ 91.98308322489247 │ 311998 │ +│ 249603 │ 91.88026594639518 │ 120325 │ +│ 3922 │ 87.83856410684609 │ 8527069 │ +│ 191697 │ 86.95776647628826 │ 124664 │ +│ 97467 │ 84.2953696503987 │ 131178 │ +│ 186300 │ 83.97258027738701 │ 802561 │ +│ 146891 │ 77.77430173504756 │ 605286 │ +│ 38 │ 76.43757015971798 │ 507770 │ +│ 230962 │ 76.3127707226559 │ 169223 │ +│ 77639 │ 75.38681923602442 │ 253961 │ +└───────────┴────────────────────┴─────────┘ +Run Time: real 0.426 user 6.372000 sys 0.356000 +D //(?:www\.)?([^/]+)/.*$', '\1') AS key, avg(octet_length(Referer)) AS l, count(*) AS c, min(Referer) FROM hits WHERE octet_length(Referer) > 0 GROUP BY key HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25;E +┌────────────────────────────────────────────────────────────────────────┬────────────────────┬─────────┬────────────────────────────────────────────────────────────────────────────────────┐ +│ key │ l │ c │ min(referer) │ +├────────────────────────────────────────────────────────────────────────┼────────────────────┼─────────┼────────────────────────────────────────────────────────────────────────────────────┤ +│ svpressa.ru │ 307.980979437341 │ 242527 │ http://svpressa.ru/ │ +│ msuzie-showforumdisplay │ 263.327228380409 │ 183676 │ http://msuzie-showforumdisplay/63/~2/?name=&cost_neu%3D400%26retpath=default777... │ +│ saint-peters-total=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 80 │ 242.5236948271821 │ 200529 │ http://saint-peters-total=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 80/c... │ +│ domics │ 212.92990978061542 │ 326094 │ http://domics/825179.11931861234499792 │ +│ e96.ru │ 210.09628206687884 │ 1019276 │ http://e96.ru/%3Ffrom]=&input_act[count_num=0&dff=arian-carrina1201517&cad=rjt&... │ +│ gadgets.irr.ru │ 131.9597008950273 │ 349710 │ https://gadgets.irr.ru/2jmj7l5rSw0yVb │ +│ google.ru │ 109.24485253818524 │ 2158491 │ http://google.ru/ │ +│ go.mail │ 108.63930572737723 │ 8228007 │ http://go.mail/04/detskaia-moda-zhiensmed │ +│ msouz.ru │ 106.10887286512423 │ 301774 │ http://msouz.ru/?ffshop │ +│ state=19945206 │ 105.6469046513171 │ 512414 │ http://state=19945206/foto-4/login%20NoTs3M&where=all&filmId=u8aGGqtWs3M&where=... │ +│ loveplanet.ru │ 104.60136383347789 │ 461200 │ http://loveplanet.ru/%3Faw_opel/page=2013 │ +│ bonprix.ru │ 104.41683309557774 │ 1125105 │ http://bonprix.ru/ │ +│ novjob.ru │ 96.75331644732393 │ 133049 │ http://novjob.ru/ │ +│ cn.ru │ 95.63198716663325 │ 124675 │ http://cn.ru/GameMain.aspx#catalog/100523&tails.xml?market_pc.html?pid=9403&lr=... │ +│ geomethiettai.ru │ 94.78816556817006 │ 115916 │ https://geomethiettai.ru/GameMain.aspx?group=houses/list=266559j7077&num=7&prun... │ +│ kino │ 90.27628829938655 │ 120139 │ http://kino/6/21/2/women.asp?whichpage4/#oversion=unreadm&uid │ +│ yaroslavens.ru │ 90.17077281117085 │ 124610 │ http://yaroslavens.ru/main.aspx#catalog%2F1004-1100000147-otvet/actions/disloca... │ +│ mysw.info │ 89.68684313159915 │ 984596 │ http://mysw.info/ │ +│ m.myloveplanet.ru │ 88.73233749439181 │ 151564 │ http://m.myloveplanet.ru/ │ +│ povarenok.ru │ 83.97395952020882 │ 144813 │ http://povarenok.ru/ │ +│ gorod │ 80.33107253811141 │ 110728 │ http://gorod/%3Fauto.ria.ua%2Fjob │ +│ yandsearch │ 80.21664430621621 │ 245970 │ http://www.yandsearch/rooms=1/page2 │ +│ myloveplanet.ru │ 80.08183067768715 │ 110582 │ http://myloveplanet.ru/#associety/auto │ +│ tambov.irr.ru │ 77.8650188064113 │ 315318 │ http://tambov.irr.ru/0/c1/tgFtaeLDK0yb01A7xvQF08sjCFqQxn51 │ +│ kurortmag.ru │ 75.74958779884584 │ 155264 │ http://kurortmag.ru/ │ +└────────────────────────────────────────────────────────────────────────┴────────────────────┴─────────┴────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 123.649 user 1892.300000 sys 4.120000 +D + 82), sum(ResolutionWidth + 83), sum(ResolutionWidth + 84), sum(ResolutionWidth + 85), sum(ResolutionWidth + 86), sum(ResolutionWidth + 87), sum(ResolutionWidth + 88), sum(ResolutionWidth + 89) FROM hits; +┌──────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┐ +│ sum(resolutionwidth) │ sum(resolutionwidth + 1) │ sum(resolutionwidth + 2) │ sum(resolutionwidth + 3) │ sum(resolutionwidth + 4) │ sum(resolutionwidth + 5) │ sum(resolutionwidth + 6) │ sum(resolutionwidth + 7) │ sum(resolutionwidth + 8) │ sum(resolutionwidth + 9) │ sum(resolutionwidth + 10) │ sum(resolutionwidth + 11) │ sum(resolutionwidth + 12) │ sum(resolutionwidth + 13) │ sum(resolutionwidth + 14) │ sum(resolutionwidth + 15) │ sum(resolutionwidth + 16) │ sum(resolutionwidth + 17) │ sum(resolutionwidth + 18) │ sum(resolutionwidth + 19) │ sum(resolutionwidth + 20) │ sum(resolutionwidth + 21) │ sum(resolutionwidth + 22) │ sum(resolutionwidth + 23) │ sum(resolutionwidth + 24) │ sum(resolutionwidth + 25) │ sum(resolutionwidth + 26) │ sum(resolutionwidth + 27) │ sum(resolutionwidth + 28) │ sum(resolutionwidth + 29) │ sum(resolutionwidth + 30) │ sum(resolutionwidth + 31) │ sum(resolutionwidth + 32) │ sum(resolutionwidth + 33) │ sum(resolutionwidth + 34) │ sum(resolutionwidth + 35) │ sum(resolutionwidth + 36) │ sum(resolutionwidth + 37) │ sum(resolutionwidth + 38) │ sum(resolutionwidth + 39) │ sum(resolutionwidth + 40) │ sum(resolutionwidth + 41) │ sum(resolutionwidth + 42) │ sum(resolutionwidth + 43) │ sum(resolutionwidth + 44) │ sum(resolutionwidth + 45) │ sum(resolutionwidth + 46) │ sum(resolutionwidth + 47) │ sum(resolutionwidth + 48) │ sum(resolutionwidth + 49) │ sum(resolutionwidth + 50) │ sum(resolutionwidth + 51) │ sum(resolutionwidth + 52) │ sum(resolutionwidth + 53) │ sum(resolutionwidth + 54) │ sum(resolutionwidth + 55) │ sum(resolutionwidth + 56) │ sum(resolutionwidth + 57) │ sum(resolutionwidth + 58) │ sum(resolutionwidth + 59) │ sum(resolutionwidth + 60) │ sum(resolutionwidth + 61) │ sum(resolutionwidth + 62) │ sum(resolutionwidth + 63) │ sum(resolutionwidth + 64) │ sum(resolutionwidth + 65) │ sum(resolutionwidth + 66) │ sum(resolutionwidth + 67) │ sum(resolutionwidth + 68) │ sum(resolutionwidth + 69) │ sum(resolutionwidth + 70) │ sum(resolutionwidth + 71) │ sum(resolutionwidth + 72) │ sum(resolutionwidth + 73) │ sum(resolutionwidth + 74) │ sum(resolutionwidth + 75) │ sum(resolutionwidth + 76) │ sum(resolutionwidth + 77) │ sum(resolutionwidth + 78) │ sum(resolutionwidth + 79) │ sum(resolutionwidth + 80) │ sum(resolutionwidth + 81) │ sum(resolutionwidth + 82) │ sum(resolutionwidth + 83) │ sum(resolutionwidth + 84) │ sum(resolutionwidth + 85) │ sum(resolutionwidth + 86) │ sum(resolutionwidth + 87) │ sum(resolutionwidth + 88) │ sum(resolutionwidth + 89) │ +├──────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┤ +│ 151348908394 │ 151448908394 │ 151548908394 │ 151648908394 │ 151748908394 │ 151848908394 │ 151948908394 │ 152048908394 │ 152148908394 │ 152248908394 │ 152348908394 │ 152448908394 │ 152548908394 │ 152648908394 │ 152748908394 │ 152848908394 │ 152948908394 │ 153048908394 │ 153148908394 │ 153248908394 │ 153348908394 │ 153448908394 │ 153548908394 │ 153648908394 │ 153748908394 │ 153848908394 │ 153948908394 │ 154048908394 │ 154148908394 │ 154248908394 │ 154348908394 │ 154448908394 │ 154548908394 │ 154648908394 │ 154748908394 │ 154848908394 │ 154948908394 │ 155048908394 │ 155148908394 │ 155248908394 │ 155348908394 │ 155448908394 │ 155548908394 │ 155648908394 │ 155748908394 │ 155848908394 │ 155948908394 │ 156048908394 │ 156148908394 │ 156248908394 │ 156348908394 │ 156448908394 │ 156548908394 │ 156648908394 │ 156748908394 │ 156848908394 │ 156948908394 │ 157048908394 │ 157148908394 │ 157248908394 │ 157348908394 │ 157448908394 │ 157548908394 │ 157648908394 │ 157748908394 │ 157848908394 │ 157948908394 │ 158048908394 │ 158148908394 │ 158248908394 │ 158348908394 │ 158448908394 │ 158548908394 │ 158648908394 │ 158748908394 │ 158848908394 │ 158948908394 │ 159048908394 │ 159148908394 │ 159248908394 │ 159348908394 │ 159448908394 │ 159548908394 │ 159648908394 │ 159748908394 │ 159848908394 │ 159948908394 │ 160048908394 │ 160148908394 │ 160248908394 │ +└──────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┘ +Run Time: real 6.374 user 101.052000 sys 0.008000 +D SELECT SearchEngineID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10; +┌────────────────┬────────────┬──────┬──────────────┬──────────────────────┐ +│ SearchEngineID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├────────────────┼────────────┼──────┼──────────────┼──────────────────────┤ +│ 2 │ 1138507705 │ 1633 │ 35 │ 1408.0122473974282 │ +│ 2 │ 1740861572 │ 1331 │ 28 │ 1577.945905334335 │ +│ 2 │ 3487820196 │ 1144 │ 35 │ 1553.1984265734266 │ +│ 2 │ 3797060577 │ 1140 │ 36 │ 1543.4140350877192 │ +│ 2 │ 2349209741 │ 1105 │ 30 │ 1557.387330316742 │ +│ 2 │ 2424344199 │ 1102 │ 31 │ 1555.6588021778584 │ +│ 2 │ 3663904793 │ 1083 │ 31 │ 1581.8171745152354 │ +│ 2 │ 3829154130 │ 1082 │ 30 │ 1541.253234750462 │ +│ 2 │ 2551371145 │ 1080 │ 24 │ 1559.8092592592593 │ +│ 2 │ 4029049820 │ 1058 │ 32 │ 1556.2003780718337 │ +└────────────────┴────────────┴──────┴──────────────┴──────────────────────┘ +Run Time: real 0.999 user 13.236000 sys 0.068000 +D SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +┌─────────────────────┬────────────┬───┬──────────────┬──────────────────────┐ +│ WatchID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├─────────────────────┼────────────┼───┼──────────────┼──────────────────────┤ +│ 4623938834438874046 │ 3335652175 │ 2 │ 0 │ 1917.0 │ +│ 6231340535817185610 │ 4012918818 │ 2 │ 0 │ 1638.0 │ +│ 8423042978509451644 │ 2960255590 │ 2 │ 0 │ 1368.0 │ +│ 8268832962994556606 │ 1627418068 │ 2 │ 0 │ 1638.0 │ +│ 5191389486841953200 │ 1487376472 │ 2 │ 0 │ 1828.0 │ +│ 6816565865734300637 │ 3770216628 │ 2 │ 0 │ 2038.0 │ +│ 7726072175618541265 │ 1876840662 │ 2 │ 0 │ 1638.0 │ +│ 8672760597587433971 │ 1269590216 │ 2 │ 0 │ 1368.0 │ +│ 7542988325649023791 │ 303701440 │ 2 │ 0 │ 1828.0 │ +│ 4792336058495451538 │ 3494775397 │ 2 │ 0 │ 2038.0 │ +└─────────────────────┴────────────┴───┴──────────────┴──────────────────────┘ +Run Time: real 1.531 user 16.536000 sys 0.392000 +D SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +┌─────────────────────┬────────────┬───┬──────────────┬──────────────────────┐ +│ WatchID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├─────────────────────┼────────────┼───┼──────────────┼──────────────────────┤ +│ 4744389098628902911 │ 1500313270 │ 2 │ 0 │ 1368.0 │ +│ 6489627466297098899 │ 1558450287 │ 2 │ 0 │ 1368.0 │ +│ 7485059124808740671 │ 1755688921 │ 2 │ 0 │ 1996.0 │ +│ 7229362496802796571 │ 1388026619 │ 2 │ 0 │ 1087.0 │ +│ 5699795602773001237 │ 1148637937 │ 2 │ 0 │ 1917.0 │ +│ 5513990774603668383 │ 1769439966 │ 2 │ 0 │ 1368.0 │ +│ 6466230155642720170 │ 720685641 │ 2 │ 0 │ 1368.0 │ +│ 5561182283490038976 │ 83735824 │ 2 │ 0 │ 1087.0 │ +│ 4784371382202293288 │ 3735345744 │ 2 │ 0 │ 1638.0 │ +│ 6244717263232015267 │ 1898460905 │ 2 │ 0 │ 1996.0 │ +└─────────────────────┴────────────┴───┴──────────────┴──────────────────────┘ +Run Time: real 63.046 user 79.256000 sys 10.484000 +D SELECT URL, count(*) AS c FROM hits GROUP BY URL ORDER BY c DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬─────────┐ +│ URL │ c │ +├────────────────────────────────────────────────────────────────────────────────────┼─────────┤ +│ http://liver.ru/belgorod/page/1006.j\xD0\xBA\xD0\xB8/\xD0\xB4\xD0\xBE\xD0\xBF_\... │ 3288173 │ +│ http://kinopoisk.ru │ 1625251 │ +│ http://bdsm_po_yers=0&with_video │ 791465 │ +│ http://video.yandex │ 582404 │ +│ http://smeshariki.ru/region │ 514984 │ +│ http://auto_fiat_dlya-bluzki%2F8536.30.18&he=900&with │ 507995 │ +│ http://liver.ru/place_rukodel=365115eb7bbb90 │ 359893 │ +│ http://kinopoisk.ru/vladimir.irr.ru │ 354690 │ +│ http://video.yandex.ru/search/?jenre=50&s_yers │ 318979 │ +│ http://tienskaia-moda │ 289355 │ +└────────────────────────────────────────────────────────────────────────────────────┴─────────┘ +Run Time: real 7.564 user 55.552000 sys 1.156000 +D SELECT 1, URL, count(*) AS c FROM hits GROUP BY 1, URL ORDER BY c DESC LIMIT 10; +┌───┬────────────────────────────────────────────────────────────────────────────────────┬─────────┐ +│ 1 │ URL │ c │ +├───┼────────────────────────────────────────────────────────────────────────────────────┼─────────┤ +│ 1 │ http://liver.ru/belgorod/page/1006.j\xD0\xBA\xD0\xB8/\xD0\xB4\xD0\xBE\xD0\xBF_\... │ 3288173 │ +│ 1 │ http://kinopoisk.ru │ 1625251 │ +│ 1 │ http://bdsm_po_yers=0&with_video │ 791465 │ +│ 1 │ http://video.yandex │ 582404 │ +│ 1 │ http://smeshariki.ru/region │ 514984 │ +│ 1 │ http://auto_fiat_dlya-bluzki%2F8536.30.18&he=900&with │ 507995 │ +│ 1 │ http://liver.ru/place_rukodel=365115eb7bbb90 │ 359893 │ +│ 1 │ http://kinopoisk.ru/vladimir.irr.ru │ 354690 │ +│ 1 │ http://video.yandex.ru/search/?jenre=50&s_yers │ 318979 │ +│ 1 │ http://tienskaia-moda │ 289355 │ +└───┴────────────────────────────────────────────────────────────────────────────────────┴─────────┘ +Run Time: real 4.014 user 55.408000 sys 0.152000 +D SELECT ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3, count(*) AS c FROM hits GROUP BY ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3 ORDER BY c DESC LIMIT 10; +┌────────────┬──────────────┬──────────────┬──────────────┬───────┐ +│ ClientIP │ clientip - 1 │ clientip - 2 │ clientip - 3 │ c │ +├────────────┼──────────────┼──────────────┼──────────────┼───────┤ +│ 4255045322 │ 4255045321 │ 4255045320 │ 4255045319 │ 47008 │ +│ 2596862839 │ 2596862838 │ 2596862837 │ 2596862836 │ 29121 │ +│ 3119147744 │ 3119147743 │ 3119147742 │ 3119147741 │ 25333 │ +│ 1696638182 │ 1696638181 │ 1696638180 │ 1696638179 │ 20230 │ +│ 1138507705 │ 1138507704 │ 1138507703 │ 1138507702 │ 15778 │ +│ 3367941774 │ 3367941773 │ 3367941772 │ 3367941771 │ 12768 │ +│ 3032827420 │ 3032827419 │ 3032827418 │ 3032827417 │ 11349 │ +│ 1740861572 │ 1740861571 │ 1740861570 │ 1740861569 │ 11315 │ +│ 3487820196 │ 3487820195 │ 3487820194 │ 3487820193 │ 9881 │ +│ 3663904793 │ 3663904792 │ 3663904791 │ 3663904790 │ 9718 │ +└────────────┴──────────────┴──────────────┴──────────────┴───────┘ +Run Time: real 2.404 user 32.444000 sys 0.256000 +D '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(URL) > 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +┌──────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├──────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 102341 │ +│ http://komme%2F27.0.1453.116 │ 51218 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18315 │ +│ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16461 │ +│ http://irr.ru/index.php │ 12577 │ +│ http://irr.ru/index.php?showalbum/login │ 10880 │ +│ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 7627 │ +│ http://irr.ru/index.php?showalbum/login-kupalnik │ 4369 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 4058 │ +│ http://komme%2F27.0.1453.116 Safari │ 3021 │ +└──────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.278 user 0.800000 sys 0.092000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(Title) > 0 GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ Title │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ \xD0\xA2\xD0\xB5\xD1\x81\xD1\x82 (\xD0\xA0\xD0\xBE\xD1\x81\xD1\x81\xD0\xB8\xD1\... │ 122407 │ +│ \xD0\xA8\xD0\xB0\xD1\x80\xD0\xB0\xD1\x80\xD0\xB0\xD0\xB9), \xD0\x92\xD1\x8B\xD0... │ 82935 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA - IRR.ru │ 80958 │ +│ \xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\xB8 New Era H (\xD0\x90\xD1\x81\xD1\x83\xD... │ 39098 │ +│ \xD0\xA2\xD0\xB5\xD0\xBF\xD0\xBB\xD0\xBE\xD1\x81\xD0\xBA\xD1\x83 \xD0\xBD\xD0\x... │ 23123 │ +│ Dave and Hotpoint sport \xE2\x80\x93 \xD1\x81\xD0\xB0\xD0\xBC\xD1\x8B\xD0\xB5 \... │ 14329 │ +│ AUTO.ria.ua \xE2\x84\xA2 - \xD0\x90\xD0\xBF\xD0\xBF\xD0\xB5\xD1\x80 │ 14053 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA (\xD0\xA0\xD0\... │ 13912 │ +│ OWAProfessign), \xD0\xBF\xD1\x80\xD0\xBE\xD0\xB4\xD0\xB0\xD1\x82\xD1\x8C │ 10919 │ +│ \xD0\xA2\xD1\x80\xD1\x83\xD1\x81\xD0\xB8 - \xD0\xA8\xD0\xBE\xD1\x83\xD0\xB1\xD0... │ 10157 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.852 user 1.004000 sys 0.036000 +D AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 7479 │ +│ http://aliningrad │ 4791 │ +│ http://ekburg.irr.ru%2Fpuloveplanet │ 3584 │ +│ http://smeshariki.ru/obucheyelants │ 3064 │ +│ http://video.yandex.php │ 2887 │ +│ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 1084 │ +│ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 891 │ +│ http://afisha.yandex.ru/index │ 855 │ +│ http://sslow_13507.html?aspx?naId=6HS │ 521 │ +│ http://wildberrior/uphold │ 484 │ +│ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 289 │ +│ http://obninsk/detail │ 241 │ +│ http://diary.ru/forum/intries │ 208 │ +│ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 185 │ +│ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 185 │ +│ http://kurort/SINA, ADRIAN │ 157 │ +│ http://afisha.yandex.ru │ 132 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 124 │ +│ http://ssl.hurra.com/iframe │ 123 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 119 │ +│ http://stars-visa.html_params%3Drhost%3Dad.adriver.ru/catalog.php │ 105 │ +│ http://komme%2F27.0.1453.116 │ 83 │ +│ http://pogoda.yandex │ 80 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 79 │ +│ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 73 │ +│ http://video.yandex │ 71 │ +│ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 68 │ +│ http://wildberries.ru/daily │ 68 │ +│ http://smeshariki.ru/ru/index.ru%26bid │ 68 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 64 │ +│ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 64 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn │ 63 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 59 │ +│ http://sslow_135000008&position=search │ 58 │ +│ http:%2F%2Fwwwwww.bonprix.ru/topic │ 53 │ +│ http://sslow_13507.html/articles │ 52 │ +│ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 51 │ +│ http://rsdn.ru/rss.ya.ru/catalog │ 51 │ +│ http://ekburg.irr.ru/#lingvo │ 46 │ +│ http://pogoda.yandex.ru │ 45 │ +│ http://sslow_13500000%26rnd%3D2788881.html │ 44 │ +│ http://maps#ru_5_ru_22106.377648194,975924][to]=&int[14270pa106&op_uid=17759/6#... │ 42 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 37 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 37 │ +│ http://video.yandex.ru/film/46351/frl-2/bage │ 36 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 35 │ +│ http://direct.yandex │ 34 │ +│ http://sslow_13507.html?aspx?naId=3X_3bhLcs3M │ 33 │ +│ http://gotovim-doma │ 32 │ +│ http://che.ru/produkty_zarubezhei-niepochekhly │ 31 │ +│ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 30 │ +│ http://video.yandex.ru/Newsletter │ 29 │ +│ http://sslow_13507.html?aspx?naId=6D8IzMGys3M │ 29 │ +│ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ http://video.yandex.ru │ 28 │ +│ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 28 │ +│ http://sslow_13507.html?aspx?naId=649&state/out-of-town=\xD0\xA5\xD0\xB0\xD0\xB... │ 27 │ +│ http://notes=1/currency │ 27 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 26 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 26 │ +│ http:%2F%2Fwwww.bonprix.ru/tambov │ 24 │ +│ http://kinopoisk.ru/shoppich.ru/search?clid │ 24 │ +│ http://wildberries │ 23 │ +│ http:%2F%2Fwwwwww.bonprix.ru/searchAutoSearch?text=\xD0\xB2\xD0\xB5\xD0\xBB\xD0... │ 22 │ +│ http://myloveplanet │ 20 │ +│ http://stars-visa-litraj.txt","lpu":"http://pogoda │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/secondary │ 20 │ +│ http://msuzie-shop/premiery-c-38208_2.html │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 20 │ +│ http://smeshariki │ 19 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 19 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ http://irr.ru/6323%26bn%3D27888895,96772,97436 │ 18 │ +│ http://kinopoisk.ru │ 18 │ +│ http://nepogoda.yandex.ru%2Fproducts/search?text=subscripts/busineshop │ 17 │ +│ http://wildberries.ru │ 17 │ +│ http://kinopoisk.ru/catalog/9902224 │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://direct.yandex.html │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 17 │ +│ http://irr.ru/6323%26bn%3D27888895,963095425 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 16 │ +│ http://afisha.yandex.php?gidcar=36281664 │ 16 │ +│ http://auto.ria.ua/search │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://direct │ 15 │ +│ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ http://irr.ru/index.php?showalbum/login-kupalnaya-obl │ 15 │ +│ http://kinopoisk.ru/odessya │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 14 │ +│ http://ekburg.irr.irr.ru/maker │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.yandex │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.mail/rnd=0.9788 │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://auto_many_to_auto.ria.ua/igrush43/ │ 13 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 13 │ +│ http://afisha.yandex.ru/cars │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 13 │ +│ http://love.ru/a-myprofi │ 13 │ +│ http: │ 13 │ +│ http:%2F%2Fwww.bonprix │ 12 │ +│ http://real-estate/aparther/offiliates/corruption/russinsk │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 12 │ +│ http://on-online=on&accetti │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 12 │ +│ http://samara.irr.html5/v12/?from]= │ 12 │ +│ http://en.lyrsenses/zamba_zaborah_coldplay=1&gearbox │ 12 │ +│ http://kinopoisk.ru/saledParams │ 12 │ +│ http://zvukovo/hondar/2007&state/renlew/rigma.ru/scribed │ 12 │ +│ http://pogoda.yandex.php?SECTION │ 12 │ +│ http://msk/platia-nashing/vanny.diary.ru/moscow │ 12 │ +│ http://video.yandex.ru/GameMain.E6smreQhiu_hXR4&where=all&film │ 12 │ +│ http://nizhnieiene/p17378705/currency=1&with_photo-ideapadeno │ 11 │ +│ http://news/6483731559676/Unlocknotebooks/m83/800_D_Black_list │ 11 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 11 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty/photo-12/#imag... │ 11 │ +│ http://msk/platia-nashing/vanny.diary.ru/sale/liver │ 11 │ +│ http://video.yandex.ru/GameMain.aspx#location │ 11 │ +│ http://guid=6&pw=6&pv=13 │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 11 │ +│ http://wildberries.ru/rost.html?1 │ 11 │ +│ http://smeshariki.ru/?win=82&stat=1&page/196264&pt │ 11 │ +│ http://pogoda.yandex.ru/catalog/jokers │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 11 │ +│ http://en.lyrsenses/zamba_zabudtrimazok.html?page=12&prr=http://fap1.adrive_typ... │ 11 │ +│ http://bonprix.ru%26bid │ 11 │ +│ http://loveplanet.ru/GameMain │ 10 │ +│ http://bdsmpeople.ru │ 10 │ +│ http://liver.ru/cheboksicily/foto.aspx?sort=newly&trafkey │ 10 │ +│ http://video.yandex.ru&pvid │ 10 │ +│ http:%2F%2F%2Fwwww.bonprix │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://club.ru/spokoiteli/photo37775280000 │ 10 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 10 │ +│ http:%2F%2Fwwww.bonprix │ 10 │ +│ http://auto_id=240&n=13901038 │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 10 │ +│ http://smeshariki.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://slovariant_new3077940810/detail │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://en.lyrsenses/zamba_zabor_id=1012_blank%26site │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://sslow_13500000%26rnd%3D2788881.html?parts/passe │ 10 │ +│ http://pogoda.html%3Fhtml_params%3Drhost%3D43 │ 10 │ +│ http://irr.ru/index.php?showalbum/logout%26verstova.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://pogoda.yandex.php │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film/6781203.html?id=242037047/detai... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://mysw.info/blog/sankt-peter%3D1216/00001216629 │ 9 │ +│ http://e96.ru/albumfotok-15-fotki │ 9 │ +│ http://alpari.yandex.html?html_param=0&users/#page/Search/ab_dob%2Ffieiie-razvo... │ 9 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://bonprix.ru/catalog/8570/1006790 │ 9 │ +│ http://b2b.testered/main/discuss/matched_country=-1&top=0&cityid=1024&wi=1366&o... │ 9 │ +│ http://svpressa.ru/topic=17082630 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://bonprix.ru │ 9 │ +│ http:%2F%2Fwwww.bonprix.ru/filmId=8j5j97LRs3M&where=all&sources │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/#win_13.html_p... │ 9 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/4744089758 │ 9 │ +│ http://nail=Yes&target=search │ 9 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_produkty%2F&sr=http://slovaria │ 9 │ +│ http://rlsnet.ru/vacancy/view_type_id=9677548268010367 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/imagecache/wm/2013&where=all&filmId │ 8 │ +│ https://m.myloveplanet.ru/forum/abrika-kobelenie_nebestsenal │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 8 │ +│ http://zapchast.com/iframe-owa.html?1=1&cid=577&oki=1&op │ 8 │ +│ http://afisha.yandex.php?t=141880517 │ 8 │ +│ http://poisk.ru/price_ot=&price_ot=&price │ 8 │ +│ http://zarplata.ru/velika_all=\xD0\xBE\xD1\x82 │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http:%2F%2Fwwwwww.bonprix.ru/news/222974895&op │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://fore=3&marka=0&top=0 │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96777&oki │ 8 │ +│ http://video.yandex.ru&xdm_p=1#item/search │ 8 │ +│ http://direct.yandex.ru/catalog │ 8 │ +│ http://zarplata.ru/?p=12977-B26358/currency=RUR/page=1080&wi=1024&lo=http://rzh... │ 8 │ +│ http://en.lyrsenses/zamba_zabor/bedroomolsk │ 8 │ +│ http://masterh4.adriver.yandex │ 8 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://mastered/main.aspx#location=1&bc=3&ct=1&pr=60322056107100919/page5/?_h=s... │ 8 │ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ==&page_avtomodules.php?f=100&ref... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96779/87 │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://omsk.mlsn.ru │ 8 │ +│ http://smeshariki.ru/GameMain │ 8 │ +│ http://wildberries.xml?from]=&input │ 8 │ +│ http://love.ru/?p=17059 │ 8 │ +│ http://afisha.yandex.php?gidcar=367108851%2Fr%2F1 │ 8 │ +│ http://che.ru&pvid=13733142835/100/topic,5240556895&ch=UTF-8&sF=11,7,7,0 │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/index.php?showalbum/login-kupit-topy%2Fplatjie-gotovlexandex.html... │ 8 │ +│ http://auto.ria.ua/auto_id=24126629/0/index.ru/real-estate/out │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 8 │ +│ http://victor?page_type=city.stol-yar.ru/cars │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://kinopoisk.ru/ch/feed/letniaiaprice/1609 │ 7 │ +│ http://video.yandex.ru%2F&sr=http://loveplants/65398f55 │ 7 │ +│ http://real-estate/aparts/Aquarevski │ 7 │ +│ http://bonprix.ru/social/product_id │ 7 │ +│ http://video.yandex.ru/a-album/login-vitiju/photo │ 7 │ +│ http://moscow/detail/5552/0/2792834&m=111,7,7,5 │ 7 │ +│ http://irr.ru/index.php?showalbum/login-kapustics?sort=pogoda.yandex.ru%26bt%3D... │ 7 │ +│ http://irr.ru/Registered/main/topnewsru.com/page=6 │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 7 │ +│ http://bonprix.ru/catalog/8570/14139489 │ 7 │ +│ http://afisha.yandex.ru/\xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB0/\xD0\x91\xD0\xA1\xD0\x... │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://irr.htm?from]=&int[85][from]=&input_vsegodnyie │ 7 │ +│ http://love.ru/?p=1#country=&op_seo │ 7 │ +│ http://bdsmpeople.ru/niktory/shtory/308/roomed.ru/p59473682740295 │ 7 │ +│ http:%2F%2Fwwwww.bonprix │ 7 │ +│ http://myloveplantrackIt?tid │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 7 │ +│ http://spb/event=big&marka=84&model=0&auto_id=0&s_yers=0&pv=10&can_be_check_PP │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://pogoda.yandex.ru&pvid=1 │ 7 │ +│ http://irr.ru/index.php?showalbum/login-a-5-advert27114 │ 7 │ +│ http://bdsmpeople │ 7 │ +│ http://video=0&is_hot │ 7 │ +│ http://irr.ru/index.php?showalbum/login-zk34/pages/0001216629 │ 7 │ +│ http://svpressa.ru │ 7 │ +│ http://money.yandex │ 7 │ +│ http://gotovim-doma.ru │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 7 │ +│ http://afisha │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://love.ru/?p=1#country=-1&sq_liver.ru/kyrgyzstan │ 6 │ +│ http://afisha.yandex.ru%2F%2Fmail/169 │ 6 │ +│ │ 6 │ +│ http://video.yandex.ru%2Fkategory_id │ 6 │ +│ http://omsk/evential/house.ru/catalog/kitchedule=213-606361653965283 │ 6 │ +│ http://video.yandex.ru/ekt │ 6 │ +│ http://stars-varenok.ru/16745959680706/800_0.jpeg.html%3Fhtml5/v123593 │ 6 │ +│ http://afisha.yandex.ru/catalog=on │ 6 │ +│ http://bdsmpeople.ru/film/64544.690022.rar.html_params%3Drhost%3D_black_list=0&... │ 6 │ +│ http://bdsmpeople.ru/GameMain │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://v102.ru/investate/apartments-sale │ 6 │ +│ http://video.yandex.ru/a-topy │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://wildberries.ru/search │ 6 │ +│ http://afisha.yandex.ru%26bt%3D43%26anbietersburg │ 6 │ +│ http://direct.yandex.ru/refererprofile%2F2.10 │ 6 │ +│ http://video.yandex.ru/GameMain.aspx#location/page_type=category │ 6 │ +│ http://omsk/evential/housession%3D0 │ 6 │ +│ http://rukodel=0&sort=newly&trafkey=2750 │ 6 │ +│ http://smeshariki.ru/world/photofider_credit=0&view │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://moscow/details │ 6 │ +│ http://irr.ru/index.php?showalbum/login-12.html%26custom │ 6 │ +│ http://novosibirsk.irr.ru%26bid │ 6 │ +│ http://solutions.diary.ru/realtitroenie_v_jurman.ru/albums/frame-owa.html?stric... │ 6 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 6 │ +│ http://mr7.ru/newsru.com/iframe_right%3D43 │ 6 │ +│ http://autodoc.ru/real-estate/apart │ 6 │ +│ http://smeshariki.ru/catalog │ 6 │ +│ http://edp2.adriver.ru/hocketshop.ru/moscow/detailanude │ 6 │ +│ http://povari.yandex.ru/greecondary/Products_id=&auto_vaz_2111 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://3dnewsru.com/iframe_right.html?1=1&cid=51538 │ 6 │ +│ http://novo/detail.aspx?group_cod_1s │ 6 │ +│ http://video.yandex.ru/catalog │ 6 │ +│ http://ereal-estate/rent │ 6 │ +│ http://afisha.yandex.php/board,39.04839 │ 6 │ +│ http://msk/platia-nashing/vantralitsa_transion │ 6 │ +│ http://auto_hyundai_sarator │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://kalininmyclonus1 │ 6 │ +│ http://bdsmpeople.ru/saledParams=rhost%3D43%26bid%3D1 │ 6 │ +│ http://forum/topnews/22294&op_category │ 6 │ +│ http://love.ru/?p=17055335 │ 6 │ +│ http://real-estate=week/page=1&expand_search?film/298677435615.html │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://afisha.yandex.ru/mymail.php │ 6 │ +│ http://video=0&with_exchangeType │ 6 │ +│ http://afisha.yandex.ru/index.ru/recipe │ 6 │ +│ http://kinel-lab.com/rus/20130709_117485994,93304&op_seo_entry=1&gearbox=0&type... │ 6 │ +│ http://koolinar.ru/port.ru/doc │ 6 │ +│ http://diary.ru/exp?sid=3205 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://video.yandex.php?search?text=\xD0\x9A\xD0\xBE\xD0\xBD\xD1\x8C\xD1\x8F\xD... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ https://slovakia-600dd903c07022,101595,91194&op_seo_entry │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D8393224 │ 6 │ +│ http://love.ru/ru/irk/event/search/ │ 6 │ +│ http://video.yandex.php?from]=&interapy-wkti/ &cd │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 5 │ +│ http://kinopoisk.ru/catalog │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://auto_volkswagen/vologdano/il_dlya-dnevka.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://barnaul/details/?cauth │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD0\xB5\xD1\x80&where=... │ 5 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://sp-mamrostova │ 5 │ +│ http://tp66.ru/exp?sid=3860217/rooms=2/men.aspx#location%3D0%26rnd │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 5 │ +│ http://zvukovo-gorodsk │ 5 │ +│ http://metal-lodku-Obzor │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://video.yandex.by/?state_id=&auth=1..630;IC,7711588 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 5 │ +│ http:%2F%2Fwwww.bonprix.ru/?id=2013&where=all&filmId │ 5 │ +│ http://rmnt.ru/search/offilia_Sovetov_living_chamber/?78142 │ 5 │ +│ http://e96.ru/movies/614418821/artir.ua/search │ 5 │ +│ http://slovari.yandex.ru%26orderovskij-index.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://tks.ru/cat/publish-cherkalnaya-ttpodporyadushek │ 5 │ +│ http://povari.yandex │ 5 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_seo_entry=&op_category_... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://auto.ria.ua/auto_id=241269.html?1=1&cid=2127970 │ 5 │ +│ http://slovarenok.com │ 5 │ +│ http://video.yandex.ru/GameMain.aspx?Link │ 5 │ +│ http://slovari.yandex │ 5 │ +│ http://auto_volkswagen-Palities/horobki │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://en.lyrsenses/zamba_zaborah_chamberk │ 5 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 40007&pt │ 5 │ +│ http://radio&planet.ru/work.ru/catalog │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://afisha.yandex.php?r=23436303135353.html?1 │ 5 │ +│ http://rustnye-sht-riemnikoi │ 5 │ +│ http://pogoda.yandex.php?gidcar │ 5 │ +│ http://sslow_135000008&position=search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 5 │ +│ http://real-estate=week&m=Dvigenie.html?option │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://myloveplanet.ru/v14572&lb_id=13000001216629 │ 5 │ +│ http://avtomobile/motory.ru/comp.ru/view.php │ 5 │ +│ http://topnews.ru/GameMain.aspx?group_cod_1s=1983&pt=b&pd=9&pw=0 │ 5 │ +│ http://love.ru/product_id=0&po_yers=0&po_yers=2&refererro/model=1346488078722&c... │ 5 │ +│ http://autodoc.ru/moscow │ 5 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 5 │ +│ http://bibidohertki-i-OOOO_REPORT/07_2013 │ 5 │ +│ http://auto.ria.ua/auto │ 5 │ +│ http://loveplanet.ru/mymail/rudi │ 5 │ +│ http://video.yandex.ru/firms.turizm │ 5 │ +│ http://video.yandex.ru%2FkategoriendflowerTo=&powerTo= │ 5 │ +│ http://nizhnieiewva88/photo/101246465376&cmd=show-to-buchaiev-pugache=51db32a68... │ 5 │ +│ http://auto.ria.ua │ 5 │ +│ http://tks.ru/cat/publish-chemec.ru/search?filmId=CktclMBmUXI │ 5 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D158197%26width │ 5 │ +│ http://direct.yandex.ru/index │ 5 │ +│ http://club.ru/cinema/movies/no-pos │ 5 │ +│ http://msk/platia-nashing/vannyie-product_id=1841&page2 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://kinopoisk.ru/spb.pulscen.ru/exp?sid=3159&op_category_id=&auth=0&checked=... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://holodilnik-rp-ploschaya-obuv/?ci=1280&with_video=0&choosOyg==&op_uid=111... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://slovariant_neu%3D1%26bid%3D1216/0001216629%26bt%3Dad │ 5 │ +│ http://wildberries.ru/real │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://wildberrior/kia/ │ 5 │ +│ http://md.mirkovskaya-obl.irr.ru/jobinmoscow │ 5 │ +│ http://povari.yandex.php?showalbum/login.pl?cl=all&film/497794,90458 │ 5 │ +│ http://jcmotorom-921205&bt=7 │ 5 │ +│ http://en.lyrsense.com/obshchin-idieiala │ 5 │ +│ http://loveplanet.ru/\xD0\xB0\xD1\x80\xD0\xBE\xD0\xBC/curre-ap-i-showalbum/loui... │ 5 │ +│ http://gaylyU │ 5 │ +│ http:%2F%2Fwww.bonprix.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://video.yandex.ru%26bt%3Dad.adriver.ru/recipe/view/10217/?from │ 5 │ +│ http://smeshariki.ru/topic │ 5 │ +│ http://moscow/detail/Torgovuyu-organske.ru/real-estate │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://alib.mist.html%26custom%3D%26c2%3D278888592138 │ 5 │ +│ http://loveplanet.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://alpari.ru/gallery/pic845274 │ 5 │ +│ http://video.yandex.ru/price │ 4 │ +│ http://whoyougle.ru/images/images/00000i/specifiers.ru/image=1&furniture │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://loveplanet │ 4 │ +│ http://video.yandex.ua │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 4 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 4 │ +│ http://loveche.html │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://sslovarenok.ru │ 4 │ +│ http://auto.ria.ua/auto_id=0 │ 4 │ +│ http://afisha.yandex.ru/zoom.php?f=5162613838.html_partments │ 4 │ +│ http://bdsmpeople.ru/Web/Pages=1/feedsmag.ru/~\xD0\xBA\xD0\xBD\xD0\xB8\xD0\xB3\... │ 4 │ +│ http://samarskii_krai/tuapse/detail/result.aspx │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/filmId │ 4 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 4 │ +│ http://irr.ru/index.php?showalbum/login-10618968476372773 │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://wildberries.ru/catalog │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://echoradar-s-Levoshcha │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://love.ru/?p=1#countpage/vacancies/events/738/0/3/women.aspx │ 4 │ +│ http://radio&planet.ru/marka=62&model=1178128455&pvno=2&evlg=VC,5 │ 4 │ +│ http://afisha.yandex.ru%252f7769%252fe │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://direct.yandex.php?formsof(INFLECTION_ID=30861/14365-4b11&state/apartment... │ 4 │ +│ http://diary.ru/catalog=on&input_city[3 │ 4 │ +│ http://e96.ru/news/39733/page2=&input_sponsor=&o=1015219.html_partments-sale&pa... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://rasp.pl?cmd │ 4 │ +│ http://travel.ru/state/apartments-sale/rashinitit%2F537 │ 4 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://auto.ria.ua/auto_id=63799.html_params │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://kinopoisk.ru/saledParams%3Drhost%3Dad.adriver.ru/GameMain.aspx#location │ 4 │ +│ http://afisha.yandex.php?r=3&bs=&day │ 4 │ +│ http://video.yandex.php?view_type=2&driveresult.ru/replies │ 4 │ +│ https://smeshariki.ru/cinema/article10363136000001216629%26site_offilia_Sovets.... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://ssl.hurranovskaya-ul-31-foto.ria │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://vkirovoe-tourisma │ 4 │ +│ http://card/windows)&bL=ru&cE │ 4 │ +│ http://kniga.ru/view=\xD0\xA1\xD1\x82\xD0\xB0\xD0\xB2\xD1\x80\xD0\xBE\xD0\xB2&w... │ 4 │ +│ http://smeshariki.ru/domchelkakh_location=search?text=\xD0\xBC\xD0\xB8vents │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboy07/... │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://smeshariki.ru/search/keukeru-soft │ 4 │ +│ http://guid=6&pw=2&pv=0&price_do=¤cy=1 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://matched_car=373838928155755775482794,9453.116 Safari%2F537.36&he=10&s_ye... │ 4 │ +│ http://zarplata.ru/?p=12977-B26358/hasimages=1/page │ 4 │ +│ http://video.yandex.ru/real │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://tks.ru/cat/publish-chernyjbelyj-9375966238&op_categoriya │ 4 │ +│ https:%2F%2Fwwww.yandex.ru │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://afisha.yandex.ru/search │ 4 │ +│ http://v102.ru/?s=Adaments-sale │ 4 │ +│ http://video.yandex.ru/GameMain.XYyZwYXRoPWEtbG9nb24vcG90Cw │ 4 │ +│ http://video.yandex.ru/GameMain.aspx#location-4.0.html │ 4 │ +│ http://auto.ria.ua/canel_pe_mascona Hilfigeratov/153228 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://nizhny novgorod │ 4 │ +│ http://video.yandex.ru%26target=search/ab_area=categorija80119 │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/social │ 4 │ +│ http://video.yandex.ru/realty/leaser_map=1/hasimay-2.html │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://kubikus.ru/search.php?r=4140211,1,7,7,7,7,0 │ 4 │ +│ http://e-kuzbass.ru/a-shop │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://guide.travel.ru/link │ 4 │ +│ http://victorhead.php?full&dom=780067167694.0; │ 4 │ +│ http://fitness/building │ 4 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/cart.php/cars/papago-d-plosch │ 4 │ +│ https://produkty%2Fpulove.ru/gost/?page3 │ 4 │ +│ http://afisha.mail.aspx#locationalOffers │ 4 │ +│ http://afishi,Mudanted-belyj-974299099/guest-id=34089.html │ 4 │ +│ http://svpress_up.aspx#location[propfilter_pf[PODVAL]=&arrFilter][3463351841195... │ 4 │ +│ http:%2F%2Fwwww.bonprix.ru/real-estate/out-of-town/house │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http%3A//magnitogorod/page3/#over │ 4 │ +│ http://anketka.ru/bridget │ 4 │ +│ http://tks.ru/cat/public/gamemain.aspx#location │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://afisha.yandex.php?action/2741920 │ 4 │ +│ http://love.ru/image=2&marka=84&model/mihailovo │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadbor_sh... │ 4 │ +│ http://video.yandex.ru/GameMain/dukhovyy │ 4 │ +│ http://nepogoda.yandex.ru/search=1&target=search=0&can_be │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://kinopoisk.ru/searchAutoSearch=0&driver.ru/catalog/1/women.aspx#locationp... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://love.ru/?p=1705 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://afisha.yandex.php?show=rlv&ru=1&expand_search │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://auto_volkswagen_cated_cartovskaya-obl.irr.ru/album/login │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://rsdn.ru/details_103514,154;IC │ 4 │ +│ http://auto_s_product_name=\xD0\x9A\xD1\x80\xD1\x83\xD0\xB3\xD0\xBB\xD0\xBE\xD0... │ 4 │ +│ http://pogoda.yandex.ru/cooking_sm5_1148786993ab-417/photo/69363/26#formi.ru/co... │ 4 │ +│ http://afisha.yandex.php?p=31&input │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://ssl.hurra.com │ 4 │ +│ http://loveche.ru/job/1162323&PAGEN_1=30&state │ 4 │ +│ http://internet Explorer&aV=5.0 (Windows)&bL=en │ 4 │ +│ http://video.yandex.ru/If yours.avtogsm.ru/animals/calculate │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://auto_volkswagen_pass_1161967 │ 4 │ +│ http%3A//edp1.adriverys/forum/view_type=city&custom=0&damages/0001216629%26bid%... │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://inspelishchin-platjie-doma.ru/irkutsk.irr.ru │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboyzon... │ 4 │ +│ http://video.yandex.ru/topnews.ru/lanas-advert2713][to]=&int │ 4 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD1\x82\xD0\xBE\xD1\x8... │ 4 │ +│ http://smeshariki.ru/saint-petersburg-gorod/transfer/?id=7576149959760994861&op... │ 4 │ +│ http://auto_id=0&with_photo │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://b.kavanga.ru/?a=inneVolumeFrom │ 4 │ +│ http://en.lyrsenses/zamba_zabudka/photo-1/#page=0&sale/search?text=\xD0\x9C\xD0... │ 4 │ +│ http://afisha.yandex.ru/content2.adriver │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://arma/frl-4/transportnoy-kv-m-malchik.ru/show │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://tp66.ru/money.yandex.ru/albums_screenterval │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://irr.htm?from]=&int[1151;IC,112 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://afisha.yandex.ru&pvid=13733424 │ 4 │ +│ http://video.yandex.ru/GameMain │ 4 │ +│ http://bdsmpeople.ru/film/64544.690078 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_category_id=592b9e01c48ce9403%26bn%3D0%2... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://kinopoisk.ru/service.ru/iframe │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://romar/events/audio.ru/widget[]=vacancies/99.php?gidcar │ 3 │ +│ http://banantikov-nadushenie_orleona_server=sc.cheloveplant_11612/page │ 3 │ +│ http://radioscannerica/filmId=Ba_id=13733568414&city=\xD0\x9C\xD0\xBE\xD1\x81\x... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://afisha.yandex.php/topic104780204&op_uid=1954 │ 3 │ +│ http://afisha.yandex.ru/a-folders/misc │ 3 │ +│ http://afisha.yandex.ru/shop.ru/malta │ 3 │ +│ http://afisha.yandex.ru/kategoriya%2F5.0 (company │ 3 │ +│ http://afisha.yandex.ru/linkvac.php/board.php?topicseeng │ 3 │ +│ http://afisha.yandex.ua/donetsk/urals │ 3 │ +│ http://afisha.yandex.php/tova.ru/uliya2076789599305953 │ 3 │ +│ http://afisha.yandex.ru/project_price=&maxprice │ 3 │ +│ http://irr.kz/realty/lease/3516093&pvno=2&evlg │ 3 │ +│ https://produkty%2Fplatjie-kuzbass.ru/newsru.com/iframe_right=0&auto_ria=0&meta... │ 3 │ +│ http://fuckfind=rent/view/2021/3 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://radiorecord.ru/login-m3w.html?1=1&cid │ 3 │ +│ http://video.yandex.ru%2Fplata.ru/ch │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ https://orenburg/?arrFiltersburg │ 3 │ +│ http://samara.irr.ru%2Fproduct │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberrior/bedroom]=&int[17][to]=&int[858 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://sp-money.yandex.ru │ 3 │ +│ http://kaluga/?ext=\xD0\xB3\xD0\xB5\xD1\x80\xD0\xBE\xD1\x8F\xD1\x82\xD0\xBD\xD1... │ 3 │ +│ http://auto_kia_30 │ 3 │ +│ http://afisha.yandex.ru/forum.materinburg │ 3 │ +│ http://afisha.yandex.php?addriver.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://sp-mamrostokonkursovet │ 3 │ +│ http://video.yandex.ru&pvid=13735/?_h │ 3 │ +│ http://love.qip.ru │ 3 │ +│ http://astrobank.ru/image │ 3 │ +│ https://slovakia-600dd903c07022,101595,9143531427800648_elit │ 3 │ +│ https://slovakia-600dd903c06c999c226647639.html%3Fhtml │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category_id=0&wi=16000&... │ 3 │ +│ http://video.yandex.by/search/?target%3D43%26bid%3D2 │ 3 │ +│ http://love.ru/forum.cofe.ru/forum/view_type=city=790&Selectronics-technik │ 3 │ +│ http://forum/topnews/2229605699574.html?1=1 │ 3 │ +│ http://sp-money.yandex.ru/work rushki-sien-natalog/8570/page=0&expand │ 3 │ +│ http://ssl.hurral=messages │ 3 │ +│ http://direct&sortdirect.yandex.ru/imagesize%3D0%26ar │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://b.kavanga.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://video.yandex.ua/auto_id │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://rmnt.ru/film/88677/russia/rio.ru/search?filmId=NNr6aJrm4s3M │ 3 │ +│ http://rmnt.ru/stars │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://bdsmpeople.ru/search │ 3 │ +│ http://video.yandex.ru/circle&state/out-of-town/houses │ 3 │ +│ http://edp2.adriver.ru/catalog/181 │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http:%2F%2Fwww.bonprix_ru}%2Fnizhniynovgorod/request-id │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://msk/planet.ru/mymail.aspx#comme_me_saydinne │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://edp2.adriver.ru/jobinmoscow/detail │ 3 │ +│ http://kazan.irr.ru/location │ 3 │ +│ http://nigma.ru/product&op_category_name=\xD0\x91\xD0\xB8\xD0\xBA\xD0\xB8\xD0\x... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://card/windows NT 6.1) AppleWebKit%2F5 │ 3 │ +│ http://tks.ru/cat/publish-chin-play.php?categoriya%2Fzhiensmed │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com/iframe-owa.html?1=1&cid=577&o... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.ru/forum.donfiscategory │ 3 │ +│ https://produkty%2Fpulove.ru/voronezh-sien-zhienskaia-moda-zhienskaia-moda-zhie... │ 3 │ +│ http://pogoda.yandex.kz/family │ 3 │ +│ http://pogoda │ 3 │ +│ http://svpress_w1t1042796786/6/?category │ 3 │ +│ http://video.yandex.php?topbloveche │ 3 │ +│ http://radiorecord.ru/catalog/idShare │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://magnitka_1_series.ru/?favorite_id=636233644&op_category_id=937514 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountpage │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://smeshariki.ru/a-phony │ 3 │ +│ http://ekategoriya%2F9B206 Safari │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://ussuriysk.irr.ru/catalog/premiere/628962851d7fd0b6eb17b321d336f5bc7de189... │ 3 │ +│ http://smeshariki.ru/catalog/286/women.aspx │ 3 │ +│ http://loveche.ru/volzhskiy │ 3 │ +│ http://afisha.yandex.ru/tatatit_chto.php?industry │ 3 │ +│ http://svpressa.ru/content/search │ 3 │ +│ http://video_dvd/game/iframe-owa.html │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://svpress/showbiz/photo.htm │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty%2Ftanki │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/92054446660.ht... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://omsk/evential/housession%3D0%26url%3D//ad.adriver.ru/link/justic/h2.php/... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://sp-mamrostovestory │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://brand=498&pvno │ 3 │ +│ http://personal/atlants/7292&xdm_c │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://e96.ru/real-estate │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://tp66.ru/search/?page=1&fuelRateTo │ 3 │ +│ http://love.ru/?p=1#country=&op_seo_entry=-1&target │ 3 │ +│ http://lk.wildberries │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://my.kp.ru/albumfoto-1/pol-2 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://povarenok.ru/files/eliteh.ru/perm.irr.ru/board,75.2013-07-09 │ 3 │ +│ http://holodilnik.ru/catalog │ 3 │ +│ http://msk/platia%2Fzhienskaia │ 3 │ +│ http://smeshariki.ru/?win=82&stat=141882,373;IC,2552f48 │ 3 │ +│ http://amobil-nye-pliazhnaia │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory_id=577&search/ab_district/date_id=2271][from... │ 3 │ +│ http://kaluzha-na-NovletedAutoSearch=0 │ 3 │ +│ http://love.ru/recipes/indows │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://str_ob.html?1=1&choosO8gPJSs3M&where=all&filmId=mAyiC7y6M2mGV2GoA9hFoN3q... │ 3 │ +│ http://wildberries.ru/item_no=2&evlg=VC,0;VL,205;IC,14;VL,757138/currency=RUR/h... │ 3 │ +│ http://product_brand=RAINBOW&op_cated_content/search/keup/en-ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://msuzie │ 3 │ +│ http://smeshariki.ru/real │ 3 │ +│ http://love.ru/?p=17057 │ 3 │ +│ http://love.ru/ru/irk/event=little&cated_country=-192.html?1=1&cid │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostavia.travel.ru/s... │ 3 │ +│ http://irr.ru/washek-s-printom │ 3 │ +│ http://afisha.yandex.php?app=membered │ 3 │ +│ http://afisha.yandex.php?ELEMENT_ID │ 3 │ +│ http://afisha.yandex.ru/lesyach-hotels │ 3 │ +│ http://3dnews.ru/?p=12636464/5#f │ 3 │ +│ http://afisha.yandex.ru%26bt%3D90%26nid%3D1216629 │ 3 │ +│ http://afisha.yandex.php?id=727285 │ 3 │ +│ http://kinopoisk.ru/search │ 3 │ +│ http://smeshariki.ru/goodavec/photo/6936325.html?id=223978/page=102 │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://irr.ru/index.php?showalbum/login-kupaljinik-chere │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic=79799398/?_h=search.htm... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.ru/comment/search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://auto_repairs=0&po_yers=0&price.ru/\xD0\xB6\xD0\xB5\xD0\xBB\xD0\xB5\xD0\x... │ 3 │ +│ http://soft.oszone.ru │ 3 │ +│ http://you_hashkaf.ua/search │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://auto_id=0&engineVolumeFrom │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://povaria/chak_naytimes.ru │ 3 │ +│ http://pogoda.yandex.ru/real-estate │ 3 │ +│ http://wildberries.ru/GameMain │ 3 │ +│ http://afisha.yandex.ru/hotel-agen-Goluboj-9730 │ 3 │ +│ http://afisha.yandex.ru%2Fobuv-sapozhkivka=23&price │ 3 │ +│ http://notebooking pressa │ 3 │ +│ http://video_dvd/ratesTypeSearch?text=\xD1\x87\xD0\xB5\xD0\xBB\xD0\xBE\xD0\xB2\... │ 3 │ +│ http://auto_repairs=0&confiscategoriya │ 3 │ +│ http://wildberries.ru/basket&ch │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://state/room=94720-recept-Salat-iz-glasya1lesyat │ 3 │ +│ http://smeshariki.ru/GameMain.aspx#location │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD0\xB2\... │ 3 │ +│ http://li.ru/filmId=XpzlPj8P8gE&where=all&text=\xD1\x81\xD0\xBA\xD0\xB0\xD1\x87... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://kinopoisk.ru/sessulyanovka.ru/photosessid=3205&bt │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://dom.net/provoe-pervouralnaya/ChildGluZ19oZXJlci1kYXRpb25zPU4mbj0zJmlkPTM... │ 3 │ +│ http://video.yandex.ru/extra │ 3 │ +│ http://slovari.yandex.ru │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/photo/narod.irr.ru/katering=1&pr=569&s_yers │ 3 │ +│ http://love.ru/ru/irk/event=little&category_id=731-643736&mode=1 │ 3 │ +│ http://kommersantamina │ 3 │ +│ http://afishers/story │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com.ua/kiev/detail.ru/auth=1..640... │ 3 │ +│ http://pogoda.yandex.ru/vlas-moskovskaya │ 3 │ +│ http://audio_video.yandex.ru/mosday.html?item=4#photo446962 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://video.yandex.ru/personal/offeebe34c7e12944&op_product │ 3 │ +│ http://v102.ru/investate/apartment/?id=137336IseNhcbx3J85GkHSnzgnsPdZUU&where=a... │ 3 │ +│ https://slovarenok │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://auto_ford Mix).mp3.ucoz.ru/v1430497.html%3Fhtml │ 3 │ +│ http://trashbox.ru/book │ 3 │ +│ http://guid=6&pw=2&pv=0&with_video.yandex.ru │ 3 │ +│ http://alpari.yandex.ru/saint-petersburg.irr.ru/cars/page3 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://radiorecord │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://en.lyrsenses/zamba_zabor_polnitsa-s.narod.irr.ru/bank/otzyvy/12031%2F%23... │ 3 │ +│ http://state_shariki │ 3 │ +│ http://bdsmpeople.ru/show/39932/Itemid,40.0.html_params%3DfsSaHR0cDovL2pzLnNtaT... │ 3 │ +│ http://afisha.yandex.php?partments │ 3 │ +│ http://wildberring │ 3 │ +│ http://video │ 3 │ +│ http://balcon_caddy Club relove │ 3 │ +│ http://smeshariki.ru/cgi-bin/click.cgi%3Fsid%3D0%26pz │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://kinopoisk.ru/registernet Explorer&aV=5.0 (Windows NT 5.1; ru-ru&cE=true&... │ 3 │ +│ http://video.yandex.ru%2Fkategory_id=9759527418 │ 3 │ +│ http://video.yandex.ru/real-estate/out-of-town/house.ru&pvid=1&distreet_legkovo... │ 3 │ +│ http://omsk/evential/housession%3D240%26rleurl%3D//ad.adriver.ru/marshavskaya-r... │ 3 │ +│ http://wildberries.ru/cgi-bin/click.cgi%3Fsize │ 3 │ +│ http://loveplanet.ru/Bezli-all │ 3 │ +│ http://auto_id=0&color=0&confiscategory_id=3205&bt=7&bn=1&bc=3&ct=1&prr=http:%2... │ 3 │ +│ http://kinopoisk.ru/spb.pulscen.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://ssl.hurra.com/iframe-owa │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http:%2F%2Fwww.bonprix.ru/imagesize │ 3 │ +│ http://saint-peter │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://cxem.net/324487194836848 │ 3 │ +│ http://video.yandex.ru/realty/search/main.aspx?sort=popular │ 3 │ +│ http://un1.adriver.ru/page=30138117749516%252f110916%252fmedicinema/movie_ross ... │ 3 │ +│ http://smeshariki.ru/furniture.html5 │ 3 │ +│ http://lazarevskoe │ 3 │ +│ http://whoyougle.com/iframe/iframe_right.ru/spb │ 3 │ +│ http://myloveplanet.ru/passenger/kitched_country_id=4312&input │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_product_brand=4200&lo=h... │ 3 │ +│ http://klubnich/zrh/ │ 3 │ +│ http://afisha.yandex.ru/manga.ru/?rtext=\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB1\xD0\xB... │ 3 │ +│ http://saint-petersburg-gorod/goodal │ 3 │ +│ http://wildberries.ru/comment/search │ 3 │ +│ http://sunmar.ru/cart&ch=utf-8&sF=11,7,700&aN=Opera&aV=9.80 (Windows │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://wildberries.ru/comme%2F2.12.388 Version/1552/page │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&film/67... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://jobs-education │ 3 │ +│ http://pogoda.yandex.ua/telefon_shtukaturkey │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://krasnodar.irr.ru/yaransferapid │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://irr.ru/index.php?showalbum/logizer8/num-1/refremost │ 3 │ +│ http://radioscannerica/film/47018.html?1=1&cid=691390&pvno │ 3 │ +│ http://forum/topics/ingradskazka-lookoformalities/poetry/events/?date&csrf-8200... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://afisha.yandex.ru/sell/resident │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://video_dvd/suppoll/dleead6718.php?SECTION │ 3 │ +│ http://afisha.yandex.php?p=176d43f96ef32d5bc1272 │ 3 │ +│ http://bdsmpeople.ru/index.by/ru/page=0&confiscategory_id │ 3 │ +│ http://gotovim-doma.ru/personal/commersant.ru/image=19&pvno=2&engineVolum │ 3 │ +│ http://video=0&input_with_video.yandex.ru/page/10/women.aspx │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://auto_id=0&color=0&confiscategoriya%2Fzhienskaya-advert25593 │ 3 │ +│ http://pogoda.yandex.ru/real-estate/apartments/73151 │ 3 │ +│ http://kinopoisk.ru/cgi-bin/click.cgi%3Fsid%3D1216 │ 3 │ +│ http://tyva-5/country=-1&washestvo/den_sidentialAmount │ 3 │ +│ http://rukodel=0&sort=newly&trafkey=27065/2/child.aspx#location │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://mylove.ru/zoom.php?GID=2&IsOrder │ 3 │ +│ http://rsdn.ru/info_all=yes&razdumy-i-trikshop/search&_h_page/1719920 │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=&is... │ 3 │ +│ http://irr.ru/index.php?showalbum/login-do-500-kv-m-Maya │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/procoolonelopitered/ministrict/3d-probeg-340-... │ 3 │ +│ http://ssl.hurra.com/iframe/iframe-owa.html%26custom%3D%26custom │ 3 │ +│ http://myloveplanet.ru/bad_by_sidential/nizhnieiewva88 │ 3 │ +│ http://kinopoisk.ru/real-estate=2013-07-2089241607/photo=0&with_exchangeType │ 3 │ +│ http://chehod/zvenia8312&input_who2=1&input_age1=35&aN=Netscape │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://direct.yandex.ru%2F&sr │ 3 │ +│ http://zapchastny_fashing_mashes/index.ru │ 3 │ +│ http://smeshariki.ru/news/2013/peshnye-udivlekanka.ru/l_03_00/bodreamfood.ua │ 3 │ +│ http://msk/platia-nashing/vanny.diary.ru/otdam_daily │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/used/KIA-Cee-d... │ 3 │ +│ http://arma/frl-4/travel.ru/moscow/details │ 3 │ +│ http://maps#ru_5_ru_1_ru_ru_ru_202_ru_1_ru_ru_ru_ru_2_ru_1743.html?oscsid=36303... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://votpusk.ru/ │ 3 │ +│ http://kuharka=48&modeloveplanet │ 3 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 3 │ +│ http://afisha.mail.ru/stars/page │ 3 │ +│ http://avtoto.ashx/1001087496197797217530729; Media Centernet_mastersburg │ 3 │ +│ http://whoyougle.ru/basket&ch=utf-8&sF=11,7,7,7,700 │ 3 │ +│ http://irr.ru/6323%26bn%3D27888895,96772&op_page47 │ 3 │ +│ http://myloveplants_list-obl.irr.ru%2Fobuv-zhienskaia-modiezhda │ 3 │ +│ http://sendflower │ 3 │ +│ http://smeshariki.ru/index.ru/main.pl?cmd=show/47555 │ 3 │ +│ http://afisha.yandex.ua/index.ru/recipe │ 3 │ +│ http://video=0&is_hot=0&che_simeis │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://bdsmpeople.ru/Web/price │ 3 │ +│ http://smeshariki.ru/chipinfo │ 3 │ +│ http://video.yandex.ru%2F%2Fwww.bonprix │ 3 │ +│ http://myfashihtzu.html?1=1&cid=65625f313230303&po_yers=2013/07 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://auto_operey-v-v-meha.ru/catalog/public │ 3 │ +│ http://forum/topnews/222968695,910112_1164074834-908745 │ 3 │ +│ http://zagranimals-planet.ru/user/31059&Module │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountry │ 3 │ +│ http://kurort/SP1399&op │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stories.ru/art/MACKLEMORE │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 3 │ +│ http://irr.htm?from]=&int[852][to]=10&lastdiscussins/?keyworld │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.php?w=3160/transports │ 3 │ +│ http://afisha.yandex.php?link=114735200&brand=23368 │ 3 │ +│ http://pogoda.turizm.ru/communit=0&vip=0&order_by=2 │ 3 │ +│ http://wildberries.ru/page=0&vip │ 3 │ +│ http://smeshariki.ru/Web/price │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://nizhnieie-bielie-bieriends&fb_source-temno │ 3 │ +│ http://forum/topnews/2229362067528195&op_categoriya │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://zarplata.ru/?p=1290&op_product_price=990348531&schoosOSRquM8gE&where=all... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http:%2F%2Fmuzhchine/ru-g-Chelya_v_tsentyabrskii │ 3 │ +│ http://radiorecord.ru │ 3 │ +│ http://my.alpari.ru/filmId=yJg89hqV8gE&where=all&film/530/?fromCityCodeForcentr... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&top │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 │ 3 │ +│ http://ur.hh.ru/file/news/2013 \xD0\xB3\xD0\xBE\xD0\xB4\xD0\xB0 │ 3 │ +│ http://gorbus.aspx#localiformalitic │ 3 │ +│ http://ej.ru/muss/roll_to_audi/mode=replies │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 3 │ +│ http://guid=6&pw=2&pv=0&po_yers=0&with_video │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&text=\x... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 2 │ +│ http://video.yandex.ru/rent/info/messa.ru │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://ssl.hurra.com.ua/auto_repairs=0&page=10&category_id=detail │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://ur.hh.ru/page=10&can_be_checked_auto_region=1&rm=1&lang=all&film/18212.1... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://pogoda.yandex.php?t=14555667679/?PAGEN_3=5&s_yers=0&numphoto/62232/7#f │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://rlsnet.ru/nogin.html5/v12 │ 2 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 2 │ +│ http://edp2.adrive_type=4754679564&pt=b&pd=9&price │ 2 │ +│ http://wildberries.ru/editem_no=100¤cy=1#country=&op_proizvodskaya-obuv-z... │ 2 │ +│ http://wildberries.ru/filmId=4920/room=1&lang=all&filmId=DnGbyVQVUXI&wheretomug... │ 2 │ +│ http://pogoda.yandex.ru/jobinmoscow │ 2 │ +│ http://auto.ria.ua/auto_auto.ria │ 2 │ +│ http://afisha.mail.ru/cheva.ru/reportby │ 2 │ +│ http://pogoda.yandex.ru/images/0001216629/0 │ 2 │ +│ http://kaluga/?ext=\xD1\x80\xD0\xB5\xD0\xB9 \xD0\xBD\xD0\xB0 \xD0\xB1\xD1\x80\x... │ 2 │ +│ http://masterlingvo/#I 1 │ 2 │ +│ http:%2F%2Fwww.bonprix.ru/search=0&deletedAutos&marketing │ 2 │ +│ http://pogoda.yandex.ru/places/premiery%2Fpage=2&confiscategoriya │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://smeshariki.ru/kitched_country=-1&target= │ 2 │ +│ http://balance/#21792/guest=\xD1\x89\xD0\xB5\xD0\xBD\xD0\xBA\xD0\xBE \xD0\xB8 \... │ 2 │ +│ http://sslow_13500000%26rnd%3D278888 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://poisk.ru/news/articles │ 2 │ +│ http://wildberrin/foton │ 2 │ +│ http://yartb.html?city=55&TopicID=2&IsOrderedProduct │ 2 │ +│ http://video=0&wi=1362653061306535333&site_id=&auth │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 2 │ +│ http://en.lyrsense.com/iframe-owa.html?query=2&hide_black.asp?TOPIC_ID=914958&o... │ 2 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 2 │ +│ http://smeshariki.ru/user_id=1&bodystyle=0&vip=&int[12][from=last_auto_id=13143... │ 2 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=2furii10.html?city=0&hide │ 2 │ +│ http://omsk.spb.ru/cars/art/MVEF2WkMweE5qVTVJOHN - Gl\xC3\xB6\xC3\xB6ckler │ 2 │ +│ http://forum.php?t=420 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://smeshariki.ru/tashkinsk │ 2 │ +│ http://pogoda.yandex.ru/chat/ivan │ 2 │ +│ http://video.yandex.html5/v12 │ 2 │ +│ http://loveplants/740392319 │ 2 │ +│ http://yaroslavl.irr │ 2 │ +│ http://kinopoisk │ 2 │ +│ http://mysw.info/node/21544 │ 2 │ +│ http://smeshariki.ru/product&op │ 2 │ +│ http://video=0&input_state │ 2 │ +│ http://board=11.ua.150.html%3Fhtml │ 2 │ +│ http://slovarenok.ru/chapochki │ 2 │ +│ http://pogoda.yandex.ru/real │ 2 │ +│ https://diary/2013-07-05/101090/currency │ 2 │ +│ http://krasnyj-chastory │ 2 │ +│ http://kinopoisk.ru/saint │ 2 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.139 user 0.404000 sys 0.020000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +┌────────────────┬────────────────┬─────────────┬────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ TraficSourceID │ SearchEngineID │ AdvEngineID │ src │ dst │ pageviews │ +├────────────────┼────────────────┼─────────────┼────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33069 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 24703 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 15817 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 14233 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 │ 6549 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 │ 5257 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 5257 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 3547 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login │ 3538 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik │ 3371 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php │ 3333 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 3309 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 2923 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 2616 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 2441 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php │ 2418 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 2390 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari │ 2367 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 2349 │ +│ 1 │ 0 │ 0 │ https://google.com.ua/url?sa=t&rct │ http://komme%2F27.0.1453.116 │ 2228 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 1920 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://komme%2F27.0.1453.116 │ 1679 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ekburg.irr.ru%2Fpuloveplanet │ 1340 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://aliningrad │ 1270 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1254 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1213 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1193 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1186 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1142 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F27.0.1453.116 │ 1007 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 954 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://aliningrad │ 859 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login │ 821 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 791 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 777 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 757 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 722 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://video.yandex.php │ 702 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 691 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/obucheyelants │ 684 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 632 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 593 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 577 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://smeshariki.ru/obucheyelants │ 566 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.php │ 452 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 445 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBA\xD0\xBE\xD0\xBD\xD1\x82\xD1\x80\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 422 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 421 │ +│ 0 │ 0 │ 0 │ │ http://obninsk/detail │ 407 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 386 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug.ru │ http://irr.ru/index.php │ 374 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru/index │ 360 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 348 │ +│ 2 │ 0 │ 13 │ │ http://komme%2F27.0.1453.116 │ 347 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-2011/43597 │ 293 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 293 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6HS │ 282 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 268 │ +│ 3 │ 72 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 267 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 259 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 257 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari │ 256 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 │ 241 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login │ 237 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 │ 236 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/28435&lr=157 │ http://komme%2F27.0.1453.116 │ 233 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/ru/photo/6936313555&text=\xD1\x85\xD0\xBA \xD0\xBB\xD0\xBE\xD... │ http://komme%2F27.0.1453.116 │ 224 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php │ 223 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cat/dushkirillovyj │ http://komme%2F27.0.1453.116 │ 222 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=359&op_page2/... │ 218 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kriminally-bezhevsk │ 217 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0 │ 212 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 207 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 202 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 199 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://ekburg.irr.ru%2Fpuloveplanet │ 199 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 198 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 197 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 195 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/414526863.xlsx │ 191 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CDMQFjAJ │ http://irr.ru/index.php?showalbum/login-kiriskaya-obl.irr.ru/index.ru/GameMain.... │ 190 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=0&with_photo.ashx/101/4/?cat=6257271 │ 188 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=partments-sale/search?text=\xD1\x81\xD0... │ 187 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://afisha.yandex.ru/index │ 183 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://ekburg.irr.ru%2Fpuloveplanet │ 171 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 168 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 164 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 163 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://ekburg.irr.ru%2Fpuloveplanet │ 160 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 160 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/life.ru/cars/misc/travel.ru/?trafkey=058143&p... │ 155 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 │ 154 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=577&oki=1&oby=&op_s... │ 152 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://wildberrior/uphold │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6HS │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 149 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 146 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustic/meterburg │ 144 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 144 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 144 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E │ 141 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 140 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 136 │ +│ 1 │ 0 │ 0 │ http://kombardighantnie │ http://komme%2F27.0.1453.116 │ 136 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login │ 135 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kysjacevtika │ 132 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://komme%2F27.0.1453.116 Safari │ 124 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 121 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category/stroy/dachines... │ 114 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/?state │ http://komme%2F27.0.1453.116 │ 113 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/GameMain │ http://komme%2F27.0.1453.116 │ 113 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 111 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login │ 110 │ +│ 3 │ 85 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 110 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kardigan │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 107 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosoftwarenok.ru/projects/zhbi.po... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 105 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268143.html?1=1&cid=577&o... │ 104 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 104 │ +│ 0 │ 0 │ 0 │ │ http://tvidi.ru/photo=0&confiscategory_id=0&engineVolumeFrom=&fuelRateFrom=type... │ 103 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 102 │ +│ 3 │ 14 │ 0 │ │ http://komme%2F27.0.1453.116 │ 102 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 100 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 98 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://video.yandex.php │ 97 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 96 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.21150895 │ 96 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?sort=price │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 95 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login │ 95 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.12.388 │ 93 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 93 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 92 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberrior/uphold │ 92 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 91 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-tanks/search=1&ady=62&modeloveplanet.ru │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 90 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.145332.15&he=10&category_id=2740387993 │ 89 │ +│ 1 │ 0 │ 0 │ http://in-the-weightEnd=2351&numphoto=&isExclusiver.ru/alertljus │ http://komme%2F27.0.1453.116 │ 88 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fprodazha_Italja_unit=1&av=1&nm=1&lang=ru │ http://irr.ru/index.ru/show/414526863.xlsx │ 87 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 86 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb1.html?item_no=386703/?bundle=7172&msid=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 86 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 │ 85 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 84 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733582852/ │ 84 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupit/action │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 82 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 82 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?bodystyle │ http://komme%2F27.0.1453.116 │ 81 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F22.14&he=768486 │ 81 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusk.ru/ru/lookaginitial/Prodayu-Dach... │ 80 │ +│ 3 │ 4 │ 0 │ │ http://komme%2F27.0.1453.116 │ 80 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 79 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://aliningrad │ 78 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 78 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login │ 76 │ +│ 1 │ 0 │ 0 │ https://go.1ps.ru/show&showforum │ http://komme%2F27.0.1453.116 │ 76 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandex.ru │ http://komme%2F27.0.1453.116 │ 76 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26221/detail.ru/v1496366&... │ 75 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php │ 75 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 74 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%2F&sr=http://bonprix.ru... │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len80/page/product │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filtr/all/perm.pulscen... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 73 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 73 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://diary.ru/forum/intries │ 72 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F1.7.1364.172 │ 72 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/show/414526863_112 │ 72 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2618561&pp=1059&op_produc... │ 72 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://video.yandex.php │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 71 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 71 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari │ 71 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://aliningrad │ 71 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=product_id=42&Selection.chelov.ru/searc... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/yandsearch?te... │ http://irr.ru/index.php │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/server=sc.chel.ru/main... │ http://irr.ru/index.php │ 70 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification/?year=\xD0\xB1\... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2791954~43.87725656132&op... │ 69 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://komme%2F27.0.1453.116 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/produkty/bleacs/udilis... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 69 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&wi=1366&br... │ 68 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 67 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731&CgID=124jc&where=all... │ 66 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/Yozh/Goodda │ http://komme%2F27.0.1453.116 │ 66 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2725215195&ti=\xD0\x9F\xD... │ 66 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://ekburg.irr.ru%2Fpuloveplanet │ 65 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru/index │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 64 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://afisha.yandex.ru/index │ 64 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 63 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nmg.com%2F4.0 Safari%26clients-sale/search&e... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 63 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 62 │ +│ 2 │ 13 │ 13 │ │ http://komme%2F27.0.1453.116 │ 62 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login │ 62 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://ekburg.irr.ru%2Fpuloveplanet │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 61 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 61 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26092.html?s_text=\x5C\x5... │ 59 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/thenon-houses/public/g... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27755f32316.30; .NET CLR ... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742/details/?cauth=0&dam... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fautoad/kniga.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26004/?_h=galle/\xD0\xBF\... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert27930555&sob=1&p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2692.html%3Fhtml?period=3... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/world/photo31469:Album... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=leting "HalUXI&where=\xD0\x9F\xD0\xB5\xD1\x8... │ http://irr.ru/index.php?showalbum/lofiver.ru/articles/86121%26uid%3D139750%26ad... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27000,224648804-recept-so... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/koshka.com/ig/iframe-o... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory=cinema.perm.p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/realty/suntime-5/extre... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742304][from]=&int[14670... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742357/detskii_gosts.xml... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694336/photo/suzannason/... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Forum25/top... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268320995,968650f45491882... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 57 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupit/action │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1375605&ga... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://video.yandex.php │ 56 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga/choice/... │ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_product_... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?showtopic,5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26017/quarius_Moscow/cavi... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2726125413975d77cf&search... │ 55 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 54 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266848223/review_type=pro... │ 53 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 53 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26989%26bt%3Dad.adriver.r... │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/album/login-1800002&pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 52 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0 │ 51 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2698172,93932353064614618... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605085268a9c4d61-9862.49... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19&numphoto/login=A-CL-MS-36575c72937][to]=&int[12822304 │ http://irr.ru/index.ru/widgetchrome%2F&ti=no&dom_v_bordovye-printime.ru │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/investate/comple/make/?page5/&docid=jlMNIrXw... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 50 │ +│ 0 │ 0 │ 0 │ │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 50 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F11.7.1364 │ 50 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 50 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26051.htBeg=6&NightRegist... │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xBE\xD1\x81\xD0\xB8\xD0\xB1... │ 49 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 49 │ +│ 5 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 49 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?group=days=3&text=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27410/photo-2.xhtml&serve... │ 48 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandsearch │ http://komme%2F27.0.1453.116 │ 48 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 48 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusty-i-vkont.at.ua/search=0&userId=0... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266128182&op_seo_entry/de... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?sort=&br... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/intrumen │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://afisha.yandex.ru/index │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumanegenre=33155?analog/kitchen_mini... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login%2Flick.g.doubleclick.diary.ru/car/kw/3061/us... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://afisha.yandex.ru/index │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734.html_params%3Dfh_loc... │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/GameMain.p1Yo4A │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ua/searchads/jo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605906/frl-2/sportal.ru/... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fshow/lpp/cre.ru/pers... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.asp?search&ev... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logize.ru/msk/events_liver.ru/russert-plies.r... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26099486633033&countpage=... │ 44 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://sslow_135000008&position=search │ 43 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 43 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischet-solik/odezhda-plos... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert277553/38021/66936575776/... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271050&with_photo.kurortm... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 43 │ +│ 1 │ 0 │ 0 │ http://forums/liii-kuler S22oHgBJTngegotavgorod55.ru/filtr[2]=42 │ http://komme%2F27.0.1453.116 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-folders/?end=9a08488... │ http://irr.ru/index.php?showalbum/litamak.irr.ru/catalog/8570/travel.ru/cgi-bin... │ 41 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 41 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 41 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/0001216629/#top_by │ 41 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26040931&s_yers=0&with_vi... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://ekburg.irr.ru%2Fpuloveplanet │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.137508&s_yers=200... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://aliningrad │ 40 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logito8ergo_6470/page_type_id=20872/0/001:12:... │ 40 │ +│ 0 │ 0 │ 0 │ │ http://afisha.mail.ru/dmitrij │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/readar-nashi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27924563724&key=46960/med... │ 40 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://lib.ru/exp?sid=3205&bt=7&bn │ 40 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 39 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credit │ http://komme%2F27.0.1453.116 │ 38 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=8570/page=5&s_yers=2006 │ 38 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2679/detail/5482,935033/2... │ 38 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 38 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login │ 37 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dnevnoy-kv-Samara.irr.ru/searchAutos&marka=4... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 37 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://komme%2F27.0.1453.116 │ 37 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=theating&page=... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2784389/room=39695,966681... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?group │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/forum/topicID=269&stat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/votkim-rukav-i-kova-ul-adve... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wolf-club478561/OPEL | \xD0\xB0\xD0\xB2\xD1\... │ http://irr.ru/index.php?showalbum/login-marka=13&city&custom=0&damages/0001216 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filmId=xFX1UbTNJjxe4yF... │ http://irr.ru/index.php?showalbum/login.asp?razdel7/test/matched=115909d9_dsc07... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27553&s_yers=0&po_yers/46... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert275226607660?design=6efxq... │ 36 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=show=&fgroup-tab-mara.irinables/yearT... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278171&size=52094&op_seo_... │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27330528/photo/6223799%26... │ 36 │ +│ 5 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://smeshariki.ru/obucheyelants │ 36 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36&he │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=post_neu%3D22%26pz%3D0%26rleurl%3D%26xp... │ 35 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/8569 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/index.ru/katego... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vip.ru/book.com/photo/7086/page=0&state=mont... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-cukickdrops_bak_yant4tlGtZgy3BQ&bvm=bv.49478... │ http://irr.ru/index.php?showalbum/login-501-98552&op_uid=1060948/6#f │ 35 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (Windows │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19&m_staraya-obl │ http://irr.ru/index.ru/show/414526863_112 │ 34 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.12.388 │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 34 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_uid=1... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/promo=C-Tease/rent/dat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 34 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/list │ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 34 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/directadvert/kavanga_728x90.html │ http://komme%2F27.0.1453.116 │ 34 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 33 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshops.xml?typ │ http://komme%2F27.0.1453.116 │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?cPath=default.ru/yandex.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33 │ +│ 1 │ 0 │ 0 │ http://auto.ria.ua/\xD0\x9A\xD0\xBB\xD0\xB8\xD0\xBC\xD0\xB0\xD1\x82\xD1\x8C\xD1... │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 33 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://video.yandex.php │ 33 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 33 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser │ 33 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265748ba3f755671_1162684&... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertif?sle=85000 \xD0\xB4\xD0... │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/pub │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364 │ 32 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zxcvbnm1990&search/jobinmoscow.ru/yandex.by/... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements-obschaya │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fproduct/foto-4/login... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&op_category_id=1174]... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniturers_id=575386110 │ http://irr.ru/index.php?showalbum/login.exit/rem/php/board/10_kruizer_8267049&o... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiepochto_id=93231238][to... │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://afisha.yandex.ru/index │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ssl.hurra.com/iframe │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischuk_Kerasivye-klavik/?... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/jobs-education/m_acces... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26791e3a7c543c9bf9ef5c0-9... │ 31 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt │ http://komme%2F27.0.1453.116 │ 31 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertificia/?letteo_985428161/... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_api.php?cid=41389/rooms/perm.pulscen.ru/sear... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 30 │ +│ 1 │ 0 │ 0 │ http://domchelov.html&lr=55&text=\xD0\xB4\xD1\x80\xD1\x83\xD0\xB3\xD0\xB8\xD0\x... │ http://komme%2F27.0.1453.116 │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoryID=12452929587/... │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 30 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 30 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268630533&site_ot=&price_... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-k608i.trashbox.ru/cars/page5/&docid=577&lr=2... │ http://irr.ru/index.php?showalbum/logii_58247.php?forum.borovichy77/page5 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2716/~3/150160947694,9745... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2696374/#page/tab=com_avt... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/products/?category_id=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 30 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/topic │ 30 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.14&he=768&wi=1920 │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26979553039353936694&ch=u... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605446518%2F&sr=http://e... │ 30 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://smeshariki.ru/obucheyelants │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-carava/fotok-8-steklove.ru │ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26928142&op_products/view... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kupibatikov/?recrete/personal/klimat.ru/work... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 29 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x9A\xD0\xBE\xD1\x80\xD0\xBE\xD1\... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertifications[0][150]=60&inp... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/wedditeli_foto-2/__48/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_countpage/1 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/click.net/paged=696&lo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274229696.0 (Windows)&bL=... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-14132&with_photo=1&srtime-zone.net/catalog/t... │ http://irr.ru/index.php?showalbum/login-sierra%2Fdlia-zhienskaia-moda-zhiensmed │ 29 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704.html%3Fhtml5/v12/?fr... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2664952&xdm_p=1#country=-... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734/fotographic_2017666&... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategoriya/zhienskaya-... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9649.html%3... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/small_mercial-shoppicc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27350350394&ch=UTF-8&sF=1... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_seo_entr... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-baza/gadge... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27425.3120%26ntype_id=2&r... │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 28 │ +│ 1 │ 0 │ 0 │ https://directions[0][1541769377921968 │ http://komme%2F1.7.1364.172 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert272291684/hasimage=0&view... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13733097&op_categ... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/mann japanel/?text=\xD1\x81\xD0\xBC\xD0... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269500469412216388/detail... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-my-sovies/bebybum.homestion bonprix.ru/... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikarbox=2&tz=9b81998&po_y... │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?lang=all&fi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-176-kakaya-obl.irr.ru/search?lr=191&ei=N6rrg... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 28 │ +│ 3 │ 95 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\xA4\... │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/anime-2/#album/l... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-eve-nn.ru/cars/passenger/\xD0\x92\xD0\x90\xD... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274236&pv=15&prr=8&sid=35... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/41452626u1zIq0SGLXCI │ 28 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic/8939858-59929477/detailshop │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://ekburg.irr.ru/#lingvo │ 28 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F22.14&he=768486 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678/page=2&marka=84&mode... │ 27 │ +│ 3 │ 2 │ 0 │ │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/search?cl4url=http://yandex.ru/online... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27013.ya.ru/sportalznakom... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert24061.jpg.html%3Fhtml?1=1... │ 27 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031343-sh-898675/sort=pri... │ http://irr.ru/index.php?showalbum/login-5158&jenre/slyudya_metroman.ru/GameMain... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19195/offset=101&district=&city&with_photo=¤cy │ http://irr.ru/img/catalog/53485785/topic/8939850.php?page=3&marka=84&mm │ 27 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 27 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 27 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-oleginnesujeli-i-centum=etarget=search?clid=... │ http://irr.ru/index.php?showalbum/login-kupe.html_params%3Drhost%3Dad.adriver.r... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fhit_list.html?s... │ http://irr.ru/index.php?showalbum/login-irake-myservierk-supierts%2F&ti=\xD0\x9... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27928092_price=\xD0\xBC\x... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/mazda-dievochnye_avari... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-19.xhtml?city_to_one=All&film]/on/orders/810... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/1.19.mobile_photo=6001... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27630/?item_id=0&bodystyl... │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ 1 │ 0 │ 0 │ http://bonprix_ru_11559&lr=12&usln │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lizova_ii_1112_1150&option[price_do=300... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E&wher... │ 26 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 26 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detall/seconomicsmovinki │ http://komme%2F27.0.1453.116 │ 26 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://obninsk/detail │ 26 │ +│ 1 │ 0 │ 0 │ http://yandex.ua/?target=search/tab=user │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/loginsk.irr.ru%2Fkategory_id=9204471-650/?_h=... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login-jjjekrju-s-pring=1&price[price=\xD0\xBC... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification.ru/messa.ru/rea... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lejandsearch?text=\xD1\x82\xD0\xB8\xD1\x85\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert21124631/?Search.php │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 26 │ +│ -1 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_category... │ 26 │ +│ 3 │ 197 │ 0 │ │ http://komme%2F27.0.1453.116 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?messa.ru/worlds/page2/7277932582&text=\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 26 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-kupe-20010120652838799.html?n=7148.html... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemey-volvom80Cw&where=a... │ 26 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=607&state=4... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.22 (KHTML, like Gecko) │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 25 │ +│ 1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 25 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/people.ru/cars/passets... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731/?city=0&pvno=2&evlg=... │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vivarki/redki_sdelaet-law.ru/produkty/kartgo... │ http://irr.ru/index.php?showalbum/login=driff/en-ru/?p=2#messages/00001216629 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.html&ei=GcXrUYe8F2DAU-RbuRlLMczoJ--5uDCx8 │ http://irr.ru/index.php?showalbum/login-132/#images/0000.h95/\xD1\x82\xD1\x8E\x... │ 25 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert264314953); ru) AppleWebK... │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search?text=myaccountry │ 25 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://obninsk/detail │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguard-payments-sale/se... │ http://irr.ru/index.php?showalbum/login-88i8LaDyEkCVv6-DhRfEDcw==&action │ 25 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/yandex.ru/?f... │ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.ru/film/46351/frl-2/bage │ 25 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605838.html5/v12/?from=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741559&t=5204/make=Chrys... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-link=1147373-1&p=1&p=2&text=\xD0\xBC\xD0\xBE... │ http://irr.ru/index.php?showalbum/logisterlingvo/#! │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694589/detail/555-javata... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=shops.html?id=1&body_type=\xD0\xBF\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781472265&op_seo_entry=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626rleurl%3D//ad.adriver... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685/price_ot=&price=\xD0... │ 24 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://diary.ru/forum/intries │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27399992.php/board,13.0) ... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671291&fridgets/2012&pri... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26685857947301_Zoryatiya/... │ 24 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-117031&op_category&op_seo_entry=&op_uid │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo/7... │ http://irr.ru/index.php?showalbum/login-kupit-plitka-s-korsiety/art/151/n4p/160... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguar.ru/page4/?emain.a... │ http://irr.ru/index.php?showalbum/login=ogabass.ru/filmId=9WOqzzitive&view │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-annative-expressageId=0oVXx21hUXI&where=all&... │ http://irr.ru/index.php?showalbum/login-rybnovlevojj_mamountry=-1&type%3D0 │ 24 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://video.yandex.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/intrumen │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kupalnaya_elit=&id=3&clid=9403&lr=1913849 │ http://irr.ru/index.php?showalbum/login-gallebia_zhurnalCall D.R.E.mp3ex.net/ph... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lolacake/tatyaka.html?1=1&cid=577&oki=1 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinglish.rus-l7-p70505-1... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/yandsearch?lr=1... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-yvaken/topic=7702.jpg.html?1=1&cid=577&... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=1&bc=3&ct=1&pr │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-547552/1/?sma=RAINBOW&op_uid=fdd1b9d2721728&... │ http://irr.ru/index.php?showalbum/login-kapusta-advertika/search/room=1&damage=... │ 23 │ +│ 1 │ 0 │ 0 │ http://auto_volkswagency=1&text │ http://komme%2F27.0.1453.116 │ 23 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgarials/commend/searchvage-2.html&dt=13734... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-tuniki_510... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263090024189-528619c2077/... │ 23 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/ru/index.ru%26bid │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333572620201709/page/10... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26939.html?page/3/#count=... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news/radio&clid=198555... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/kategory_id=5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2740974%26pz%3D0%26ar_sli... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 23 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/resultatya9176da22f1a521a5853.html&... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26600721376439322%26pz%3D... │ 23 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga_728x90.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://afisha.yandex.ru │ 22 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemennoke0070553995f27d6... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2697574697.html_param=0&u... │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-105vr/ │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=search.tutung/s... │ 22 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/wheel.ceratornaya_solnechka │ http://komme%2F27.0.1453.116 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-10760b31b65633eZateq eb806e887d9f15ccf593280... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2091&local=1&TypeSearch?mail.ru/yandsearch&c... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26058&nnum=s4746835895&op... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-the-ili-tempera-minsk.irr.ru/produkty/bluzki... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739693071/pomer... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodny │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2649.html?pg=menu_29.jpg&... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/v1465][from]=&int[157281 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267830840994,95688781470%... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-business/sale/ru/search?mail.ru/film%2Fbarna... │ http://irr.ru/index.php?showalbum/login-zakon_type=1&fuelRatesTypeSearch │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 22 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27200,55.7654.html_parat-... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&l... │ http://irr.ru/introlux_page5/2/page/Renaul.irr.ru/start=1500-rublic/gamemain/Tu... │ 22 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26601629][from=&fuelRateT... │ 22 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://ekburg.irr.ru%2Fpuloveplanet │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liliate_id=24145602&with_phoney.yandex.ru;ya... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-natashkarola.irr.ru%2Fviewforum/MsgList.html... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26900/technics-technics-t... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&city[7]=23239330794,25826044_Black_lis... │ 21 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?price_till beli.php?cx=015216684_36 │ http://komme%2F27.0.1453.116 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691_ru_17832523.html_par... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694,978825315f373400/det... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1) AppleWebKit%2F537 │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/world/photo/41/62b1dfa450/3/women-clother%26tms%3D%26ev_ltx%3D... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/basketshop.ru/yandsear... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/forum%2Fukhov/l... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265228.html?1=1&cid=577&o... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27025&Select[4][]=32598.h... │ 21 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://wildberrior/uphold │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/?from │ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/houses/passenge... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo44953.116.php?t=4... │ http://irr.ru/index.php?showalbum/login=ko&page=0&view.aspx?group_cod_1s=85&key... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-dance/index.ru/?favorite_off=1&encoding&hl=\... │ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logino-s-grigerator/page1=&input_age1 │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cars/commeddesk.ru/google_s&12.5.746.59954.30 (KHTML, like/\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26737865/?page/12186/#/ec... │ 21 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ramblery/pic/893985650697... │ http://smeshariki.ru/obucheyelants │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login.html?1=1&input_who1=2&input_who2=1&inpu... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/logii-bin/click.cgi%3Fsid%3D158195,97987231-9... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/club.ru/anime-zone.ru/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-brie... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dietsik.ru/razdel_id=111,7,700&w=728x90.html... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929&from%3D%26custom=0&... │ 21 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2186/detail.aspx#location... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739353/details.... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kupalnik │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification%2F4.0; XBLWP7; ... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/9-0--navam-zhien... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741465][from]=&input_wit... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_uid=1147... │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login=uzpp2XnEw&bvm=bv.49784469][from │ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 20 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-Larki-i-korobeg-1124-95367/guestblowinp... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26219&wi=1280&lo=http://w... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estatic.diary.ru/... │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=58&Selectronics-technics/k... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/yandex.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?er=2&text=\xD0\xBA\xD1\x83\xD0\xBF\xD0\xB8\... │ http://irr.ru/index.php?showalbum/login=razer2.moikrug.ru/recipes/shop.spb │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b706234651&op_uid=1&b... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&price │ 20 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://video.yandex.php │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=NeIdeaCenternet Explorer&aV=5.0 │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertificirovka.ru/noteating-i... │ 20 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271161076&st=261&t=170977... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate=0&ReturnUr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313163307/?from]=&int[15... │ http://che.ru/produkty_zarubezhei-niepochekhly │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604370757034dea482207549... │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_api.php?id=7262882,9454472&op_product_n... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 20 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/cars │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26637&model=1705.html?1=1... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-karbox=0&top=0&category/1961/#images/00... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumilora481 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt=13733129/room │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-iulyanovskaya-obl/lyubvi?page=166733&eid=485... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27502/detail/?folders/#pa... │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://video.yandex.php │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626u1zIq0SGLXCI&where=al... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=240&u_cd=242035165&input_who2=1... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news_id_72387877055/nu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikulina.ru/real-estate/ou... │ 19 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?sort=popup/casualg... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/filmId=eRaB4pYAXCI │ http://komme%2F27.0.1453.116 │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.ru/daily │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBB\xD0\xB8\xD0\xBA\xD0\xBE\xD0\xBB\xD0\... │ http://irr.ru/index.php │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login=perfect.yandex.ru%2Fkategoriya%2F537 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260540718534/?dateOn=1&bo... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26672655462.html?city.ru/... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261921&pr=2441185112.html... │ 19 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostok.ru/cars │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671&Destige-all.html_par... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/check=1&redir=1&lang=a... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27404895,95923.html%26cus... │ 19 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2638/?from=&raceTo=&power... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313437&pvno=2&evlg=VC,2;... │ http://irr.ru/index.php?showalbum/login-rizova.ru/look/timashirtsevm.cofe │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6HS │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166333/price[price_till]=&pri... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F_liveresum... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.php?f=11340.1j1j2.12...5998-103358071/8/page... │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/00007/10/1320006&p... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27355f3132366336601&uuid=... │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto_repai... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://smeshariki.ru/obucheyelants │ 19 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.15751 Safari%2F5.0 (Windows │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2675406828ac956028692581/... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26968794618/irr.ru/real-e... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://obninsk/detail │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2702483,631;IC,444041%2F&... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2629&lr=65&rstr=-213&text=back=False&withmos... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=http://video.yandex.ru/real-estate │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26669E116-1-1550046560013... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?search?text=\xD1\x80\xD1\x83\xD1\x81\xD0\xB... │ http://irr.ru/index.php?showalbum/login-inadlinny-sched_car=0&city=0&price=18&p... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/dlia-zhiensk... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274026181891&rn=52&brand=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-165&jenre]/49047&lr=163&text=samsung ga-moda... │ http://irr.ru/index.php?showalbum/login-2-komn-v-na-92f5-6ccf-fef3-013f9f926a21... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&checked=0&state/room=10002-g-v-program... │ 18 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ru/index │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5 │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?elmt=popular&where=all&film/723/num │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/restate/out-of-town-resh=1&cnt=1373... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2012-recept-Ragu-iz-2-x │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupaljinik-slidi/places/?PAGEN_1=2 │ 18 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27534.30 (KHTML, like Gec... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=deltec&type=citymo=&version%2F4.0 (Linu... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kochtinsk.pulscendinskiy-krasnodar.irr.ru │ http://irr.ru/index.php?showalbum/login-kuplyuskij/zapchastorii_state/out │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zzzi.ru/a-shop and blademas/?id=1&marka=0&ma... │ http://irr.ru/index.php?showalbum/login-2003prev=/search/index.ru/meteor.html%3... │ 18 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login.moikrug.ru/catalog/otchenko-ul-advert27... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\... │ 18 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278453&with_exchange=0&ex... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27132069304;IC,1511e8d158... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=367132&pv=2... │ 18 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27071038_114736895,923401... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x9A\... │ 18 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kanza_tab_2499472&lr=1074&sort=popular │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/?target=search?... │ http://irr.ru/index.php?showalbum/login-bigutensiysk.irr.ru/regular&bid=3205&bt... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27420780790931.html5/v12/... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/8018&l=malkogo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-natura.ru/jobs-education=post_137336ID0... │ 18 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-21102&text=\xD0\xB1\xD0\xB0\xD0\xB1\xD0\xBA\... │ http://irr.ru/index.php?showalbum/login.mospsy.ru/super-na-kostronics/tv-audio.... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/obuv%2F │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685&numphoto=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626p/ │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertimeshariki.ru/cgi-bin/cli... │ 18 │ +│ 1 │ 0 │ 0 │ https://diary.ru/magnitogorsk │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sien-zhienskaya-i-kvartir.html?id=1955451-01... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260908861%26point-peter=&... │ 18 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1453.116 Safari%2F8536 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeSearch?text=\xD0\xB2\xD0\xBA\xD1\x83\xD1... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=yators/?jumping.ru/series.ru/priceup&page=3&... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga1788778.137329TVmbFNmbVNaR0YwW$UyNDg4fxS... │ http://irr.ru/index.php?showalbum/login-sienskaia-moda-zhienskikh_rabotjaga.ru/... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=36427929&stat... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinger/\xD0\x93\xD0\x90\... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929750%26ar_sliceid%3D2... │ 18 │ +│ 4 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691c352005&pvno=2&evlg=V... │ 17 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/cars/communalux.ru/dos... │ http://irr.ru/index.php?showalbum/loshaya-obl.irr.ru/film/35562C?analytics/kto-... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271527091/frl-2/bage-2.ht... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru%2Ffilm/4858?pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27422544/3/womens.ru/ufa.... │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#7878... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.103402.html%3Fhtml │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=artira-Lyubyat │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.aspx#location │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=yes&y1=2013-07-07.ya.ru/5_search?text=\... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.15.html?1=1 │ 17 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://aliningrad │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266149_51928/detail.ru/ka... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%26rleurl%3D%26CompPath%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_Bolers-device.aspx#commersanta_premiery... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2670308&po_yers=0&price_o... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2613168312.71 Safari%2F__... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=8&ch=UTF-8&ifr=1&av=1&nm=1&ved=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-dlia-zhiensmed.ru/el... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 17 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6HS │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginyazevskaya%2F5.0 (Windows NT 5.1) Prestorygoo... │ http://irr.ru/index.php?showalbum/login-kupilomatic.aspx#location=rr&days&city&... │ 17 │ +│ 1 │ 0 │ 0 │ http://bdsmpeople.ru/register2123 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logistereda.ru/photo/70861/6#f │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263161366&bid=2823&numpho... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26041.htm%3Fsid%3D0%26pz%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowthreadreplies=24&ids=74&cu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273363331251798796&op_seo... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27595,9305f3931339322%26n... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313&ussp=mstp&usln=1&inp... │ http://irr.ru/index.php?showalbum/login-3767436/roomootofile/obzor.com/iframe │ 17 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/stan/index.kz/yandex │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-search%3Futm_source=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertistia.html?partment/searc... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031323532363&win=70&mode=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 1 │ 0 │ 0 │ http://bibieters_sig=5ea8QizwGSPy0yGcm14ATH74D4Bw&usg=AFQjCNHxMZlonova.ru/p1847... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://diary.ru/forum/intries │ 17 │ +│ 3 │ 22 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_style... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lenfiki-zhienskaia-moda-muzhchin-sitafa ishq... │ http://irr.ru/index.php?showalbum/logical.ru/link=11485-9065383235348%2F&sr=htt... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-futbolki-k... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261636/detail/odnoklassim... │ 17 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/messar.ru/professig │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 1 │ 0 │ 0 │ http://acase.php?input_who1=2&input_who2=1 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.10 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268814453957595,94406/det... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-irina19910735%2F27.0.1453.116 Safari │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=Like Gecko) Chrome%2Fpotnik=1&price_do=&curr... │ http://irr.ru/index.php?showalbum/login-the-poxudet_sponsor=&o=6000708498/?caut... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733145625/details... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26618531&t=111246.html?p=... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694&option%2F12.14&he=76... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b76faact/less=1&ru=1&... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=bestwo.diary/details&id=9160/0/posti.ri... │ 17 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-53584715,1327288/belgium/arch=1&themec.... │ 17 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/category=cinem rasmusic │ http://komme%2F27.0.1453.116 │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-herokee_tatus=1&rm=18606bAxFEcQT6smBB4W... │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267044005320AA76)&vendor_... │ 16 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search?clid=19554786.0.8.0.2.2003558_3497926... │ http://irr.ru/index.php?showalbum/logie-niz-doktops/electronics/4185570c72 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098707209463401090/deta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27034195,9520160173/5/wom... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgas.rQRAX2Ua3IF1iHJcaz4ATv34DABw │ http://irr.ru/index.php?showalbum/login/?page=1024&wi=144438-88-3906740/currenc... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search/cuZXdzJTJGJmxyPTI4fQ,... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&pt=b&pd=7&pw=2&page5... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-plan... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26396284046.xhtml%3Fhtml%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate/out-of-tow... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260612d7cf.4082813,74,756... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login.aspx?sle=13&s_yers=0&page_type=0&door=0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnaja-prost-petersburg/detail/?fold... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?&clients-sale&siteurl%3D//ads/search?text... │ http://irr.ru/index.php?showalbum/login-kapusta-advert273786/foto-5/#photo=2817... │ 16 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/movinki... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/page=91552&q=\... │ http://irr.ru/index.php │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-krasok.html_params%3Drhost%3Dad.adriver │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti/redmonds %2F offset=403134333.2201560&c... │ http://irr.ru/index.php?showalbum/login-v40-velopiter.feriod=0&scroll_to_auto.r... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661232&streamfood.com/if... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiensmed.ru/dl/\xD0\xB7\x... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166303133334%2F&ei=horia+iudi... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26765.html_params%3Drhost... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-57548811426&text=\xD0\xBB\xD1\x83\xD1\x87\xD... │ http://irr.ru/index.php?showalbum/login-coolonellana-Molodilnik.ru/index.php?vi... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/70948/35.htm?id=... │ http://irr.ru/index.php?showalbum/logiy-luchaiev%2F&sr=http:%2F%2Fwww.bonprix c... │ 16 │ +│ 1 │ 0 │ 0 │ http://histore/profile;u= │ http://irr.ru/index.php?showalbum/login-kupe-20013&uuid=1373356164564_1sort/sta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/showtopic,803813.html&... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_catalog/1250/?itemsg/cd... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=findjob.ru/planet.ru/index.ru/carinov.h... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2755597.html%3Fhtml?1=1&c... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert260477/cities/visas/exp?s... │ 16 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://video.yandex.php │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26887301/Zona/simferopol.... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2728024/detail/508/?instv... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27429&input_bdsm_position... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-153-4b9c4.4331626.htm?size%3D0%26rleurl │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/posts&q=\xD0\xB2\xD0\xB5\xD0\xB4\xD1\x83\xD1... │ http://irr.ru/index.php?showalbum/login-mistore/#CATALOG_LIST-s-ovosibirsk/deta... │ 16 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://msuzie-shop/premiery-c-38208_2.html │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 16 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-marka=23&model&desting?field_town/search/pri... │ http://irr.ru/index.php?showalbum/login-492ea9&show/417582,9626512874":10157628... │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27364229586121%26url%3D%2... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/sch/price][min]=41&lr=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ 1 │ 0 │ 0 │ http://volgografiyah_27_iyunya_50_let%2FgetId │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333%26bid%3D1%26rleurl%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new=127201148][fr... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661251-6efa-d61f-fef3-01... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-maritkiN │ http://irr.ru/index.php?showalbum/login-ladimir.irr.ru/remiery-telefon.ru │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/tv-audi/a7-spec=9894797179698712/p1/8... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logiste's a di galaxy-s4-story1.aspx#location... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5.0 (Win... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti%2F%3Ff%3D100%&http://afisha.yandsearch&... │ http://irr.ru/index.php?showalbum/login-6030d.html_params%3Drhost%3D90%26height │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/7427510/detail/5... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269899458/price/3815&pvno... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=view/5/item3963... │ 16 │ +│ 1 │ 0 │ 0 │ http://yandsearch?lr=2&color │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new10152954vac │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-gorod/search?p=7&oprnd=9902.jpg&img_url=http... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27222.vk.me/u3166 │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2735030373434-152495.php?... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2753][from]=&pricedownloa... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makeevka.ru/perm.irr.ru/slingvo/#1\xD0\... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691.html?1=1&input_age2/... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2010000087378687/pic/8939375f303839303935373... │ http://irr.ru/index.php?showalbum/login-souse=2/path=39_1.html?1=1&cid=577&oki=... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-irinakai/page_num_read2306e4574&ei=Ot_rUfjPG... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26708662307][]=&selection... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313033393633310,932803][... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumy.ua/search?text=\xD1\x81\xD0\xB5\... │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2695/19545602cf94d77/repl... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/artira │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/?strict=5710... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertists/736850/?item_no=737&... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikal.ru/search/room=1&dam... │ 16 │ +│ 1 │ 0 │ 0 │ http://forums/liiiervierk-suppohudeemvmesting/294465&op_categoriya │ http://komme%2F27.0.1453.116 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&model=1173... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=new&cad=rjt&fu=0&input_country_id=228&lr=961... │ http://irr.ru/index.php?showalbum/login-cam.shtml#objdesc=true&uA=Mozilla │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login/?do=ready-mansion%3D0%26url%3D%26bn%3D0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb=1&prepairs=0&city[1 │ http://irr.ru/index.php?showalbum/lounona-muzhchin-kupaljinik-chernyj-odnoe/san... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-4433140796851/detail/536180&all=False&i... │ 15 │ +│ 1 │ 0 │ 0 │ http://launcher-searchads/search │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26981583/page=1089592445/... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_produkty/kiev.org/forum... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginsk.eu/ru/Pagesize=13&m1=07 │ http://irr.ru/index.php?showalbum/login-3muda/truction/vacancies/750207190765.h... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-album/login.2/second... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781308;IC,238208836746/0... │ 15 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F1.7.1364.172 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945HPS?analog/r10418/sort=price_do=200&site_off=1 │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 15 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshop/id_art_type=7&s_yers │ http://irr.ru/index.php?showalbum/login │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273631253711/foto-6320166... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2724/?_h=search?text=\xD0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273389; U; Android 4.0.14... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-goluboj-podserial&dfs=13 │ http://irr.ru/index.php?showalbum/login-haus.html#news/228670,257&pci=3012/frl │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#67 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266356163f39ea6f8/7a8745&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/washes/built-in_two_ch... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26605566254/room=1.6&wher... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?transk.i... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://irr.ru/index.ru/show/414526863_112 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?Topic │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?page37/?sta... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/produkty%2Fplatj... │ 15 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/state=1909644 │ http://afisha.yandex.ua/auto_id=0&with_photo.kurortmag.ru/razdnitsya-vishnury │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list.html?typ=SMA&anbieter=aleks_evilkos.com │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/index.ru/ange=0&s_yers=(3000&static.diary.ru... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-land_search?text=\xD0\xB0\xD0\xBC\xD0\xB1\xD... │ http://irr.ru/6323%26bn%3D27888895,963095425 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginskikh-viana.irr.ru/GameMain.aspx?sle=1/house.... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678&op_page=60000/curren... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?Id=9582 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=alini... │ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liloveplanet.ru/futurer533/women.aspx?group-... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2631920&lo=http://person_... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-tumbov.irr.ru/page1=&input_who1=2&id=29... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.1Uv1UfqCA8SonYC4BQ&usg=AFQjCNGB3pBUuKY1jJPP3... │ http://irr.ru/index.php?showalbum/login-tank-sale/search%3Fmode=&page_type │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2718599/photo=0&is_hot=0&... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.php?city[1]=700003 │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26761,55.654289600/detail... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2699364224073532663835386... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login=vladimir/page_type=0&expand_search?text... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27515/418695&st=327-B110Q │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?dok=001&rightbox/week&From=0&user │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/frl-4/trailer/view/3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-lential/secondary/details9.html_params%... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/gamemain.asp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page9/#14... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienshchin-planet.ru/myma... │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=25127691%2F... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27265484158197%26width%3D... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27877437494,943082&stat_t... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2730675595,9292fa-d61f-fe... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-676216b8af/4fd00fa61b3185631821/page_ty... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_appliazh-pliance/mista-bez-uchaiev/000202&cl... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/ch/floore troubleclick... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1955451&lr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 3 │ 123 │ 0 │ │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Ford-antent... │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginy_name/3196906481/currency=6465373200&price=\... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2776/?date=0&doorov.irr.r... │ 15 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nashinger/users/search?textilead&353%26ev_pl... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-102-821922237&arrFilter2013/08-iH4AT5zIGQDA │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_type=&freetao.diary.ru/sea... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/877/ru/buildin... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert262997385f32313335781094&... │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9584%26pz%3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2693_763613.html_params%3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274298799461981/?date=129... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert276278-ploschaya_checked_... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.10 │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://ekburg.irr.ru%2Fpuloveplanet │ 15 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credir=1 │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/gosthelp.ru/auto.ria.... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=on&input_onliner... │ http://irr.ru/index.php?showalbum/login.html%26custom%3D%26CompPath.2; WOW64; r... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=on&in... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga664.1721/deti74.ru/animals-planet.ru │ http://irr.ru/index.php?showalbum/login=K-SR-B-13-9635095,9661/9#f │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search?text=\xD1\x84\x... │ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/doc.ru/belgorod.irr.ru... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19&numphoto/login=A-CL-MS-smi.org%2F40 (KHTML, like Gecko) Version... │ http://irr.ru/index.ru/widgetchrome%2F&ti=no&dom_sell/pansiyskaya-obl.irr.html%... │ 15 │ +└────────────────┴────────────────┴─────────────┴────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.986 user 1.912000 sys 0.104000 +D 07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +Run Time: real 0.861 user 0.860000 sys 0.044000 +D D (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +Run Time: real 1.168 user 1.208000 sys 0.096000 +D " = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) ORDER BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))); +Run Time: real 0.171 user 0.248000 sys 0.020000 +D +D CREATE INDEX counter_id_idx ON hits (CounterID) +> ; +Run Time: real 18.194 user 16.256000 sys 0.092000 +D D (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +Run Time: real 0.022 user 0.296000 sys 0.000000 +D +D +D +D '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(URL) > 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +┌──────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├──────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 102341 │ +│ http://komme%2F27.0.1453.116 │ 51218 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18315 │ +│ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16461 │ +│ http://irr.ru/index.php │ 12577 │ +│ http://irr.ru/index.php?showalbum/login │ 10880 │ +│ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 7627 │ +│ http://irr.ru/index.php?showalbum/login-kupalnik │ 4369 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 4058 │ +│ http://komme%2F27.0.1453.116 Safari │ 3021 │ +└──────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.068 user 0.844000 sys 0.000000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(Title) > 0 GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ Title │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ \xD0\xA2\xD0\xB5\xD1\x81\xD1\x82 (\xD0\xA0\xD0\xBE\xD1\x81\xD1\x81\xD0\xB8\xD1\... │ 122407 │ +│ \xD0\xA8\xD0\xB0\xD1\x80\xD0\xB0\xD1\x80\xD0\xB0\xD0\xB9), \xD0\x92\xD1\x8B\xD0... │ 82935 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA - IRR.ru │ 80958 │ +│ \xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\xB8 New Era H (\xD0\x90\xD1\x81\xD1\x83\xD... │ 39098 │ +│ \xD0\xA2\xD0\xB5\xD0\xBF\xD0\xBB\xD0\xBE\xD1\x81\xD0\xBA\xD1\x83 \xD0\xBD\xD0\x... │ 23123 │ +│ Dave and Hotpoint sport \xE2\x80\x93 \xD1\x81\xD0\xB0\xD0\xBC\xD1\x8B\xD0\xB5 \... │ 14329 │ +│ AUTO.ria.ua \xE2\x84\xA2 - \xD0\x90\xD0\xBF\xD0\xBF\xD0\xB5\xD1\x80 │ 14053 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA (\xD0\xA0\xD0\... │ 13912 │ +│ OWAProfessign), \xD0\xBF\xD1\x80\xD0\xBE\xD0\xB4\xD0\xB0\xD1\x82\xD1\x8C │ 10919 │ +│ \xD0\xA2\xD1\x80\xD1\x83\xD1\x81\xD0\xB8 - \xD0\xA8\xD0\xBE\xD1\x83\xD0\xB1\xD0... │ 10157 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.045 user 0.584000 sys 0.000000 +D AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 7479 │ +│ http://aliningrad │ 4791 │ +│ http://ekburg.irr.ru%2Fpuloveplanet │ 3584 │ +│ http://smeshariki.ru/obucheyelants │ 3064 │ +│ http://video.yandex.php │ 2887 │ +│ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 1084 │ +│ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 891 │ +│ http://afisha.yandex.ru/index │ 855 │ +│ http://sslow_13507.html?aspx?naId=6HS │ 521 │ +│ http://wildberrior/uphold │ 484 │ +│ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 289 │ +│ http://obninsk/detail │ 241 │ +│ http://diary.ru/forum/intries │ 208 │ +│ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 185 │ +│ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 185 │ +│ http://kurort/SINA, ADRIAN │ 157 │ +│ http://afisha.yandex.ru │ 132 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 124 │ +│ http://ssl.hurra.com/iframe │ 123 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 119 │ +│ http://stars-visa.html_params%3Drhost%3Dad.adriver.ru/catalog.php │ 105 │ +│ http://komme%2F27.0.1453.116 │ 83 │ +│ http://pogoda.yandex │ 80 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 79 │ +│ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 73 │ +│ http://video.yandex │ 71 │ +│ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 68 │ +│ http://wildberries.ru/daily │ 68 │ +│ http://smeshariki.ru/ru/index.ru%26bid │ 68 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 64 │ +│ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 64 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn │ 63 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 59 │ +│ http://sslow_135000008&position=search │ 58 │ +│ http:%2F%2Fwwwwww.bonprix.ru/topic │ 53 │ +│ http://sslow_13507.html/articles │ 52 │ +│ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 51 │ +│ http://rsdn.ru/rss.ya.ru/catalog │ 51 │ +│ http://ekburg.irr.ru/#lingvo │ 46 │ +│ http://pogoda.yandex.ru │ 45 │ +│ http://sslow_13500000%26rnd%3D2788881.html │ 44 │ +│ http://maps#ru_5_ru_22106.377648194,975924][to]=&int[14270pa106&op_uid=17759/6#... │ 42 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 37 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 37 │ +│ http://video.yandex.ru/film/46351/frl-2/bage │ 36 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 35 │ +│ http://direct.yandex │ 34 │ +│ http://sslow_13507.html?aspx?naId=3X_3bhLcs3M │ 33 │ +│ http://gotovim-doma │ 32 │ +│ http://che.ru/produkty_zarubezhei-niepochekhly │ 31 │ +│ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 30 │ +│ http://video.yandex.ru/Newsletter │ 29 │ +│ http://sslow_13507.html?aspx?naId=6D8IzMGys3M │ 29 │ +│ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ http://video.yandex.ru │ 28 │ +│ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 28 │ +│ http://sslow_13507.html?aspx?naId=649&state/out-of-town=\xD0\xA5\xD0\xB0\xD0\xB... │ 27 │ +│ http://notes=1/currency │ 27 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 26 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 26 │ +│ http:%2F%2Fwwww.bonprix.ru/tambov │ 24 │ +│ http://kinopoisk.ru/shoppich.ru/search?clid │ 24 │ +│ http://wildberries │ 23 │ +│ http:%2F%2Fwwwwww.bonprix.ru/searchAutoSearch?text=\xD0\xB2\xD0\xB5\xD0\xBB\xD0... │ 22 │ +│ http://myloveplanet │ 20 │ +│ http://stars-visa-litraj.txt","lpu":"http://pogoda │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/secondary │ 20 │ +│ http://msuzie-shop/premiery-c-38208_2.html │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 20 │ +│ http://smeshariki │ 19 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 19 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ http://irr.ru/6323%26bn%3D27888895,96772,97436 │ 18 │ +│ http://kinopoisk.ru │ 18 │ +│ http://nepogoda.yandex.ru%2Fproducts/search?text=subscripts/busineshop │ 17 │ +│ http://wildberries.ru │ 17 │ +│ http://kinopoisk.ru/catalog/9902224 │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://direct.yandex.html │ 17 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 17 │ +│ http://irr.ru/6323%26bn%3D27888895,963095425 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 16 │ +│ http://afisha.yandex.php?gidcar=36281664 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://auto.ria.ua/search │ 15 │ +│ http://direct │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ http://irr.ru/index.php?showalbum/login-kupalnaya-obl │ 15 │ +│ http://kinopoisk.ru/odessya │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 14 │ +│ http://ekburg.irr.irr.ru/maker │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.yandex │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.mail/rnd=0.9788 │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://auto_many_to_auto.ria.ua/igrush43/ │ 13 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 13 │ +│ http://afisha.yandex.ru/cars │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 13 │ +│ http://love.ru/a-myprofi │ 13 │ +│ http: │ 13 │ +│ http:%2F%2Fwww.bonprix │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://real-estate/aparther/offiliates/corruption/russinsk │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 12 │ +│ http://on-online=on&accetti │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 12 │ +│ http://samara.irr.html5/v12/?from]= │ 12 │ +│ http://kinopoisk.ru/saledParams │ 12 │ +│ http://en.lyrsenses/zamba_zaborah_coldplay=1&gearbox │ 12 │ +│ http://zvukovo/hondar/2007&state/renlew/rigma.ru/scribed │ 12 │ +│ http://pogoda.yandex.php?SECTION │ 12 │ +│ http://msk/platia-nashing/vanny.diary.ru/moscow │ 12 │ +│ http://video.yandex.ru/GameMain.E6smreQhiu_hXR4&where=all&film │ 12 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 11 │ +│ http://nizhnieiene/p17378705/currency=1&with_photo-ideapadeno │ 11 │ +│ http://news/6483731559676/Unlocknotebooks/m83/800_D_Black_list │ 11 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty/photo-12/#imag... │ 11 │ +│ http://msk/platia-nashing/vanny.diary.ru/sale/liver │ 11 │ +│ http://video.yandex.ru/GameMain.aspx#location │ 11 │ +│ http://guid=6&pw=6&pv=13 │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 11 │ +│ http://wildberries.ru/rost.html?1 │ 11 │ +│ http://smeshariki.ru/?win=82&stat=1&page/196264&pt │ 11 │ +│ http://pogoda.yandex.ru/catalog/jokers │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 11 │ +│ http://en.lyrsenses/zamba_zabudtrimazok.html?page=12&prr=http://fap1.adrive_typ... │ 11 │ +│ http://bonprix.ru%26bid │ 11 │ +│ http://loveplanet.ru/GameMain │ 10 │ +│ http://bdsmpeople.ru │ 10 │ +│ http://liver.ru/cheboksicily/foto.aspx?sort=newly&trafkey │ 10 │ +│ http://video.yandex.ru&pvid │ 10 │ +│ http:%2F%2F%2Fwwww.bonprix │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 10 │ +│ http://club.ru/spokoiteli/photo37775280000 │ 10 │ +│ http:%2F%2Fwwww.bonprix │ 10 │ +│ http://auto_id=240&n=13901038 │ 10 │ +│ http://smeshariki.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://slovariant_new3077940810/detail │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://en.lyrsenses/zamba_zabor_id=1012_blank%26site │ 10 │ +│ http://sslow_13500000%26rnd%3D2788881.html?parts/passe │ 10 │ +│ http://pogoda.html%3Fhtml_params%3Drhost%3D43 │ 10 │ +│ http://irr.ru/index.php?showalbum/logout%26verstova.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://pogoda.yandex.php │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film/6781203.html?id=242037047/detai... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://mysw.info/blog/sankt-peter%3D1216/00001216629 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://e96.ru/albumfotok-15-fotki │ 9 │ +│ http://alpari.yandex.html?html_param=0&users/#page/Search/ab_dob%2Ffieiie-razvo... │ 9 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://bonprix.ru/catalog/8570/1006790 │ 9 │ +│ http://b2b.testered/main/discuss/matched_country=-1&top=0&cityid=1024&wi=1366&o... │ 9 │ +│ http://svpressa.ru/topic=17082630 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://bonprix.ru │ 9 │ +│ http:%2F%2Fwwww.bonprix.ru/filmId=8j5j97LRs3M&where=all&sources │ 9 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/#win_13.html_p... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/4744089758 │ 9 │ +│ http://nail=Yes&target=search │ 9 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_produkty%2F&sr=http://slovaria │ 9 │ +│ http://rlsnet.ru/vacancy/view_type_id=9677548268010367 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ https://m.myloveplanet.ru/forum/abrika-kobelenie_nebestsenal │ 8 │ +│ http://irr.ru/imagecache/wm/2013&where=all&filmId │ 8 │ +│ http://poisk.ru/price_ot=&price_ot=&price │ 8 │ +│ http://zapchast.com/iframe-owa.html?1=1&cid=577&oki=1&op │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 8 │ +│ http://afisha.yandex.php?t=141880517 │ 8 │ +│ http://zarplata.ru/velika_all=\xD0\xBE\xD1\x82 │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http:%2F%2Fwwwwww.bonprix.ru/news/222974895&op │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://fore=3&marka=0&top=0 │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96777&oki │ 8 │ +│ http://video.yandex.ru&xdm_p=1#item/search │ 8 │ +│ http://direct.yandex.ru/catalog │ 8 │ +│ http://zarplata.ru/?p=12977-B26358/currency=RUR/page=1080&wi=1024&lo=http://rzh... │ 8 │ +│ http://en.lyrsenses/zamba_zabor/bedroomolsk │ 8 │ +│ http://masterh4.adriver.yandex │ 8 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ==&page_avtomodules.php?f=100&ref... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://mastered/main.aspx#location=1&bc=3&ct=1&pr=60322056107100919/page5/?_h=s... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://omsk.mlsn.ru │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96779/87 │ 8 │ +│ http://smeshariki.ru/GameMain │ 8 │ +│ http://afisha.yandex.php?gidcar=367108851%2Fr%2F1 │ 8 │ +│ http://che.ru&pvid=13733142835/100/topic,5240556895&ch=UTF-8&sF=11,7,7,0 │ 8 │ +│ http://love.ru/?p=17059 │ 8 │ +│ http://wildberries.xml?from]=&input │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/index.php?showalbum/login-kupit-topy%2Fplatjie-gotovlexandex.html... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://auto.ria.ua/auto_id=24126629/0/index.ru/real-estate/out │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 8 │ +│ http://victor?page_type=city.stol-yar.ru/cars │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://kinopoisk.ru/ch/feed/letniaiaprice/1609 │ 7 │ +│ http://video.yandex.ru%2F&sr=http://loveplants/65398f55 │ 7 │ +│ http://real-estate/aparts/Aquarevski │ 7 │ +│ http://bonprix.ru/social/product_id │ 7 │ +│ http://video.yandex.ru/a-album/login-vitiju/photo │ 7 │ +│ http://moscow/detail/5552/0/2792834&m=111,7,7,5 │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 7 │ +│ http://irr.ru/Registered/main/topnewsru.com/page=6 │ 7 │ +│ http://irr.ru/index.php?showalbum/login-kapustics?sort=pogoda.yandex.ru%26bt%3D... │ 7 │ +│ http://bonprix.ru/catalog/8570/14139489 │ 7 │ +│ http://afisha.yandex.ru/\xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB0/\xD0\x91\xD0\xA1\xD0\x... │ 7 │ +│ http://irr.htm?from]=&int[85][from]=&input_vsegodnyie │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://love.ru/?p=1#country=&op_seo │ 7 │ +│ http://bdsmpeople.ru/niktory/shtory/308/roomed.ru/p59473682740295 │ 7 │ +│ http:%2F%2Fwwwww.bonprix │ 7 │ +│ http://myloveplantrackIt?tid │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 7 │ +│ http://spb/event=big&marka=84&model=0&auto_id=0&s_yers=0&pv=10&can_be_check_PP │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://pogoda.yandex.ru&pvid=1 │ 7 │ +│ http://irr.ru/index.php?showalbum/login-a-5-advert27114 │ 7 │ +│ http://bdsmpeople │ 7 │ +│ http://video=0&is_hot │ 7 │ +│ http://irr.ru/index.php?showalbum/login-zk34/pages/0001216629 │ 7 │ +│ http://svpressa.ru │ 7 │ +│ http://money.yandex │ 7 │ +│ http://gotovim-doma.ru │ 7 │ +│ http://afisha │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 7 │ +│ http://video.yandex.ru%2Fkategory_id │ 6 │ +│ │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://afisha.yandex.ru%2F%2Fmail/169 │ 6 │ +│ http://omsk/evential/house.ru/catalog/kitchedule=213-606361653965283 │ 6 │ +│ http://video.yandex.ru/ekt │ 6 │ +│ http://love.ru/?p=1#country=-1&sq_liver.ru/kyrgyzstan │ 6 │ +│ http://stars-varenok.ru/16745959680706/800_0.jpeg.html%3Fhtml5/v123593 │ 6 │ +│ http://afisha.yandex.ru/catalog=on │ 6 │ +│ http://bdsmpeople.ru/film/64544.690022.rar.html_params%3Drhost%3D_black_list=0&... │ 6 │ +│ http://bdsmpeople.ru/GameMain │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://v102.ru/investate/apartments-sale │ 6 │ +│ http://video.yandex.ru/GameMain.aspx#location/page_type=category │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://wildberries.ru/search │ 6 │ +│ http://afisha.yandex.ru%26bt%3D43%26anbietersburg │ 6 │ +│ http://omsk/evential/housession%3D0 │ 6 │ +│ http://video.yandex.ru/a-topy │ 6 │ +│ http://direct.yandex.ru/refererprofile%2F2.10 │ 6 │ +│ http://moscow/details │ 6 │ +│ http://rukodel=0&sort=newly&trafkey=2750 │ 6 │ +│ http://smeshariki.ru/world/photofider_credit=0&view │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://novosibirsk.irr.ru%26bid │ 6 │ +│ http://irr.ru/index.php?showalbum/login-12.html%26custom │ 6 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 6 │ +│ http://solutions.diary.ru/realtitroenie_v_jurman.ru/albums/frame-owa.html?stric... │ 6 │ +│ http://mr7.ru/newsru.com/iframe_right%3D43 │ 6 │ +│ http://autodoc.ru/real-estate/apart │ 6 │ +│ http://smeshariki.ru/catalog │ 6 │ +│ http://edp2.adriver.ru/hocketshop.ru/moscow/detailanude │ 6 │ +│ http://povari.yandex.ru/greecondary/Products_id=&auto_vaz_2111 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://msk/platia-nashing/vantralitsa_transion │ 6 │ +│ http://video.yandex.ru/catalog │ 6 │ +│ http://ereal-estate/rent │ 6 │ +│ http://3dnewsru.com/iframe_right.html?1=1&cid=51538 │ 6 │ +│ http://afisha.yandex.php/board,39.04839 │ 6 │ +│ http://novo/detail.aspx?group_cod_1s │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://kalininmyclonus1 │ 6 │ +│ http://auto_hyundai_sarator │ 6 │ +│ http://bdsmpeople.ru/saledParams=rhost%3D43%26bid%3D1 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://forum/topnews/22294&op_category │ 6 │ +│ http://love.ru/?p=17055335 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://afisha.yandex.ru/mymail.php │ 6 │ +│ http://real-estate=week/page=1&expand_search?film/298677435615.html │ 6 │ +│ http://koolinar.ru/port.ru/doc │ 6 │ +│ http://afisha.yandex.ru/index.ru/recipe │ 6 │ +│ http://video=0&with_exchangeType │ 6 │ +│ http://kinel-lab.com/rus/20130709_117485994,93304&op_seo_entry=1&gearbox=0&type... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ https://slovakia-600dd903c07022,101595,91194&op_seo_entry │ 6 │ +│ http://diary.ru/exp?sid=3205 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://video.yandex.php?search?text=\xD0\x9A\xD0\xBE\xD0\xBD\xD1\x8C\xD1\x8F\xD... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://video.yandex.php?from]=&interapy-wkti/ &cd │ 6 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D8393224 │ 6 │ +│ http://love.ru/ru/irk/event/search/ │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://kinopoisk.ru/catalog │ 5 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 5 │ +│ http://auto_volkswagen/vologdano/il_dlya-dnevka.ru │ 5 │ +│ http://barnaul/details/?cauth │ 5 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD0\xB5\xD1\x80&where=... │ 5 │ +│ http://metal-lodku-Obzor │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 5 │ +│ http://sp-mamrostova │ 5 │ +│ http://tp66.ru/exp?sid=3860217/rooms=2/men.aspx#location%3D0%26rnd │ 5 │ +│ http://zvukovo-gorodsk │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 5 │ +│ http://rmnt.ru/search/offilia_Sovetov_living_chamber/?78142 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http:%2F%2Fwwww.bonprix.ru/?id=2013&where=all&filmId │ 5 │ +│ http://video.yandex.by/?state_id=&auth=1..630;IC,7711588 │ 5 │ +│ http://e96.ru/movies/614418821/artir.ua/search │ 5 │ +│ http://slovari.yandex.ru%26orderovskij-index.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://povari.yandex │ 5 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_seo_entry=&op_category_... │ 5 │ +│ http://tks.ru/cat/publish-cherkalnaya-ttpodporyadushek │ 5 │ +│ http://auto.ria.ua/auto_id=241269.html?1=1&cid=2127970 │ 5 │ +│ http://video.yandex.ru/GameMain.aspx?Link │ 5 │ +│ http://slovarenok.com │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://slovari.yandex │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://auto_volkswagen-Palities/horobki │ 5 │ +│ http://afisha.yandex.php?r=23436303135353.html?1 │ 5 │ +│ http://rustnye-sht-riemnikoi │ 5 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 40007&pt │ 5 │ +│ http://radio&planet.ru/work.ru/catalog │ 5 │ +│ http://en.lyrsenses/zamba_zaborah_chamberk │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://myloveplanet.ru/v14572&lb_id=13000001216629 │ 5 │ +│ http://sslow_135000008&position=search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 5 │ +│ http://pogoda.yandex.php?gidcar │ 5 │ +│ http://bibidohertki-i-OOOO_REPORT/07_2013 │ 5 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 5 │ +│ http://real-estate=week&m=Dvigenie.html?option │ 5 │ +│ http://autodoc.ru/moscow │ 5 │ +│ http://love.ru/product_id=0&po_yers=0&po_yers=2&refererro/model=1346488078722&c... │ 5 │ +│ http://topnews.ru/GameMain.aspx?group_cod_1s=1983&pt=b&pd=9&pw=0 │ 5 │ +│ http://avtomobile/motory.ru/comp.ru/view.php │ 5 │ +│ http://video.yandex.ru/firms.turizm │ 5 │ +│ http://video.yandex.ru%2FkategoriendflowerTo=&powerTo= │ 5 │ +│ http://loveplanet.ru/mymail/rudi │ 5 │ +│ http://auto.ria.ua/auto │ 5 │ +│ http://msk/platia-nashing/vannyie-product_id=1841&page2 │ 5 │ +│ http://auto.ria.ua │ 5 │ +│ http://nizhnieiewva88/photo/101246465376&cmd=show-to-buchaiev-pugache=51db32a68... │ 5 │ +│ http://club.ru/cinema/movies/no-pos │ 5 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D158197%26width │ 5 │ +│ http://direct.yandex.ru/index │ 5 │ +│ http://tks.ru/cat/publish-chemec.ru/search?filmId=CktclMBmUXI │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://kinopoisk.ru/spb.pulscen.ru/exp?sid=3159&op_category_id=&auth=0&checked=... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://holodilnik-rp-ploschaya-obuv/?ci=1280&with_video=0&choosOyg==&op_uid=111... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://wildberries.ru/real │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://slovariant_neu%3D1%26bid%3D1216/0001216629%26bt%3Dad │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://wildberrior/kia/ │ 5 │ +│ http://md.mirkovskaya-obl.irr.ru/jobinmoscow │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://jcmotorom-921205&bt=7 │ 5 │ +│ http://povari.yandex.php?showalbum/login.pl?cl=all&film/497794,90458 │ 5 │ +│ http://en.lyrsense.com/obshchin-idieiala │ 5 │ +│ http://loveplanet.ru/\xD0\xB0\xD1\x80\xD0\xBE\xD0\xBC/curre-ap-i-showalbum/loui... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://moscow/detail/Torgovuyu-organske.ru/real-estate │ 5 │ +│ http://smeshariki.ru/topic │ 5 │ +│ http:%2F%2Fwww.bonprix.ru │ 5 │ +│ http://gaylyU │ 5 │ +│ http://video.yandex.ru%26bt%3Dad.adriver.ru/recipe/view/10217/?from │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 5 │ +│ http://loveplanet.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://alpari.ru/gallery/pic845274 │ 5 │ +│ http://alib.mist.html%26custom%3D%26c2%3D278888592138 │ 5 │ +│ http://loveplanet │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://whoyougle.ru/images/images/00000i/specifiers.ru/image=1&furniture │ 4 │ +│ http://video.yandex.ua │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 4 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 4 │ +│ http://video.yandex.ru/price │ 4 │ +│ http://sslovarenok.ru │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/filmId │ 4 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 4 │ +│ http://afisha.yandex.ru/zoom.php?f=5162613838.html_partments │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://auto.ria.ua/auto_id=0 │ 4 │ +│ http://irr.ru/index.php?showalbum/login-10618968476372773 │ 4 │ +│ http://samarskii_krai/tuapse/detail/result.aspx │ 4 │ +│ http://loveche.html │ 4 │ +│ http://bdsmpeople.ru/Web/Pages=1/feedsmag.ru/~\xD0\xBA\xD0\xBD\xD0\xB8\xD0\xB3\... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://wildberries.ru/catalog │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://e96.ru/news/39733/page2=&input_sponsor=&o=1015219.html_partments-sale&pa... │ 4 │ +│ http://afisha.yandex.ru%252f7769%252fe │ 4 │ +│ http://echoradar-s-Levoshcha │ 4 │ +│ http://diary.ru/catalog=on&input_city[3 │ 4 │ +│ http://love.ru/?p=1#countpage/vacancies/events/738/0/3/women.aspx │ 4 │ +│ http://direct.yandex.php?formsof(INFLECTION_ID=30861/14365-4b11&state/apartment... │ 4 │ +│ http://radio&planet.ru/marka=62&model=1178128455&pvno=2&evlg=VC,5 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://rasp.pl?cmd │ 4 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://travel.ru/state/apartments-sale/rashinitit%2F537 │ 4 │ +│ http://auto.ria.ua/auto_id=63799.html_params │ 4 │ +│ http://video.yandex.php?view_type=2&driveresult.ru/replies │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://afisha.yandex.php?r=3&bs=&day │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://kinopoisk.ru/saledParams%3Drhost%3Dad.adriver.ru/GameMain.aspx#location │ 4 │ +│ http://ssl.hurranovskaya-ul-31-foto.ria │ 4 │ +│ https://smeshariki.ru/cinema/article10363136000001216629%26site_offilia_Sovets.... │ 4 │ +│ http://vkirovoe-tourisma │ 4 │ +│ http://smeshariki.ru/domchelkakh_location=search?text=\xD0\xBC\xD0\xB8vents │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboy07/... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://guid=6&pw=2&pv=0&price_do=¤cy=1 │ 4 │ +│ http://smeshariki.ru/search/keukeru-soft │ 4 │ +│ http://card/windows)&bL=ru&cE │ 4 │ +│ http://kniga.ru/view=\xD0\xA1\xD1\x82\xD0\xB0\xD0\xB2\xD1\x80\xD0\xBE\xD0\xB2&w... │ 4 │ +│ http://afisha.yandex.ru/search │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://zarplata.ru/?p=12977-B26358/hasimages=1/page │ 4 │ +│ http://video.yandex.ru/GameMain.XYyZwYXRoPWEtbG9nb24vcG90Cw │ 4 │ +│ http://video.yandex.ru/real │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://v102.ru/?s=Adaments-sale │ 4 │ +│ http://matched_car=373838928155755775482794,9453.116 Safari%2F537.36&he=10&s_ye... │ 4 │ +│ https:%2F%2Fwwww.yandex.ru │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/GameMain.aspx#location-4.0.html │ 4 │ +│ http://tks.ru/cat/publish-chernyjbelyj-9375966238&op_categoriya │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/social │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://video.yandex.ru/realty/leaser_map=1/hasimay-2.html │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://video.yandex.ru%26target=search/ab_area=categorija80119 │ 4 │ +│ http://nizhny novgorod │ 4 │ +│ http://auto.ria.ua/canel_pe_mascona Hilfigeratov/153228 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://e-kuzbass.ru/a-shop │ 4 │ +│ http://victorhead.php?full&dom=780067167694.0; │ 4 │ +│ http://guide.travel.ru/link │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://kubikus.ru/search.php?r=4140211,1,7,7,7,7,0 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/cart.php/cars/papago-d-plosch │ 4 │ +│ http://afishi,Mudanted-belyj-974299099/guest-id=34089.html │ 4 │ +│ http://fitness/building │ 4 │ +│ http://svpress_up.aspx#location[propfilter_pf[PODVAL]=&arrFilter][3463351841195... │ 4 │ +│ http:%2F%2Fwwww.bonprix.ru/real-estate/out-of-town/house │ 4 │ +│ https://produkty%2Fpulove.ru/gost/?page3 │ 4 │ +│ http://afisha.mail.aspx#locationalOffers │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://anketka.ru/bridget │ 4 │ +│ http%3A//magnitogorod/page3/#over │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadbor_sh... │ 4 │ +│ http://video.yandex.ru/GameMain/dukhovyy │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://afisha.yandex.php?action/2741920 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://love.ru/image=2&marka=84&model/mihailovo │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://tks.ru/cat/public/gamemain.aspx#location │ 4 │ +│ http://nepogoda.yandex.ru/search=1&target=search=0&can_be │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://kinopoisk.ru/searchAutoSearch=0&driver.ru/catalog/1/women.aspx#locationp... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://afisha.yandex.php?show=rlv&ru=1&expand_search │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://love.ru/?p=1705 │ 4 │ +│ http://ssl.hurra.com │ 4 │ +│ http://auto_volkswagen_cated_cartovskaya-obl.irr.ru/album/login │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://afisha.yandex.php?p=31&input │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://loveche.ru/job/1162323&PAGEN_1=30&state │ 4 │ +│ http://video.yandex.ru/If yours.avtogsm.ru/animals/calculate │ 4 │ +│ http://internet Explorer&aV=5.0 (Windows)&bL=en │ 4 │ +│ http://rsdn.ru/details_103514,154;IC │ 4 │ +│ http://pogoda.yandex.ru/cooking_sm5_1148786993ab-417/photo/69363/26#formi.ru/co... │ 4 │ +│ http://auto_s_product_name=\xD0\x9A\xD1\x80\xD1\x83\xD0\xB3\xD0\xBB\xD0\xBE\xD0... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboyzon... │ 4 │ +│ http://video.yandex.ru/topnews.ru/lanas-advert2713][to]=&int │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://auto_volkswagen_pass_1161967 │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD1\x82\xD0\xBE\xD1\x8... │ 4 │ +│ http%3A//edp1.adriverys/forum/view_type=city&custom=0&damages/0001216629%26bid%... │ 4 │ +│ http://inspelishchin-platjie-doma.ru/irkutsk.irr.ru │ 4 │ +│ http://smeshariki.ru/saint-petersburg-gorod/transfer/?id=7576149959760994861&op... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://afisha.yandex.ru/content2.adriver │ 4 │ +│ http://en.lyrsenses/zamba_zabudka/photo-1/#page=0&sale/search?text=\xD0\x9C\xD0... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://auto_id=0&with_photo │ 4 │ +│ http://b.kavanga.ru/?a=inneVolumeFrom │ 4 │ +│ http://arma/frl-4/transportnoy-kv-m-malchik.ru/show │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://tp66.ru/money.yandex.ru/albums_screenterval │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://irr.htm?from]=&int[1151;IC,112 │ 4 │ +│ http://afisha.yandex.ru&pvid=13733424 │ 4 │ +│ http://bdsmpeople.ru/film/64544.690078 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_category_id=592b9e01c48ce9403%26bn%3D0%2... │ 4 │ +│ http://video.yandex.ru/GameMain │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ https://orenburg/?arrFiltersburg │ 3 │ +│ http://romar/events/audio.ru/widget[]=vacancies/99.php?gidcar │ 3 │ +│ http://afisha.yandex.php/topic104780204&op_uid=1954 │ 3 │ +│ http://afisha.yandex.php/tova.ru/uliya2076789599305953 │ 3 │ +│ http://afisha.yandex.ua/donetsk/urals │ 3 │ +│ http://afisha.yandex.ru/a-folders/misc │ 3 │ +│ http://afisha.yandex.ru/shop.ru/malta │ 3 │ +│ http://afisha.yandex.ru/project_price=&maxprice │ 3 │ +│ http://afisha.yandex.ru/kategoriya%2F5.0 (company │ 3 │ +│ http://afisha.yandex.ru/linkvac.php/board.php?topicseeng │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://samara.irr.ru%2Fproduct │ 3 │ +│ http://radiorecord.ru/login-m3w.html?1=1&cid │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://kinopoisk.ru/service.ru/iframe │ 3 │ +│ http://video.yandex.ru%2Fplata.ru/ch │ 3 │ +│ http://radioscannerica/filmId=Ba_id=13733568414&city=\xD0\x9C\xD0\xBE\xD1\x81\x... │ 3 │ +│ http://banantikov-nadushenie_orleona_server=sc.cheloveplant_11612/page │ 3 │ +│ http://irr.kz/realty/lease/3516093&pvno=2&evlg │ 3 │ +│ https://produkty%2Fplatjie-kuzbass.ru/newsru.com/iframe_right=0&auto_ria=0&meta... │ 3 │ +│ http://fuckfind=rent/view/2021/3 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ https://slovakia-600dd903c07022,101595,9143531427800648_elit │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://love.qip.ru │ 3 │ +│ http://auto_kia_30 │ 3 │ +│ http://kaluga/?ext=\xD0\xB3\xD0\xB5\xD1\x80\xD0\xBE\xD1\x8F\xD1\x82\xD0\xBD\xD1... │ 3 │ +│ http://sp-mamrostokonkursovet │ 3 │ +│ http://afisha.yandex.ru/forum.materinburg │ 3 │ +│ http://afisha.yandex.php?addriver.ru │ 3 │ +│ https://slovakia-600dd903c06c999c226647639.html%3Fhtml │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category_id=0&wi=16000&... │ 3 │ +│ http://sp-money.yandex.ru │ 3 │ +│ http://sp-money.yandex.ru/work rushki-sien-natalog/8570/page=0&expand │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://ssl.hurral=messages │ 3 │ +│ http://astrobank.ru/image │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://video.yandex.ru&pvid=13735/?_h │ 3 │ +│ http://love.ru/forum.cofe.ru/forum/view_type=city=790&Selectronics-technik │ 3 │ +│ http://wildberrior/bedroom]=&int[17][to]=&int[858 │ 3 │ +│ http://direct&sortdirect.yandex.ru/imagesize%3D0%26ar │ 3 │ +│ http://video.yandex.by/search/?target%3D43%26bid%3D2 │ 3 │ +│ http://forum/topnews/2229605699574.html?1=1 │ 3 │ +│ http://rmnt.ru/stars │ 3 │ +│ http://b.kavanga.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://video.yandex.ua/auto_id │ 3 │ +│ http://bdsmpeople.ru/search │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http:%2F%2Fwww.bonprix_ru}%2Fnizhniynovgorod/request-id │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://edp2.adriver.ru/catalog/181 │ 3 │ +│ http://rmnt.ru/film/88677/russia/rio.ru/search?filmId=NNr6aJrm4s3M │ 3 │ +│ http://video.yandex.ru/circle&state/out-of-town/houses │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film.ru │ 3 │ +│ http://msk/planet.ru/mymail.aspx#comme_me_saydinne │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://edp2.adriver.ru/jobinmoscow/detail │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://svpress_w1t1042796786/6/?category │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://pogoda │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.ru/forum.donfiscategory │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://pogoda.yandex.kz/family │ 3 │ +│ http://kazan.irr.ru/location │ 3 │ +│ http://video.yandex.php?topbloveche │ 3 │ +│ http://nigma.ru/product&op_category_name=\xD0\x91\xD0\xB8\xD0\xBA\xD0\xB8\xD0\x... │ 3 │ +│ http://radiorecord.ru/catalog/idShare │ 3 │ +│ https://produkty%2Fpulove.ru/voronezh-sien-zhienskaia-moda-zhienskaia-moda-zhie... │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com/iframe-owa.html?1=1&cid=577&o... │ 3 │ +│ http://tks.ru/cat/publish-chin-play.php?categoriya%2Fzhiensmed │ 3 │ +│ http://card/windows NT 6.1) AppleWebKit%2F5 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://magnitka_1_series.ru/?favorite_id=636233644&op_category_id=937514 │ 3 │ +│ http://svpress/showbiz/photo.htm │ 3 │ +│ http://loveche.ru/volzhskiy │ 3 │ +│ http://ussuriysk.irr.ru/catalog/premiere/628962851d7fd0b6eb17b321d336f5bc7de189... │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountpage │ 3 │ +│ http://afisha.yandex.ru/tatatit_chto.php?industry │ 3 │ +│ http://smeshariki.ru/a-phony │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://omsk/evential/housession%3D0%26url%3D//ad.adriver.ru/link/justic/h2.php/... │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty%2Ftanki │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/92054446660.ht... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://ekategoriya%2F9B206 Safari │ 3 │ +│ http://smeshariki.ru/catalog/286/women.aspx │ 3 │ +│ http://svpressa.ru/content/search │ 3 │ +│ http://video_dvd/game/iframe-owa.html │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://holodilnik.ru/catalog │ 3 │ +│ http://msk/platia%2Fzhienskaia │ 3 │ +│ http://lk.wildberries │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://tp66.ru/search/?page=1&fuelRateTo │ 3 │ +│ http://e96.ru/real-estate │ 3 │ +│ http://my.kp.ru/albumfoto-1/pol-2 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://personal/atlants/7292&xdm_c │ 3 │ +│ http://povarenok.ru/files/eliteh.ru/perm.irr.ru/board,75.2013-07-09 │ 3 │ +│ http://brand=498&pvno │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://sp-mamrostovestory │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://amobil-nye-pliazhnaia │ 3 │ +│ http://smeshariki.ru/?win=82&stat=141882,373;IC,2552f48 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://love.ru/?p=1#country=&op_seo_entry=-1&target │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://irr.ru/washek-s-printom │ 3 │ +│ http://irr.ru/index.php?showalbum/login-kupaljinik-chere │ 3 │ +│ http://smeshariki.ru/goodavec/photo/6936325.html?id=223978/page=102 │ 3 │ +│ http://str_ob.html?1=1&choosO8gPJSs3M&where=all&filmId=mAyiC7y6M2mGV2GoA9hFoN3q... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberries.ru/item_no=2&evlg=VC,0;VL,205;IC,14;VL,757138/currency=RUR/h... │ 3 │ +│ http://msuzie │ 3 │ +│ http://smeshariki.ru/real │ 3 │ +│ http://kinopoisk.ru/search │ 3 │ +│ http://afisha.yandex.php?app=membered │ 3 │ +│ http://afisha.yandex.php?ELEMENT_ID │ 3 │ +│ http://afisha.yandex.ru/lesyach-hotels │ 3 │ +│ http://3dnews.ru/?p=12636464/5#f │ 3 │ +│ http://afisha.yandex.php?id=727285 │ 3 │ +│ http://afisha.yandex.ru%26bt%3D90%26nid%3D1216629 │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://kaluzha-na-NovletedAutoSearch=0 │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic=79799398/?_h=search.htm... │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory_id=577&search/ab_district/date_id=2271][from... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://love.ru/?p=17057 │ 3 │ +│ http://love.ru/ru/irk/event=little&cated_country=-192.html?1=1&cid │ 3 │ +│ http://product_brand=RAINBOW&op_cated_content/search/keup/en-ru │ 3 │ +│ http://love.ru/recipes/indows │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostavia.travel.ru/s... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://kinopoisk.ru/sessulyanovka.ru/photosessid=3205&bt │ 3 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD0\xB2\... │ 3 │ +│ http://li.ru/filmId=XpzlPj8P8gE&where=all&text=\xD1\x81\xD0\xBA\xD0\xB0\xD1\x87... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://you_hashkaf.ua/search │ 3 │ +│ http://auto_repairs=0&confiscategoriya │ 3 │ +│ http://wildberries.ru/GameMain │ 3 │ +│ http://povaria/chak_naytimes.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://afisha.yandex.ru/comment/search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 3 │ +│ http://afisha.yandex.ru%2Fobuv-sapozhkivka=23&price │ 3 │ +│ http://afisha.yandex.ru/hotel-agen-Goluboj-9730 │ 3 │ +│ http://notebooking pressa │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://smeshariki.ru/GameMain.aspx#location │ 3 │ +│ http://soft.oszone.ru │ 3 │ +│ http://pogoda.yandex.ru/real-estate │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://auto_repairs=0&po_yers=0&price.ru/\xD0\xB6\xD0\xB5\xD0\xBB\xD0\xB5\xD0\x... │ 3 │ +│ http://wildberries.ru/basket&ch │ 3 │ +│ http://state/room=94720-recept-Salat-iz-glasya1lesyat │ 3 │ +│ http://video_dvd/ratesTypeSearch?text=\xD1\x87\xD0\xB5\xD0\xBB\xD0\xBE\xD0\xB2\... │ 3 │ +│ http://auto_id=0&engineVolumeFrom │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://pogoda.yandex.ru/vlas-moskovskaya │ 3 │ +│ http://video.yandex.ru/personal/offeebe34c7e12944&op_product │ 3 │ +│ http://trashbox.ru/book │ 3 │ +│ http://slovari.yandex.ru │ 3 │ +│ http://kommersantamina │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://afishers/story │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ https://slovarenok │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://guid=6&pw=2&pv=0&with_video.yandex.ru │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/photo/narod.irr.ru/katering=1&pr=569&s_yers │ 3 │ +│ http://audio_video.yandex.ru/mosday.html?item=4#photo446962 │ 3 │ +│ http://auto_ford Mix).mp3.ucoz.ru/v1430497.html%3Fhtml │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://alpari.yandex.ru/saint-petersburg.irr.ru/cars/page3 │ 3 │ +│ http://video.yandex.ru/extra │ 3 │ +│ http://love.ru/ru/irk/event=little&category_id=731-643736&mode=1 │ 3 │ +│ http://dom.net/provoe-pervouralnaya/ChildGluZ19oZXJlci1kYXRpb25zPU4mbj0zJmlkPTM... │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com.ua/kiev/detail.ru/auth=1..640... │ 3 │ +│ http://v102.ru/investate/apartment/?id=137336IseNhcbx3J85GkHSnzgnsPdZUU&where=a... │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://kinopoisk.ru/registernet Explorer&aV=5.0 (Windows NT 5.1; ru-ru&cE=true&... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://video.yandex.ru%2Fkategory_id=9759527418 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberring │ 3 │ +│ http://video │ 3 │ +│ http://radiorecord │ 3 │ +│ http://balcon_caddy Club relove │ 3 │ +│ http://afisha.yandex.php?partments │ 3 │ +│ http://omsk/evential/housession%3D240%26rleurl%3D//ad.adriver.ru/marshavskaya-r... │ 3 │ +│ http://en.lyrsenses/zamba_zabor_polnitsa-s.narod.irr.ru/bank/otzyvy/12031%2F%23... │ 3 │ +│ http://auto_id=0&color=0&confiscategory_id=3205&bt=7&bn=1&bc=3&ct=1&prr=http:%2... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://state_shariki │ 3 │ +│ http://loveplanet.ru/Bezli-all │ 3 │ +│ http://smeshariki.ru/cgi-bin/click.cgi%3Fsid%3D0%26pz │ 3 │ +│ http://video.yandex.ru/real-estate/out-of-town/house.ru&pvid=1&distreet_legkovo... │ 3 │ +│ http://wildberries.ru/cgi-bin/click.cgi%3Fsize │ 3 │ +│ http://bdsmpeople.ru/show/39932/Itemid,40.0.html_params%3DfsSaHR0cDovL2pzLnNtaT... │ 3 │ +│ http://kinopoisk.ru/spb.pulscen.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://smeshariki.ru/furniture.html5 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.ru/manga.ru/?rtext=\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB1\xD0\xB... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://saint-peter │ 3 │ +│ http://lazarevskoe │ 3 │ +│ http://whoyougle.com/iframe/iframe_right.ru/spb │ 3 │ +│ http:%2F%2Fwww.bonprix.ru/imagesize │ 3 │ +│ http://video.yandex.ru/realty/search/main.aspx?sort=popular │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_product_brand=4200&lo=h... │ 3 │ +│ http://ssl.hurra.com/iframe-owa │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&film/67... │ 3 │ +│ http://klubnich/zrh/ │ 3 │ +│ http://un1.adriver.ru/page=30138117749516%252f110916%252fmedicinema/movie_ross ... │ 3 │ +│ http://wildberries.ru/comment/search │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://cxem.net/324487194836848 │ 3 │ +│ http://saint-petersburg-gorod/goodal │ 3 │ +│ http://sunmar.ru/cart&ch=utf-8&sF=11,7,700&aN=Opera&aV=9.80 (Windows │ 3 │ +│ http://myloveplanet.ru/passenger/kitched_country_id=4312&input │ 3 │ +│ http://wildberries.ru/comme%2F2.12.388 Version/1552/page │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://pogoda.yandex.ua/telefon_shtukaturkey │ 3 │ +│ http://bdsmpeople.ru/index.by/ru/page=0&confiscategory_id │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://gotovim-doma.ru/personal/commersant.ru/image=19&pvno=2&engineVolum │ 3 │ +│ http://krasnodar.irr.ru/yaransferapid │ 3 │ +│ http://jobs-education │ 3 │ +│ http://irr.ru/index.php?showalbum/logizer8/num-1/refremost │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://afisha.yandex.ru/sell/resident │ 3 │ +│ http://afisha.yandex.php?p=176d43f96ef32d5bc1272 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://auto_id=0&color=0&confiscategoriya%2Fzhienskaya-advert25593 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://forum/topics/ingradskazka-lookoformalities/poetry/events/?date&csrf-8200... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://radioscannerica/film/47018.html?1=1&cid=691390&pvno │ 3 │ +│ http://video=0&input_with_video.yandex.ru/page/10/women.aspx │ 3 │ +│ http://pogoda.yandex.ru/real-estate/apartments/73151 │ 3 │ +│ http://video_dvd/suppoll/dleead6718.php?SECTION │ 3 │ +│ http://msk/platia-nashing/vanny.diary.ru/otdam_daily │ 3 │ +│ http://direct.yandex.ru%2F&sr │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=&is... │ 3 │ +│ http://irr.ru/index.php?showalbum/login-do-500-kv-m-Maya │ 3 │ +│ http://kinopoisk.ru/real-estate=2013-07-2089241607/photo=0&with_exchangeType │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/used/KIA-Cee-d... │ 3 │ +│ http://tyva-5/country=-1&washestvo/den_sidentialAmount │ 3 │ +│ http://rukodel=0&sort=newly&trafkey=27065/2/child.aspx#location │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://maps#ru_5_ru_1_ru_ru_ru_202_ru_1_ru_ru_ru_ru_2_ru_1743.html?oscsid=36303... │ 3 │ +│ http://zapchastny_fashing_mashes/index.ru │ 3 │ +│ http://kinopoisk.ru/cgi-bin/click.cgi%3Fsid%3D1216 │ 3 │ +│ http://mylove.ru/zoom.php?GID=2&IsOrder │ 3 │ +│ http://smeshariki.ru/news/2013/peshnye-udivlekanka.ru/l_03_00/bodreamfood.ua │ 3 │ +│ http://arma/frl-4/travel.ru/moscow/details │ 3 │ +│ http://rsdn.ru/info_all=yes&razdumy-i-trikshop/search&_h_page/1719920 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://chehod/zvenia8312&input_who2=1&input_age1=35&aN=Netscape │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory │ 3 │ +│ http://myloveplanet.ru/bad_by_sidential/nizhnieiewva88 │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/procoolonelopitered/ministrict/3d-probeg-340-... │ 3 │ +│ http://ssl.hurra.com/iframe/iframe-owa.html%26custom%3D%26custom │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://avtoto.ashx/1001087496197797217530729; Media Centernet_mastersburg │ 3 │ +│ http://zagranimals-planet.ru/user/31059&Module │ 3 │ +│ http://kuharka=48&modeloveplanet │ 3 │ +│ http://whoyougle.ru/basket&ch=utf-8&sF=11,7,7,7,700 │ 3 │ +│ http://sendflower │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://bdsmpeople.ru/Web/price │ 3 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 3 │ +│ http://afisha.yandex.ua/index.ru/recipe │ 3 │ +│ http://votpusk.ru/ │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://auto_operey-v-v-meha.ru/catalog/public │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://smeshariki.ru/index.ru/main.pl?cmd=show/47555 │ 3 │ +│ http://afisha.mail.ru/stars/page │ 3 │ +│ http://irr.ru/6323%26bn%3D27888895,96772&op_page47 │ 3 │ +│ http://video.yandex.ru%2F%2Fwww.bonprix │ 3 │ +│ http://myfashihtzu.html?1=1&cid=65625f313230303&po_yers=2013/07 │ 3 │ +│ http://forum/topnews/222968695,910112_1164074834-908745 │ 3 │ +│ http://video=0&is_hot=0&che_simeis │ 3 │ +│ http://smeshariki.ru/chipinfo │ 3 │ +│ http://myloveplants_list-obl.irr.ru%2Fobuv-zhienskaia-modiezhda │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://pogoda.turizm.ru/communit=0&vip=0&order_by=2 │ 3 │ +│ http://kurort/SP1399&op │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://stories.ru/art/MACKLEMORE │ 3 │ +│ http://irr.htm?from]=&int[852][to]=10&lastdiscussins/?keyworld │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountry │ 3 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 3 │ +│ http://afisha.yandex.php?w=3160/transports │ 3 │ +│ http://afisha.yandex.php?link=114735200&brand=23368 │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://wildberries.ru/page=0&vip │ 3 │ +│ http://smeshariki.ru/Web/price │ 3 │ +│ http://nizhnieie-bielie-bieriends&fb_source-temno │ 3 │ +│ http://forum/topnews/2229362067528195&op_categoriya │ 3 │ +│ http:%2F%2Fmuzhchine/ru-g-Chelya_v_tsentyabrskii │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://zarplata.ru/?p=1290&op_product_price=990348531&schoosOSRquM8gE&where=all... │ 3 │ +│ http://radiorecord.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://guid=6&pw=2&pv=0&po_yers=0&with_video │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&text=\x... │ 3 │ +│ http://ur.hh.ru/file/news/2013 \xD0\xB3\xD0\xBE\xD0\xB4\xD0\xB0 │ 3 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 │ 3 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&top │ 3 │ +│ http://my.alpari.ru/filmId=yJg89hqV8gE&where=all&film/530/?fromCityCodeForcentr... │ 3 │ +│ http://gorbus.aspx#localiformalitic │ 3 │ +│ http://ej.ru/muss/roll_to_audi/mode=replies │ 3 │ +│ http://pogoda.yandex.php?t=14555667679/?PAGEN_3=5&s_yers=0&numphoto/62232/7#f │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD1\x81\... │ 2 │ +│ http://pogoda.yandex.ru&xdm_e=http://name=\xD0\x91\xD0\xB0\xD0\xBB\xD0\xB5\xD1\... │ 2 │ +│ http://auto_id=3159&input_age2 │ 2 │ +│ http://pogoda.yandex.ru/chat/ivan │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://sslow_13500000%26rnd%3D278888 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://moscow/detail/Torgovljatory/storii_efferanslyatting │ 2 │ +│ http://kinopoisk │ 2 │ +│ http://video=0&input_state │ 2 │ +│ http://poisk.ru/news/articles │ 2 │ +│ http://forum.php?t=420 │ 2 │ +│ http://mysw.info/node/21544 │ 2 │ +│ http://smeshariki.ru/tashkinsk │ 2 │ +│ http://smeshariki.ru/product&op │ 2 │ +│ http://board=11.ua.150.html%3Fhtml │ 2 │ +│ http://afisha.mail.ru/cheva.ru/reportby │ 2 │ +│ http://pogoda.yandex.ru/jobinmoscow │ 2 │ +│ https://diary/2013-07-05/101090/currency │ 2 │ +│ http://slovarenok.ru/chapochki │ 2 │ +│ http://kinopoisk.ru/saint │ 2 │ +│ http://krasnyj-chastory │ 2 │ +│ http://pogoda.yandex.ru/real │ 2 │ +│ http://3dnews.ru/msk/events │ 2 │ +│ http://yartb.html?city=55&TopicID=2&IsOrderedProduct │ 2 │ +│ http://yaroslavl.irr │ 2 │ +│ http://pogoda.yandex.php?showalbum │ 2 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 2 │ +│ http://wildberries.ru/editem_no=100¤cy=1#country=&op_proizvodskaya-obuv-z... │ 2 │ +│ http://wildberries.ru/filmId=4920/room=1&lang=all&filmId=DnGbyVQVUXI&wheretomug... │ 2 │ +│ http://wildberrin/foton │ 2 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 2 │ +│ http://omsk.spb.ru/filmId=RUb3Hf2m0Cw&where=all&text │ 2 │ +│ http://afisha.yandex.php?s=4d450&pid │ 2 │ +│ http://afisha.yandex.php?city=418&view │ 2 │ +│ http://afisha.yandex.ru/?trafkey=54073799 │ 2 │ +│ http://kaluga/?ext=\xD1\x80\xD0\xB5\xD0\xB9 \xD0\xBD\xD0\xB0 \xD0\xB1\xD1\x80\x... │ 2 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 2 │ +│ http://news/398261_enl.jpg-1 │ 2 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 2 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 2 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://pogoda.yandex.ru/images/0001216629/0 │ 2 │ +│ http://rlsnet.ru/nogin.html5/v12 │ 2 │ +│ http://guid=6&pw=2&pv=0&price=690&s_yers=1916 │ 2 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=2furii10.html?city=0&hide │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://ur.hh.ru/page=10&can_be_checked_auto_region=1&rm=1&lang=all&film/18212.1... │ 2 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.041 user 0.380000 sys 0.004000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +┌────────────────┬────────────────┬─────────────┬────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ TraficSourceID │ SearchEngineID │ AdvEngineID │ src │ dst │ pageviews │ +├────────────────┼────────────────┼─────────────┼────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33069 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 24703 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 15817 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 14233 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 │ 6549 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 │ 5257 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 5257 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 3547 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login │ 3538 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik │ 3371 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php │ 3333 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 3309 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 2923 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 2616 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 2441 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php │ 2418 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 2390 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari │ 2367 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 2349 │ +│ 1 │ 0 │ 0 │ https://google.com.ua/url?sa=t&rct │ http://komme%2F27.0.1453.116 │ 2228 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 1920 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://komme%2F27.0.1453.116 │ 1679 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ekburg.irr.ru%2Fpuloveplanet │ 1340 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://aliningrad │ 1270 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1254 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1213 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1193 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1186 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1142 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F27.0.1453.116 │ 1007 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 954 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://aliningrad │ 859 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login │ 821 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 791 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 777 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 757 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 722 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://video.yandex.php │ 702 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 691 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/obucheyelants │ 684 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 632 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 593 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 577 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://smeshariki.ru/obucheyelants │ 566 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.php │ 452 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 445 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBA\xD0\xBE\xD0\xBD\xD1\x82\xD1\x80\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 422 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 421 │ +│ 0 │ 0 │ 0 │ │ http://obninsk/detail │ 407 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 386 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug.ru │ http://irr.ru/index.php │ 374 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru/index │ 360 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 348 │ +│ 2 │ 0 │ 13 │ │ http://komme%2F27.0.1453.116 │ 347 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-2011/43597 │ 293 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 293 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6HS │ 282 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 268 │ +│ 3 │ 72 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 267 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 259 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 257 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari │ 256 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 │ 241 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login │ 237 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 │ 236 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/28435&lr=157 │ http://komme%2F27.0.1453.116 │ 233 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/ru/photo/6936313555&text=\xD1\x85\xD0\xBA \xD0\xBB\xD0\xBE\xD... │ http://komme%2F27.0.1453.116 │ 224 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php │ 223 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cat/dushkirillovyj │ http://komme%2F27.0.1453.116 │ 222 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=359&op_page2/... │ 218 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kriminally-bezhevsk │ 217 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0 │ 212 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 207 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 202 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 199 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://ekburg.irr.ru%2Fpuloveplanet │ 199 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 198 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 197 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 195 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/414526863.xlsx │ 191 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CDMQFjAJ │ http://irr.ru/index.php?showalbum/login-kiriskaya-obl.irr.ru/index.ru/GameMain.... │ 190 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=0&with_photo.ashx/101/4/?cat=6257271 │ 188 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=partments-sale/search?text=\xD1\x81\xD0... │ 187 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://afisha.yandex.ru/index │ 183 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://ekburg.irr.ru%2Fpuloveplanet │ 171 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 168 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 164 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 163 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://ekburg.irr.ru%2Fpuloveplanet │ 160 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 160 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/life.ru/cars/misc/travel.ru/?trafkey=058143&p... │ 155 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 │ 154 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=577&oki=1&oby=&op_s... │ 152 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://wildberrior/uphold │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6HS │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 149 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 146 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustic/meterburg │ 144 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 144 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 144 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E │ 141 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 140 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 136 │ +│ 1 │ 0 │ 0 │ http://kombardighantnie │ http://komme%2F27.0.1453.116 │ 136 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login │ 135 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kysjacevtika │ 132 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://komme%2F27.0.1453.116 Safari │ 124 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 121 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category/stroy/dachines... │ 114 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/?state │ http://komme%2F27.0.1453.116 │ 113 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/GameMain │ http://komme%2F27.0.1453.116 │ 113 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 111 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login │ 110 │ +│ 3 │ 85 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 110 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kardigan │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 107 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosoftwarenok.ru/projects/zhbi.po... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 105 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268143.html?1=1&cid=577&o... │ 104 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 104 │ +│ 0 │ 0 │ 0 │ │ http://tvidi.ru/photo=0&confiscategory_id=0&engineVolumeFrom=&fuelRateFrom=type... │ 103 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 102 │ +│ 3 │ 14 │ 0 │ │ http://komme%2F27.0.1453.116 │ 102 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 100 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 98 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://video.yandex.php │ 97 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 96 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.21150895 │ 96 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?sort=price │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 95 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login │ 95 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.12.388 │ 93 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 93 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 92 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberrior/uphold │ 92 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 91 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-tanks/search=1&ady=62&modeloveplanet.ru │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 90 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.145332.15&he=10&category_id=2740387993 │ 89 │ +│ 1 │ 0 │ 0 │ http://in-the-weightEnd=2351&numphoto=&isExclusiver.ru/alertljus │ http://komme%2F27.0.1453.116 │ 88 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fprodazha_Italja_unit=1&av=1&nm=1&lang=ru │ http://irr.ru/index.ru/show/414526863.xlsx │ 87 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 86 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb1.html?item_no=386703/?bundle=7172&msid=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 86 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 │ 85 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 84 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733582852/ │ 84 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupit/action │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 82 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 82 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?bodystyle │ http://komme%2F27.0.1453.116 │ 81 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F22.14&he=768486 │ 81 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusk.ru/ru/lookaginitial/Prodayu-Dach... │ 80 │ +│ 3 │ 4 │ 0 │ │ http://komme%2F27.0.1453.116 │ 80 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 79 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://aliningrad │ 78 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 78 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login │ 76 │ +│ 1 │ 0 │ 0 │ https://go.1ps.ru/show&showforum │ http://komme%2F27.0.1453.116 │ 76 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandex.ru │ http://komme%2F27.0.1453.116 │ 76 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26221/detail.ru/v1496366&... │ 75 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php │ 75 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 74 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%2F&sr=http://bonprix.ru... │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len80/page/product │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filtr/all/perm.pulscen... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 73 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 73 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F1.7.1364.172 │ 72 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://diary.ru/forum/intries │ 72 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/show/414526863_112 │ 72 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2618561&pp=1059&op_produc... │ 72 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://video.yandex.php │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 71 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 71 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari │ 71 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://aliningrad │ 71 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=product_id=42&Selection.chelov.ru/searc... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/yandsearch?te... │ http://irr.ru/index.php │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/server=sc.chel.ru/main... │ http://irr.ru/index.php │ 70 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification/?year=\xD0\xB1\... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2791954~43.87725656132&op... │ 69 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://komme%2F27.0.1453.116 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/produkty/bleacs/udilis... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 69 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&wi=1366&br... │ 68 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 67 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731&CgID=124jc&where=all... │ 66 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/Yozh/Goodda │ http://komme%2F27.0.1453.116 │ 66 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2725215195&ti=\xD0\x9F\xD... │ 66 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://ekburg.irr.ru%2Fpuloveplanet │ 65 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru/index │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 64 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://afisha.yandex.ru/index │ 64 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 63 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nmg.com%2F4.0 Safari%26clients-sale/search&e... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 63 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 62 │ +│ 2 │ 13 │ 13 │ │ http://komme%2F27.0.1453.116 │ 62 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login │ 62 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://ekburg.irr.ru%2Fpuloveplanet │ 61 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 61 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 61 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26092.html?s_text=\x5C\x5... │ 59 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/thenon-houses/public/g... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27755f32316.30; .NET CLR ... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742/details/?cauth=0&dam... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fautoad/kniga.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26004/?_h=galle/\xD0\xBF\... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert27930555&sob=1&p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2692.html%3Fhtml?period=3... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/world/photo31469:Album... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=leting "HalUXI&where=\xD0\x9F\xD0\xB5\xD1\x8... │ http://irr.ru/index.php?showalbum/lofiver.ru/articles/86121%26uid%3D139750%26ad... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27000,224648804-recept-so... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/koshka.com/ig/iframe-o... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/realty/suntime-5/extre... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory=cinema.perm.p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742357/detskii_gosts.xml... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742304][from]=&int[14670... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694336/photo/suzannason/... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Forum25/top... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268320995,968650f45491882... │ 57 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupit/action │ 57 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1375605&ga... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://video.yandex.php │ 56 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga/choice/... │ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_product_... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?showtopic,5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26017/quarius_Moscow/cavi... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2726125413975d77cf&search... │ 55 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 54 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266848223/review_type=pro... │ 53 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 53 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26989%26bt%3Dad.adriver.r... │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/album/login-1800002&pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 52 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0 │ 51 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2698172,93932353064614618... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605085268a9c4d61-9862.49... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19&numphoto/login=A-CL-MS-36575c72937][to]=&int[12822304 │ http://irr.ru/index.ru/widgetchrome%2F&ti=no&dom_v_bordovye-printime.ru │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/investate/comple/make/?page5/&docid=jlMNIrXw... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 50 │ +│ 0 │ 0 │ 0 │ │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 50 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F11.7.1364 │ 50 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 50 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26051.htBeg=6&NightRegist... │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xBE\xD1\x81\xD0\xB8\xD0\xB1... │ 49 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 49 │ +│ 5 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 49 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?group=days=3&text=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27410/photo-2.xhtml&serve... │ 48 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandsearch │ http://komme%2F27.0.1453.116 │ 48 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 48 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusty-i-vkont.at.ua/search=0&userId=0... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266128182&op_seo_entry/de... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?sort=&br... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/intrumen │ 46 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://afisha.yandex.ru/index │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumanegenre=33155?analog/kitchen_mini... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik │ 46 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login%2Flick.g.doubleclick.diary.ru/car/kw/3061/us... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734.html_params%3Dfh_loc... │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://afisha.yandex.ru/index │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/GameMain.p1Yo4A │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ua/searchads/jo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605906/frl-2/sportal.ru/... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fshow/lpp/cre.ru/pers... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.asp?search&ev... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logize.ru/msk/events_liver.ru/russert-plies.r... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26099486633033&countpage=... │ 44 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 43 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://sslow_135000008&position=search │ 43 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischet-solik/odezhda-plos... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert277553/38021/66936575776/... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271050&with_photo.kurortm... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 43 │ +│ 1 │ 0 │ 0 │ http://forums/liii-kuler S22oHgBJTngegotavgorod55.ru/filtr[2]=42 │ http://komme%2F27.0.1453.116 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-folders/?end=9a08488... │ http://irr.ru/index.php?showalbum/litamak.irr.ru/catalog/8570/travel.ru/cgi-bin... │ 41 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 41 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 41 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/0001216629/#top_by │ 41 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26040931&s_yers=0&with_vi... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://ekburg.irr.ru%2Fpuloveplanet │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.137508&s_yers=200... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://aliningrad │ 40 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logito8ergo_6470/page_type_id=20872/0/001:12:... │ 40 │ +│ 0 │ 0 │ 0 │ │ http://afisha.mail.ru/dmitrij │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/readar-nashi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27924563724&key=46960/med... │ 40 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://lib.ru/exp?sid=3205&bt=7&bn │ 40 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 39 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credit │ http://komme%2F27.0.1453.116 │ 38 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=8570/page=5&s_yers=2006 │ 38 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2679/detail/5482,935033/2... │ 38 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 38 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login │ 37 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dnevnoy-kv-Samara.irr.ru/searchAutos&marka=4... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 37 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://komme%2F27.0.1453.116 │ 37 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=theating&page=... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?group │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2784389/room=39695,966681... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/forum/topicID=269&stat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/votkim-rukav-i-kova-ul-adve... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filmId=xFX1UbTNJjxe4yF... │ http://irr.ru/index.php?showalbum/login.asp?razdel7/test/matched=115909d9_dsc07... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wolf-club478561/OPEL | \xD0\xB0\xD0\xB2\xD1\... │ http://irr.ru/index.php?showalbum/login-marka=13&city&custom=0&damages/0001216 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27553&s_yers=0&po_yers/46... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert275226607660?design=6efxq... │ 36 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=show=&fgroup-tab-mara.irinables/yearT... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278171&size=52094&op_seo_... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27330528/photo/6223799%26... │ 36 │ +│ 5 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 36 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36&he │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://smeshariki.ru/obucheyelants │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=post_neu%3D22%26pz%3D0%26rleurl%3D%26xp... │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 35 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/8569 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vip.ru/book.com/photo/7086/page=0&state=mont... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/index.ru/katego... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-cukickdrops_bak_yant4tlGtZgy3BQ&bvm=bv.49478... │ http://irr.ru/index.php?showalbum/login-501-98552&op_uid=1060948/6#f │ 35 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (Windows │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19&m_staraya-obl │ http://irr.ru/index.ru/show/414526863_112 │ 34 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.12.388 │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 34 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_uid=1... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/promo=C-Tease/rent/dat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 34 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/list │ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 34 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/directadvert/kavanga_728x90.html │ http://komme%2F27.0.1453.116 │ 34 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshops.xml?typ │ http://komme%2F27.0.1453.116 │ 33 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?cPath=default.ru/yandex.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33 │ +│ 1 │ 0 │ 0 │ http://auto.ria.ua/\xD0\x9A\xD0\xBB\xD0\xB8\xD0\xBC\xD0\xB0\xD1\x82\xD1\x8C\xD1... │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 33 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://video.yandex.php │ 33 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 33 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser │ 33 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265748ba3f755671_1162684&... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertif?sle=85000 \xD0\xB4\xD0... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/pub │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364 │ 32 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zxcvbnm1990&search/jobinmoscow.ru/yandex.by/... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements-obschaya │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fproduct/foto-4/login... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&op_category_id=1174]... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniturers_id=575386110 │ http://irr.ru/index.php?showalbum/login.exit/rem/php/board/10_kruizer_8267049&o... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiepochto_id=93231238][to... │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://afisha.yandex.ru/index │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ssl.hurra.com/iframe │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischuk_Kerasivye-klavik/?... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/jobs-education/m_acces... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26791e3a7c543c9bf9ef5c0-9... │ 31 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt │ http://komme%2F27.0.1453.116 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertificia/?letteo_985428161/... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_api.php?cid=41389/rooms/perm.pulscen.ru/sear... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 30 │ +│ 1 │ 0 │ 0 │ http://domchelov.html&lr=55&text=\xD0\xB4\xD1\x80\xD1\x83\xD0\xB3\xD0\xB8\xD0\x... │ http://komme%2F27.0.1453.116 │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoryID=12452929587/... │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 30 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 30 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268630533&site_ot=&price_... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-k608i.trashbox.ru/cars/page5/&docid=577&lr=2... │ http://irr.ru/index.php?showalbum/logii_58247.php?forum.borovichy77/page5 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2716/~3/150160947694,9745... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/products/?category_id=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2696374/#page/tab=com_avt... │ 30 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/topic │ 30 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.14&he=768&wi=1920 │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26979553039353936694&ch=u... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605446518%2F&sr=http://e... │ 30 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://smeshariki.ru/obucheyelants │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-carava/fotok-8-steklove.ru │ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26928142&op_products/view... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kupibatikov/?recrete/personal/klimat.ru/work... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/wedditeli_foto-2/__48/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertifications[0][150]=60&inp... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_countpage/1 │ 29 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x9A\xD0\xBE\xD1\x80\xD0\xBE\xD1\... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/click.net/paged=696&lo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274229696.0 (Windows)&bL=... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-14132&with_photo=1&srtime-zone.net/catalog/t... │ http://irr.ru/index.php?showalbum/login-sierra%2Fdlia-zhienskaia-moda-zhiensmed │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 29 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2664952&xdm_p=1#country=-... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704.html%3Fhtml5/v12/?fr... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734/fotographic_2017666&... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategoriya/zhienskaya-... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9649.html%3... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/small_mercial-shoppicc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27350350394&ch=UTF-8&sF=1... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_seo_entr... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-baza/gadge... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27425.3120%26ntype_id=2&r... │ 28 │ +│ 1 │ 0 │ 0 │ https://directions[0][1541769377921968 │ http://komme%2F1.7.1364.172 │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13733097&op_categ... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert272291684/hasimage=0&view... │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269500469412216388/detail... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/mann japanel/?text=\xD1\x81\xD0\xBC\xD0... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-my-sovies/bebybum.homestion bonprix.ru/... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikarbox=2&tz=9b81998&po_y... │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-176-kakaya-obl.irr.ru/search?lr=191&ei=N6rrg... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?lang=all&fi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\xA4\... │ 28 │ +│ 3 │ 95 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/anime-2/#album/l... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-eve-nn.ru/cars/passenger/\xD0\x92\xD0\x90\xD... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274236&pv=15&prr=8&sid=35... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/41452626u1zIq0SGLXCI │ 28 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic/8939858-59929477/detailshop │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F22.14&he=768486 │ 28 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://ekburg.irr.ru/#lingvo │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678/page=2&marka=84&mode... │ 27 │ +│ 3 │ 2 │ 0 │ │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/search?cl4url=http://yandex.ru/online... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27013.ya.ru/sportalznakom... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert24061.jpg.html%3Fhtml?1=1... │ 27 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031343-sh-898675/sort=pri... │ http://irr.ru/index.php?showalbum/login-5158&jenre/slyudya_metroman.ru/GameMain... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19195/offset=101&district=&city&with_photo=¤cy │ http://irr.ru/img/catalog/53485785/topic/8939850.php?page=3&marka=84&mm │ 27 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 27 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 27 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fhit_list.html?s... │ http://irr.ru/index.php?showalbum/login-irake-myservierk-supierts%2F&ti=\xD0\x9... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-oleginnesujeli-i-centum=etarget=search?clid=... │ http://irr.ru/index.php?showalbum/login-kupe.html_params%3Drhost%3Dad.adriver.r... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27928092_price=\xD0\xBC\x... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/mazda-dievochnye_avari... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-19.xhtml?city_to_one=All&film]/on/orders/810... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/1.19.mobile_photo=6001... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27630/?item_id=0&bodystyl... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ 1 │ 0 │ 0 │ http://bonprix_ru_11559&lr=12&usln │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lizova_ii_1112_1150&option[price_do=300... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E&wher... │ 26 │ +│ 1 │ 0 │ 0 │ http://yandex.ua/?target=search/tab=user │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detall/seconomicsmovinki │ http://komme%2F27.0.1453.116 │ 26 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 26 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://obninsk/detail │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/loginsk.irr.ru%2Fkategory_id=9204471-650/?_h=... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login-jjjekrju-s-pring=1&price[price=\xD0\xBC... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification.ru/messa.ru/rea... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lejandsearch?text=\xD1\x82\xD0\xB8\xD1\x85\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert21124631/?Search.php │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 26 │ +│ -1 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_category... │ 26 │ +│ 3 │ 197 │ 0 │ │ http://komme%2F27.0.1453.116 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?messa.ru/worlds/page2/7277932582&text=\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 26 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-kupe-20010120652838799.html?n=7148.html... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemey-volvom80Cw&where=a... │ 26 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=607&state=4... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.22 (KHTML, like Gecko) │ 25 │ +│ 1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 25 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/people.ru/cars/passets... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731/?city=0&pvno=2&evlg=... │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vivarki/redki_sdelaet-law.ru/produkty/kartgo... │ http://irr.ru/index.php?showalbum/login=driff/en-ru/?p=2#messages/00001216629 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 25 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert264314953); ru) AppleWebK... │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.html&ei=GcXrUYe8F2DAU-RbuRlLMczoJ--5uDCx8 │ http://irr.ru/index.php?showalbum/login-132/#images/0000.h95/\xD1\x82\xD1\x8E\x... │ 25 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://obninsk/detail │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search?text=myaccountry │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguard-payments-sale/se... │ http://irr.ru/index.php?showalbum/login-88i8LaDyEkCVv6-DhRfEDcw==&action │ 25 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/yandex.ru/?f... │ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.ru/film/46351/frl-2/bage │ 25 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605838.html5/v12/?from=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-link=1147373-1&p=1&p=2&text=\xD0\xBC\xD0\xBE... │ http://irr.ru/index.php?showalbum/logisterlingvo/#! │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741559&t=5204/make=Chrys... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694589/detail/555-javata... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=shops.html?id=1&body_type=\xD0\xBF\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781472265&op_seo_entry=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626rleurl%3D//ad.adriver... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685/price_ot=&price=\xD0... │ 24 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://diary.ru/forum/intries │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26685857947301_Zoryatiya/... │ 24 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-117031&op_category&op_seo_entry=&op_uid │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671291&fridgets/2012&pri... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27399992.php/board,13.0) ... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-annative-expressageId=0oVXx21hUXI&where=all&... │ http://irr.ru/index.php?showalbum/login-rybnovlevojj_mamountry=-1&type%3D0 │ 24 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://video.yandex.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguar.ru/page4/?emain.a... │ http://irr.ru/index.php?showalbum/login=ogabass.ru/filmId=9WOqzzitive&view │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo/7... │ http://irr.ru/index.php?showalbum/login-kupit-plitka-s-korsiety/art/151/n4p/160... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/intrumen │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kupalnaya_elit=&id=3&clid=9403&lr=1913849 │ http://irr.ru/index.php?showalbum/login-gallebia_zhurnalCall D.R.E.mp3ex.net/ph... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lolacake/tatyaka.html?1=1&cid=577&oki=1 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinglish.rus-l7-p70505-1... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/yandsearch?lr=1... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-yvaken/topic=7702.jpg.html?1=1&cid=577&... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-547552/1/?sma=RAINBOW&op_uid=fdd1b9d2721728&... │ http://irr.ru/index.php?showalbum/login-kapusta-advertika/search/room=1&damage=... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=1&bc=3&ct=1&pr │ 23 │ +│ 1 │ 0 │ 0 │ http://auto_volkswagency=1&text │ http://komme%2F27.0.1453.116 │ 23 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgarials/commend/searchvage-2.html&dt=13734... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-tuniki_510... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263090024189-528619c2077/... │ 23 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/ru/index.ru%26bid │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333572620201709/page/10... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news/radio&clid=198555... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26939.html?page/3/#count=... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2740974%26pz%3D0%26ar_sli... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/kategory_id=5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 23 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/resultatya9176da22f1a521a5853.html&... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26600721376439322%26pz%3D... │ 23 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 23 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga_728x90.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://afisha.yandex.ru │ 22 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemennoke0070553995f27d6... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2697574697.html_param=0&u... │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-105vr/ │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=search.tutung/s... │ 22 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/wheel.ceratornaya_solnechka │ http://komme%2F27.0.1453.116 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2091&local=1&TypeSearch?mail.ru/yandsearch&c... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26058&nnum=s4746835895&op... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-10760b31b65633eZateq eb806e887d9f15ccf593280... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-the-ili-tempera-minsk.irr.ru/produkty/bluzki... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739693071/pomer... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodny │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2649.html?pg=menu_29.jpg&... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/v1465][from]=&int[157281 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267830840994,95688781470%... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-business/sale/ru/search?mail.ru/film%2Fbarna... │ http://irr.ru/index.php?showalbum/login-zakon_type=1&fuelRatesTypeSearch │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 22 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27200,55.7654.html_parat-... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&l... │ http://irr.ru/introlux_page5/2/page/Renaul.irr.ru/start=1500-rublic/gamemain/Tu... │ 22 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26601629][from=&fuelRateT... │ 22 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://ekburg.irr.ru%2Fpuloveplanet │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-natashkarola.irr.ru%2Fviewforum/MsgList.html... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26900/technics-technics-t... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liliate_id=24145602&with_phoney.yandex.ru;ya... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&city[7]=23239330794,25826044_Black_lis... │ 21 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?price_till beli.php?cx=015216684_36 │ http://komme%2F27.0.1453.116 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694,978825315f373400/det... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691_ru_17832523.html_par... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1) AppleWebKit%2F537 │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/world/photo/41/62b1dfa450/3/women-clother%26tms%3D%26ev_ltx%3D... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/basketshop.ru/yandsear... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/forum%2Fukhov/l... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265228.html?1=1&cid=577&o... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27025&Select[4][]=32598.h... │ 21 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://wildberrior/uphold │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/houses/passenge... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo44953.116.php?t=4... │ http://irr.ru/index.php?showalbum/login=ko&page=0&view.aspx?group_cod_1s=85&key... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/?from │ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-dance/index.ru/?favorite_off=1&encoding&hl=\... │ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logino-s-grigerator/page1=&input_age1 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/logii-bin/click.cgi%3Fsid%3D158195,97987231-9... │ 21 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cars/commeddesk.ru/google_s&12.5.746.59954.30 (KHTML, like/\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26737865/?page/12186/#/ec... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ramblery/pic/893985650697... │ http://smeshariki.ru/obucheyelants │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login.html?1=1&input_who1=2&input_who2=1&inpu... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/club.ru/anime-zone.ru/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dietsik.ru/razdel_id=111,7,700&w=728x90.html... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-brie... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929&from%3D%26custom=0&... │ 21 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2186/detail.aspx#location... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739353/details.... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kupalnik │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/9-0--navam-zhien... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741465][from]=&input_wit... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification%2F4.0; XBLWP7; ... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_uid=1147... │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login=uzpp2XnEw&bvm=bv.49784469][from │ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-Larki-i-korobeg-1124-95367/guestblowinp... │ 20 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26219&wi=1280&lo=http://w... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/yandex.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estatic.diary.ru/... │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=58&Selectronics-technics/k... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?er=2&text=\xD0\xBA\xD1\x83\xD0\xBF\xD0\xB8\... │ http://irr.ru/index.php?showalbum/login=razer2.moikrug.ru/recipes/shop.spb │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b706234651&op_uid=1&b... │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://video.yandex.php │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&price │ 20 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=NeIdeaCenternet Explorer&aV=5.0 │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertificirovka.ru/noteating-i... │ 20 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271161076&st=261&t=170977... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate=0&ReturnUr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313163307/?from]=&int[15... │ http://che.ru/produkty_zarubezhei-niepochekhly │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604370757034dea482207549... │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_api.php?id=7262882,9454472&op_product_n... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 20 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/cars │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26637&model=1705.html?1=1... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-karbox=0&top=0&category/1961/#images/00... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumilora481 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt=13733129/room │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-iulyanovskaya-obl/lyubvi?page=166733&eid=485... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27502/detail/?folders/#pa... │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://video.yandex.php │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626u1zIq0SGLXCI&where=al... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=240&u_cd=242035165&input_who2=1... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikulina.ru/real-estate/ou... │ 19 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?sort=popup/casualg... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news_id_72387877055/nu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/filmId=eRaB4pYAXCI │ http://komme%2F27.0.1453.116 │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBB\xD0\xB8\xD0\xBA\xD0\xBE\xD0\xBB\xD0\... │ http://irr.ru/index.php │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.ru/daily │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login=perfect.yandex.ru%2Fkategoriya%2F537 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260540718534/?dateOn=1&bo... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261921&pr=2441185112.html... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26672655462.html?city.ru/... │ 19 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostok.ru/cars │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27404895,95923.html%26cus... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/check=1&redir=1&lang=a... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671&Destige-all.html_par... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313437&pvno=2&evlg=VC,2;... │ http://irr.ru/index.php?showalbum/login-rizova.ru/look/timashirtsevm.cofe │ 19 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2638/?from=&raceTo=&power... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6HS │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.php?f=11340.1j1j2.12...5998-103358071/8/page... │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/00007/10/1320006&p... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27355f3132366336601&uuid=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166333/price[price_till]=&pri... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F_liveresum... │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto_repai... │ 19 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.15751 Safari%2F5.0 (Windows │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://smeshariki.ru/obucheyelants │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2675406828ac956028692581/... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://obninsk/detail │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26968794618/irr.ru/real-e... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2629&lr=65&rstr=-213&text=back=False&withmos... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2702483,631;IC,444041%2F&... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?search?text=\xD1\x80\xD1\x83\xD1\x81\xD0\xB... │ http://irr.ru/index.php?showalbum/login-inadlinny-sched_car=0&city=0&price=18&p... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26669E116-1-1550046560013... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=http://video.yandex.ru/real-estate │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274026181891&rn=52&brand=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/dlia-zhiensk... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&checked=0&state/room=10002-g-v-program... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-165&jenre]/49047&lr=163&text=samsung ga-moda... │ http://irr.ru/index.php?showalbum/login-2-komn-v-na-92f5-6ccf-fef3-013f9f926a21... │ 18 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ru/index │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5 │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?elmt=popular&where=all&film/723/num │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/restate/out-of-town-resh=1&cnt=1373... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2012-recept-Ragu-iz-2-x │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupaljinik-slidi/places/?PAGEN_1=2 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=deltec&type=citymo=&version%2F4.0 (Linu... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27534.30 (KHTML, like Gec... │ 18 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kochtinsk.pulscendinskiy-krasnodar.irr.ru │ http://irr.ru/index.php?showalbum/login-kuplyuskij/zapchastorii_state/out │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zzzi.ru/a-shop and blademas/?id=1&marka=0&ma... │ http://irr.ru/index.php?showalbum/login-2003prev=/search/index.ru/meteor.html%3... │ 18 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login.moikrug.ru/catalog/otchenko-ul-advert27... │ 18 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27132069304;IC,1511e8d158... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278453&with_exchange=0&ex... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=367132&pv=2... │ 18 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27071038_114736895,923401... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x9A\... │ 18 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27420780790931.html5/v12/... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/8018&l=malkogo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/?target=search?... │ http://irr.ru/index.php?showalbum/login-bigutensiysk.irr.ru/regular&bid=3205&bt... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kanza_tab_2499472&lr=1074&sort=popular │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-natura.ru/jobs-education=post_137336ID0... │ 18 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/obuv%2F │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-21102&text=\xD0\xB1\xD0\xB0\xD0\xB1\xD0\xBA\... │ http://irr.ru/index.php?showalbum/login.mospsy.ru/super-na-kostronics/tv-audio.... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685&numphoto=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertimeshariki.ru/cgi-bin/cli... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626p/ │ 18 │ +│ 1 │ 0 │ 0 │ https://diary.ru/magnitogorsk │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sien-zhienskaya-i-kvartir.html?id=1955451-01... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260908861%26point-peter=&... │ 18 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1453.116 Safari%2F8536 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeSearch?text=\xD0\xB2\xD0\xBA\xD1\x83\xD1... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=yators/?jumping.ru/series.ru/priceup&page=3&... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinger/\xD0\x93\xD0\x90\... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga1788778.137329TVmbFNmbVNaR0YwW$UyNDg4fxS... │ http://irr.ru/index.php?showalbum/login-sienskaia-moda-zhienskikh_rabotjaga.ru/... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=36427929&stat... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929750%26ar_sliceid%3D2... │ 18 │ +│ 4 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691c352005&pvno=2&evlg=V... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27422544/3/womens.ru/ufa.... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/cars/communalux.ru/dos... │ http://irr.ru/index.php?showalbum/loshaya-obl.irr.ru/film/35562C?analytics/kto-... │ 17 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru%2Ffilm/4858?pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271527091/frl-2/bage-2.ht... │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#7878... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.103402.html%3Fhtml │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=artira-Lyubyat │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.aspx#location │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=yes&y1=2013-07-07.ya.ru/5_search?text=\... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.15.html?1=1 │ 17 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://aliningrad │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266149_51928/detail.ru/ka... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%26rleurl%3D%26CompPath%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2670308&po_yers=0&price_o... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2613168312.71 Safari%2F__... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=8&ch=UTF-8&ifr=1&av=1&nm=1&ved=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_Bolers-device.aspx#commersanta_premiery... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 17 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6HS │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginyazevskaya%2F5.0 (Windows NT 5.1) Prestorygoo... │ http://irr.ru/index.php?showalbum/login-kupilomatic.aspx#location=rr&days&city&... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-dlia-zhiensmed.ru/el... │ 17 │ +│ 1 │ 0 │ 0 │ http://bdsmpeople.ru/register2123 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logistereda.ru/photo/70861/6#f │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263161366&bid=2823&numpho... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowthreadreplies=24&ids=74&cu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313&ussp=mstp&usln=1&inp... │ http://irr.ru/index.php?showalbum/login-3767436/roomootofile/obzor.com/iframe │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27595,9305f3931339322%26n... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273363331251798796&op_seo... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26041.htm%3Fsid%3D0%26pz%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031323532363&win=70&mode=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertistia.html?partment/searc... │ 17 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/stan/index.kz/yandex │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-search%3Futm_source=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 3 │ 22 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ 1 │ 0 │ 0 │ http://bibieters_sig=5ea8QizwGSPy0yGcm14ATH74D4Bw&usg=AFQjCNHxMZlonova.ru/p1847... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://diary.ru/forum/intries │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_style... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-futbolki-k... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lenfiki-zhienskaia-moda-muzhchin-sitafa ishq... │ http://irr.ru/index.php?showalbum/logical.ru/link=11485-9065383235348%2F&sr=htt... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261636/detail/odnoklassim... │ 17 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/messar.ru/professig │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 1 │ 0 │ 0 │ http://acase.php?input_who1=2&input_who2=1 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.10 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694&option%2F12.14&he=76... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26618531&t=111246.html?p=... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733145625/details... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-irina19910735%2F27.0.1453.116 Safari │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268814453957595,94406/det... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=Like Gecko) Chrome%2Fpotnik=1&price_do=&curr... │ http://irr.ru/index.php?showalbum/login-the-poxudet_sponsor=&o=6000708498/?caut... │ 17 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-53584715,1327288/belgium/arch=1&themec.... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=bestwo.diary/details&id=9160/0/posti.ri... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b76faact/less=1&ru=1&... │ 17 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/category=cinem rasmusic │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-herokee_tatus=1&rm=18606bAxFEcQT6smBB4W... │ 16 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search?clid=19554786.0.8.0.2.2003558_3497926... │ http://irr.ru/index.php?showalbum/logie-niz-doktops/electronics/4185570c72 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267044005320AA76)&vendor_... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098707209463401090/deta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgas.rQRAX2Ua3IF1iHJcaz4ATv34DABw │ http://irr.ru/index.php?showalbum/login/?page=1024&wi=144438-88-3906740/currenc... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27034195,9520160173/5/wom... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search/cuZXdzJTJGJmxyPTI4fQ,... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&pt=b&pd=7&pw=2&page5... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-plan... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26396284046.xhtml%3Fhtml%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate/out-of-tow... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260612d7cf.4082813,74,756... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login.aspx?sle=13&s_yers=0&page_type=0&door=0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?&clients-sale&siteurl%3D//ads/search?text... │ http://irr.ru/index.php?showalbum/login-kapusta-advert273786/foto-5/#photo=2817... │ 16 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/movinki... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/page=91552&q=\... │ http://irr.ru/index.php │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnaja-prost-petersburg/detail/?fold... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-krasok.html_params%3Drhost%3Dad.adriver │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiensmed.ru/dl/\xD0\xB7\x... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti/redmonds %2F offset=403134333.2201560&c... │ http://irr.ru/index.php?showalbum/login-v40-velopiter.feriod=0&scroll_to_auto.r... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661232&streamfood.com/if... │ 16 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166303133334%2F&ei=horia+iudi... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-57548811426&text=\xD0\xBB\xD1\x83\xD1\x87\xD... │ http://irr.ru/index.php?showalbum/login-coolonellana-Molodilnik.ru/index.php?vi... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26765.html_params%3Drhost... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/70948/35.htm?id=... │ http://irr.ru/index.php?showalbum/logiy-luchaiev%2F&sr=http:%2F%2Fwww.bonprix c... │ 16 │ +│ 1 │ 0 │ 0 │ http://histore/profile;u= │ http://irr.ru/index.php?showalbum/login-kupe-20013&uuid=1373356164564_1sort/sta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2755597.html%3Fhtml?1=1&c... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=findjob.ru/planet.ru/index.ru/carinov.h... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/showtopic,803813.html&... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_catalog/1250/?itemsg/cd... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert260477/cities/visas/exp?s... │ 16 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://video.yandex.php │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27429&input_bdsm_position... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-153-4b9c4.4331626.htm?size%3D0%26rleurl │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26887301/Zona/simferopol.... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2728024/detail/508/?instv... │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 16 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect │ http://komme%2F27.0.1453.116 │ 16 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://msuzie-shop/premiery-c-38208_2.html │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/posts&q=\xD0\xB2\xD0\xB5\xD0\xB4\xD1\x83\xD1... │ http://irr.ru/index.php?showalbum/login-mistore/#CATALOG_LIST-s-ovosibirsk/deta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-marka=23&model&desting?field_town/search/pri... │ http://irr.ru/index.php?showalbum/login-492ea9&show/417582,9626512874":10157628... │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27364229586121%26url%3D%2... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/sch/price][min]=41&lr=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ 1 │ 0 │ 0 │ http://volgografiyah_27_iyunya_50_let%2FgetId │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661251-6efa-d61f-fef3-01... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-maritkiN │ http://irr.ru/index.php?showalbum/login-ladimir.irr.ru/remiery-telefon.ru │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new=127201148][fr... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333%26bid%3D1%26rleurl%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/tv-audi/a7-spec=9894797179698712/p1/8... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=view/5/item3963... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logiste's a di galaxy-s4-story1.aspx#location... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5.0 (Win... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti%2F%3Ff%3D100%&http://afisha.yandsearch&... │ http://irr.ru/index.php?showalbum/login-6030d.html_params%3Drhost%3D90%26height │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/7427510/detail/5... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269899458/price/3815&pvno... │ 16 │ +│ 1 │ 0 │ 0 │ http://yandsearch?lr=2&color │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-gorod/search?p=7&oprnd=9902.jpg&img_url=http... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27222.vk.me/u3166 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2753][from]=&pricedownloa... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new10152954vac │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2735030373434-152495.php?... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691.html?1=1&input_age2/... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makeevka.ru/perm.irr.ru/slingvo/#1\xD0\... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-irinakai/page_num_read2306e4574&ei=Ot_rUfjPG... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2010000087378687/pic/8939375f303839303935373... │ http://irr.ru/index.php?showalbum/login-souse=2/path=39_1.html?1=1&cid=577&oki=... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313033393633310,932803][... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26708662307][]=&selection... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/artira │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikal.ru/search/room=1&dam... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumy.ua/search?text=\xD1\x81\xD0\xB5\... │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/?strict=5710... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertists/736850/?item_no=737&... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2695/19545602cf94d77/repl... │ 16 │ +│ 1 │ 0 │ 0 │ http://forums/liiiervierk-suppohudeemvmesting/294465&op_categoriya │ http://komme%2F27.0.1453.116 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&model=1173... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login/?do=ready-mansion%3D0%26url%3D%26bn%3D0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=new&cad=rjt&fu=0&input_country_id=228&lr=961... │ http://irr.ru/index.php?showalbum/login-cam.shtml#objdesc=true&uA=Mozilla │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb=1&prepairs=0&city[1 │ http://irr.ru/index.php?showalbum/lounona-muzhchin-kupaljinik-chernyj-odnoe/san... │ 15 │ +│ 1 │ 0 │ 0 │ http://launcher-searchads/search │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-album/login.2/second... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginsk.eu/ru/Pagesize=13&m1=07 │ http://irr.ru/index.php?showalbum/login-3muda/truction/vacancies/750207190765.h... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_produkty/kiev.org/forum... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26981583/page=1089592445/... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781308;IC,238208836746/0... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-4433140796851/detail/536180&all=False&i... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273389; U; Android 4.0.14... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945HPS?analog/r10418/sort=price_do=200&site_off=1 │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 15 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshop/id_art_type=7&s_yers │ http://irr.ru/index.php?showalbum/login │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F1.7.1364.172 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273631253711/foto-6320166... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2724/?_h=search?text=\xD0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-goluboj-podserial&dfs=13 │ http://irr.ru/index.php?showalbum/login-haus.html#news/228670,257&pci=3012/frl │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#67 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/washes/built-in_two_ch... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266356163f39ea6f8/7a8745&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26605566254/room=1.6&wher... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?Topic │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://irr.ru/index.ru/show/414526863_112 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list.html?typ=SMA&anbieter=aleks_evilkos.com │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/index.ru/ange=0&s_yers=(3000&static.diary.ru... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/state=1909644 │ http://afisha.yandex.ua/auto_id=0&with_photo.kurortmag.ru/razdnitsya-vishnury │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginskikh-viana.irr.ru/GameMain.aspx?sle=1/house.... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?transk.i... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/produkty%2Fplatj... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?page37/?sta... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-land_search?text=\xD0\xB0\xD0\xBC\xD0\xB1\xD... │ http://irr.ru/6323%26bn%3D27888895,963095425 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678&op_page=60000/curren... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liloveplanet.ru/futurer533/women.aspx?group-... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2631920&lo=http://person_... │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?Id=9582 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.1Uv1UfqCA8SonYC4BQ&usg=AFQjCNGB3pBUuKY1jJPP3... │ http://irr.ru/index.php?showalbum/login-tank-sale/search%3Fmode=&page_type │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=alini... │ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-tumbov.irr.ru/page1=&input_who1=2&id=29... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2718599/photo=0&is_hot=0&... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.php?city[1]=700003 │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26761,55.654289600/detail... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27515/418695&st=327-B110Q │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2699364224073532663835386... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login=vladimir/page_type=0&expand_search?text... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?dok=001&rightbox/week&From=0&user │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/frl-4/trailer/view/3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-lential/secondary/details9.html_params%... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2730675595,9292fa-d61f-fe... │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page9/#14... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-676216b8af/4fd00fa61b3185631821/page_ty... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienshchin-planet.ru/myma... │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=25127691%2F... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27265484158197%26width%3D... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27877437494,943082&stat_t... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1955451&lr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/gamemain.asp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_appliazh-pliance/mista-bez-uchaiev/000202&cl... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/ch/floore troubleclick... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Ford-antent... │ 15 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 3 │ 123 │ 0 │ │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nashinger/users/search?textilead&353%26ev_pl... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginy_name/3196906481/currency=6465373200&price=\... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2776/?date=0&doorov.irr.r... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-102-821922237&arrFilter2013/08-iH4AT5zIGQDA │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_type=&freetao.diary.ru/sea... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2693_763613.html_params%3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9584%26pz%3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274298799461981/?date=129... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert262997385f32313335781094&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/877/ru/buildin... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert276278-ploschaya_checked_... │ 15 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credir=1 │ http://komme%2F27.0.1453.116 │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://ekburg.irr.ru%2Fpuloveplanet │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=on&input_onliner... │ http://irr.ru/index.php?showalbum/login.html%26custom%3D%26CompPath.2; WOW64; r... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/gosthelp.ru/auto.ria.... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.10 │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=on&in... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga664.1721/deti74.ru/animals-planet.ru │ http://irr.ru/index.php?showalbum/login=K-SR-B-13-9635095,9661/9#f │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert269257798044.html_partmen... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/litlip/saint-peter557932E-8C62-4917%26ad%3D64... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2651734&pt=b&pd=7&pw=1&pr... │ 15 │ +└────────────────┴────────────────┴─────────────┴────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.127 user 1.216000 sys 0.004000 +D 07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +Run Time: real 0.014 user 0.180000 sys 0.000000 +D D (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +Run Time: real 0.018 user 0.240000 sys 0.000000 +D " = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) ORDER BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))); +Run Time: real 0.012 user 0.156000 sys 0.000000 +D +D +D +D '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(URL) > 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +┌──────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├──────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 102341 │ +│ http://komme%2F27.0.1453.116 │ 51218 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18315 │ +│ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16461 │ +│ http://irr.ru/index.php │ 12577 │ +│ http://irr.ru/index.php?showalbum/login │ 10880 │ +│ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 7627 │ +│ http://irr.ru/index.php?showalbum/login-kupalnik │ 4369 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 4058 │ +│ http://komme%2F27.0.1453.116 Safari │ 3021 │ +└──────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.065 user 0.800000 sys 0.008000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(Title) > 0 GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ Title │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ \xD0\xA2\xD0\xB5\xD1\x81\xD1\x82 (\xD0\xA0\xD0\xBE\xD1\x81\xD1\x81\xD0\xB8\xD1\... │ 122407 │ +│ \xD0\xA8\xD0\xB0\xD1\x80\xD0\xB0\xD1\x80\xD0\xB0\xD0\xB9), \xD0\x92\xD1\x8B\xD0... │ 82935 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA - IRR.ru │ 80958 │ +│ \xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\xB8 New Era H (\xD0\x90\xD1\x81\xD1\x83\xD... │ 39098 │ +│ \xD0\xA2\xD0\xB5\xD0\xBF\xD0\xBB\xD0\xBE\xD1\x81\xD0\xBA\xD1\x83 \xD0\xBD\xD0\x... │ 23123 │ +│ Dave and Hotpoint sport \xE2\x80\x93 \xD1\x81\xD0\xB0\xD0\xBC\xD1\x8B\xD0\xB5 \... │ 14329 │ +│ AUTO.ria.ua \xE2\x84\xA2 - \xD0\x90\xD0\xBF\xD0\xBF\xD0\xB5\xD1\x80 │ 14053 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA (\xD0\xA0\xD0\... │ 13912 │ +│ OWAProfessign), \xD0\xBF\xD1\x80\xD0\xBE\xD0\xB4\xD0\xB0\xD1\x82\xD1\x8C │ 10919 │ +│ \xD0\xA2\xD1\x80\xD1\x83\xD1\x81\xD0\xB8 - \xD0\xA8\xD0\xBE\xD1\x83\xD0\xB1\xD0... │ 10157 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.046 user 0.580000 sys 0.004000 +D AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 7479 │ +│ http://aliningrad │ 4791 │ +│ http://ekburg.irr.ru%2Fpuloveplanet │ 3584 │ +│ http://smeshariki.ru/obucheyelants │ 3064 │ +│ http://video.yandex.php │ 2887 │ +│ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 1084 │ +│ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 891 │ +│ http://afisha.yandex.ru/index │ 855 │ +│ http://sslow_13507.html?aspx?naId=6HS │ 521 │ +│ http://wildberrior/uphold │ 484 │ +│ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 289 │ +│ http://obninsk/detail │ 241 │ +│ http://diary.ru/forum/intries │ 208 │ +│ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 185 │ +│ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 185 │ +│ http://kurort/SINA, ADRIAN │ 157 │ +│ http://afisha.yandex.ru │ 132 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 124 │ +│ http://ssl.hurra.com/iframe │ 123 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 119 │ +│ http://stars-visa.html_params%3Drhost%3Dad.adriver.ru/catalog.php │ 105 │ +│ http://komme%2F27.0.1453.116 │ 83 │ +│ http://pogoda.yandex │ 80 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 79 │ +│ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 73 │ +│ http://video.yandex │ 71 │ +│ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 68 │ +│ http://wildberries.ru/daily │ 68 │ +│ http://smeshariki.ru/ru/index.ru%26bid │ 68 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 64 │ +│ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 64 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn │ 63 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 59 │ +│ http://sslow_135000008&position=search │ 58 │ +│ http:%2F%2Fwwwwww.bonprix.ru/topic │ 53 │ +│ http://sslow_13507.html/articles │ 52 │ +│ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 51 │ +│ http://rsdn.ru/rss.ya.ru/catalog │ 51 │ +│ http://ekburg.irr.ru/#lingvo │ 46 │ +│ http://pogoda.yandex.ru │ 45 │ +│ http://sslow_13500000%26rnd%3D2788881.html │ 44 │ +│ http://maps#ru_5_ru_22106.377648194,975924][to]=&int[14270pa106&op_uid=17759/6#... │ 42 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 37 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 37 │ +│ http://video.yandex.ru/film/46351/frl-2/bage │ 36 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 35 │ +│ http://direct.yandex │ 34 │ +│ http://sslow_13507.html?aspx?naId=3X_3bhLcs3M │ 33 │ +│ http://gotovim-doma │ 32 │ +│ http://che.ru/produkty_zarubezhei-niepochekhly │ 31 │ +│ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 30 │ +│ http://video.yandex.ru/Newsletter │ 29 │ +│ http://sslow_13507.html?aspx?naId=6D8IzMGys3M │ 29 │ +│ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ http://video.yandex.ru │ 28 │ +│ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 28 │ +│ http://notes=1/currency │ 27 │ +│ http://sslow_13507.html?aspx?naId=649&state/out-of-town=\xD0\xA5\xD0\xB0\xD0\xB... │ 27 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 26 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 26 │ +│ http:%2F%2Fwwww.bonprix.ru/tambov │ 24 │ +│ http://kinopoisk.ru/shoppich.ru/search?clid │ 24 │ +│ http://wildberries │ 23 │ +│ http:%2F%2Fwwwwww.bonprix.ru/searchAutoSearch?text=\xD0\xB2\xD0\xB5\xD0\xBB\xD0... │ 22 │ +│ http://myloveplanet │ 20 │ +│ http://stars-visa-litraj.txt","lpu":"http://pogoda │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/secondary │ 20 │ +│ http://msuzie-shop/premiery-c-38208_2.html │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 20 │ +│ http://smeshariki │ 19 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 19 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ http://irr.ru/6323%26bn%3D27888895,96772,97436 │ 18 │ +│ http://kinopoisk.ru │ 18 │ +│ http://nepogoda.yandex.ru%2Fproducts/search?text=subscripts/busineshop │ 17 │ +│ http://wildberries.ru │ 17 │ +│ http://kinopoisk.ru/catalog/9902224 │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://direct.yandex.html │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 17 │ +│ http://irr.ru/6323%26bn%3D27888895,963095425 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 16 │ +│ http://afisha.yandex.php?gidcar=36281664 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://auto.ria.ua/search │ 15 │ +│ http://direct │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ http://irr.ru/index.php?showalbum/login-kupalnaya-obl │ 15 │ +│ http://kinopoisk.ru/odessya │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 14 │ +│ http://ekburg.irr.irr.ru/maker │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.yandex │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.mail/rnd=0.9788 │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://auto_many_to_auto.ria.ua/igrush43/ │ 13 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 13 │ +│ http://afisha.yandex.ru/cars │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 13 │ +│ http://love.ru/a-myprofi │ 13 │ +│ http: │ 13 │ +│ http:%2F%2Fwww.bonprix │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://real-estate/aparther/offiliates/corruption/russinsk │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://on-online=on&accetti │ 12 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 12 │ +│ http://samara.irr.html5/v12/?from]= │ 12 │ +│ http://kinopoisk.ru/saledParams │ 12 │ +│ http://en.lyrsenses/zamba_zaborah_coldplay=1&gearbox │ 12 │ +│ http://zvukovo/hondar/2007&state/renlew/rigma.ru/scribed │ 12 │ +│ http://pogoda.yandex.php?SECTION │ 12 │ +│ http://msk/platia-nashing/vanny.diary.ru/moscow │ 12 │ +│ http://video.yandex.ru/GameMain.E6smreQhiu_hXR4&where=all&film │ 12 │ +│ http://news/6483731559676/Unlocknotebooks/m83/800_D_Black_list │ 11 │ +│ http://nizhnieiene/p17378705/currency=1&with_photo-ideapadeno │ 11 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 11 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty/photo-12/#imag... │ 11 │ +│ http://msk/platia-nashing/vanny.diary.ru/sale/liver │ 11 │ +│ http://video.yandex.ru/GameMain.aspx#location │ 11 │ +│ http://guid=6&pw=6&pv=13 │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 11 │ +│ http://wildberries.ru/rost.html?1 │ 11 │ +│ http://smeshariki.ru/?win=82&stat=1&page/196264&pt │ 11 │ +│ http://pogoda.yandex.ru/catalog/jokers │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 11 │ +│ http://en.lyrsenses/zamba_zabudtrimazok.html?page=12&prr=http://fap1.adrive_typ... │ 11 │ +│ http://bonprix.ru%26bid │ 11 │ +│ http://loveplanet.ru/GameMain │ 10 │ +│ http://bdsmpeople.ru │ 10 │ +│ http://video.yandex.ru&pvid │ 10 │ +│ http://liver.ru/cheboksicily/foto.aspx?sort=newly&trafkey │ 10 │ +│ http:%2F%2F%2Fwwww.bonprix │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://club.ru/spokoiteli/photo37775280000 │ 10 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 10 │ +│ http:%2F%2Fwwww.bonprix │ 10 │ +│ http://auto_id=240&n=13901038 │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 10 │ +│ http://smeshariki.ru │ 10 │ +│ http://slovariant_new3077940810/detail │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://en.lyrsenses/zamba_zabor_id=1012_blank%26site │ 10 │ +│ http://sslow_13500000%26rnd%3D2788881.html?parts/passe │ 10 │ +│ http://pogoda.html%3Fhtml_params%3Drhost%3D43 │ 10 │ +│ http://irr.ru/index.php?showalbum/logout%26verstova.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://pogoda.yandex.php │ 9 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film/6781203.html?id=242037047/detai... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://mysw.info/blog/sankt-peter%3D1216/00001216629 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://e96.ru/albumfotok-15-fotki │ 9 │ +│ http://alpari.yandex.html?html_param=0&users/#page/Search/ab_dob%2Ffieiie-razvo... │ 9 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://bonprix.ru/catalog/8570/1006790 │ 9 │ +│ http://b2b.testered/main/discuss/matched_country=-1&top=0&cityid=1024&wi=1366&o... │ 9 │ +│ http://svpressa.ru/topic=17082630 │ 9 │ +│ http://bonprix.ru │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http:%2F%2Fwwww.bonprix.ru/filmId=8j5j97LRs3M&where=all&sources │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/#win_13.html_p... │ 9 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/4744089758 │ 9 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_produkty%2F&sr=http://slovaria │ 9 │ +│ http://nail=Yes&target=search │ 9 │ +│ http://rlsnet.ru/vacancy/view_type_id=9677548268010367 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/imagecache/wm/2013&where=all&filmId │ 8 │ +│ https://m.myloveplanet.ru/forum/abrika-kobelenie_nebestsenal │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 8 │ +│ http://zapchast.com/iframe-owa.html?1=1&cid=577&oki=1&op │ 8 │ +│ http://poisk.ru/price_ot=&price_ot=&price │ 8 │ +│ http://afisha.yandex.php?t=141880517 │ 8 │ +│ http://zarplata.ru/velika_all=\xD0\xBE\xD1\x82 │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http:%2F%2Fwwwwww.bonprix.ru/news/222974895&op │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://fore=3&marka=0&top=0 │ 8 │ +│ http://direct.yandex.ru/catalog │ 8 │ +│ http://video.yandex.ru&xdm_p=1#item/search │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96777&oki │ 8 │ +│ http://zarplata.ru/?p=12977-B26358/currency=RUR/page=1080&wi=1024&lo=http://rzh... │ 8 │ +│ http://en.lyrsenses/zamba_zabor/bedroomolsk │ 8 │ +│ http://masterh4.adriver.yandex │ 8 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ==&page_avtomodules.php?f=100&ref... │ 8 │ +│ http://mastered/main.aspx#location=1&bc=3&ct=1&pr=60322056107100919/page5/?_h=s... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://omsk.mlsn.ru │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96779/87 │ 8 │ +│ http://smeshariki.ru/GameMain │ 8 │ +│ http://che.ru&pvid=13733142835/100/topic,5240556895&ch=UTF-8&sF=11,7,7,0 │ 8 │ +│ http://afisha.yandex.php?gidcar=367108851%2Fr%2F1 │ 8 │ +│ http://love.ru/?p=17059 │ 8 │ +│ http://wildberries.xml?from]=&input │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/index.php?showalbum/login-kupit-topy%2Fplatjie-gotovlexandex.html... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 8 │ +│ http://auto.ria.ua/auto_id=24126629/0/index.ru/real-estate/out │ 8 │ +│ http://victor?page_type=city.stol-yar.ru/cars │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://video.yandex.ru%2F&sr=http://loveplants/65398f55 │ 7 │ +│ http://kinopoisk.ru/ch/feed/letniaiaprice/1609 │ 7 │ +│ http://real-estate/aparts/Aquarevski │ 7 │ +│ http://video.yandex.ru/a-album/login-vitiju/photo │ 7 │ +│ http://bonprix.ru/social/product_id │ 7 │ +│ http://moscow/detail/5552/0/2792834&m=111,7,7,5 │ 7 │ +│ http://irr.ru/Registered/main/topnewsru.com/page=6 │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 7 │ +│ http://irr.ru/index.php?showalbum/login-kapustics?sort=pogoda.yandex.ru%26bt%3D... │ 7 │ +│ http://bonprix.ru/catalog/8570/14139489 │ 7 │ +│ http://afisha.yandex.ru/\xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB0/\xD0\x91\xD0\xA1\xD0\x... │ 7 │ +│ http://irr.htm?from]=&int[85][from]=&input_vsegodnyie │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://love.ru/?p=1#country=&op_seo │ 7 │ +│ http://bdsmpeople.ru/niktory/shtory/308/roomed.ru/p59473682740295 │ 7 │ +│ http:%2F%2Fwwwww.bonprix │ 7 │ +│ http://myloveplantrackIt?tid │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 7 │ +│ http://spb/event=big&marka=84&model=0&auto_id=0&s_yers=0&pv=10&can_be_check_PP │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://pogoda.yandex.ru&pvid=1 │ 7 │ +│ http://irr.ru/index.php?showalbum/login-a-5-advert27114 │ 7 │ +│ http://video=0&is_hot │ 7 │ +│ http://bdsmpeople │ 7 │ +│ http://irr.ru/index.php?showalbum/login-zk34/pages/0001216629 │ 7 │ +│ http://svpressa.ru │ 7 │ +│ http://money.yandex │ 7 │ +│ http://gotovim-doma.ru │ 7 │ +│ http://afisha │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 7 │ +│ http://video.yandex.ru%2Fkategory_id │ 6 │ +│ │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://afisha.yandex.ru%2F%2Fmail/169 │ 6 │ +│ http://love.ru/?p=1#country=-1&sq_liver.ru/kyrgyzstan │ 6 │ +│ http://omsk/evential/house.ru/catalog/kitchedule=213-606361653965283 │ 6 │ +│ http://video.yandex.ru/ekt │ 6 │ +│ http://stars-varenok.ru/16745959680706/800_0.jpeg.html%3Fhtml5/v123593 │ 6 │ +│ http://bdsmpeople.ru/film/64544.690022.rar.html_params%3Drhost%3D_black_list=0&... │ 6 │ +│ http://afisha.yandex.ru/catalog=on │ 6 │ +│ http://bdsmpeople.ru/GameMain │ 6 │ +│ http://v102.ru/investate/apartments-sale │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://video.yandex.ru/GameMain.aspx#location/page_type=category │ 6 │ +│ http://wildberries.ru/search │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://afisha.yandex.ru%26bt%3D43%26anbietersburg │ 6 │ +│ http://video.yandex.ru/a-topy │ 6 │ +│ http://omsk/evential/housession%3D0 │ 6 │ +│ http://direct.yandex.ru/refererprofile%2F2.10 │ 6 │ +│ http://moscow/details │ 6 │ +│ http://rukodel=0&sort=newly&trafkey=2750 │ 6 │ +│ http://smeshariki.ru/world/photofider_credit=0&view │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://irr.ru/index.php?showalbum/login-12.html%26custom │ 6 │ +│ http://novosibirsk.irr.ru%26bid │ 6 │ +│ http://solutions.diary.ru/realtitroenie_v_jurman.ru/albums/frame-owa.html?stric... │ 6 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 6 │ +│ http://mr7.ru/newsru.com/iframe_right%3D43 │ 6 │ +│ http://autodoc.ru/real-estate/apart │ 6 │ +│ http://smeshariki.ru/catalog │ 6 │ +│ http://edp2.adriver.ru/hocketshop.ru/moscow/detailanude │ 6 │ +│ http://povari.yandex.ru/greecondary/Products_id=&auto_vaz_2111 │ 6 │ +│ http://msk/platia-nashing/vantralitsa_transion │ 6 │ +│ http://3dnewsru.com/iframe_right.html?1=1&cid=51538 │ 6 │ +│ http://video.yandex.ru/catalog │ 6 │ +│ http://ereal-estate/rent │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://afisha.yandex.php/board,39.04839 │ 6 │ +│ http://novo/detail.aspx?group_cod_1s │ 6 │ +│ http://auto_hyundai_sarator │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://kalininmyclonus1 │ 6 │ +│ http://bdsmpeople.ru/saledParams=rhost%3D43%26bid%3D1 │ 6 │ +│ http://forum/topnews/22294&op_category │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://love.ru/?p=17055335 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://afisha.yandex.ru/mymail.php │ 6 │ +│ http://real-estate=week/page=1&expand_search?film/298677435615.html │ 6 │ +│ http://koolinar.ru/port.ru/doc │ 6 │ +│ http://video=0&with_exchangeType │ 6 │ +│ http://afisha.yandex.ru/index.ru/recipe │ 6 │ +│ http://kinel-lab.com/rus/20130709_117485994,93304&op_seo_entry=1&gearbox=0&type... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ https://slovakia-600dd903c07022,101595,91194&op_seo_entry │ 6 │ +│ http://diary.ru/exp?sid=3205 │ 6 │ +│ http://video.yandex.php?search?text=\xD0\x9A\xD0\xBE\xD0\xBD\xD1\x8C\xD1\x8F\xD... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://video.yandex.php?from]=&interapy-wkti/ &cd │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D8393224 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://love.ru/ru/irk/event/search/ │ 6 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://kinopoisk.ru/catalog │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://auto_volkswagen/vologdano/il_dlya-dnevka.ru │ 5 │ +│ http://barnaul/details/?cauth │ 5 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD0\xB5\xD1\x80&where=... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 5 │ +│ http://metal-lodku-Obzor │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 5 │ +│ http://sp-mamrostova │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://tp66.ru/exp?sid=3860217/rooms=2/men.aspx#location%3D0%26rnd │ 5 │ +│ http://zvukovo-gorodsk │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://video.yandex.by/?state_id=&auth=1..630;IC,7711588 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http:%2F%2Fwwww.bonprix.ru/?id=2013&where=all&filmId │ 5 │ +│ http://rmnt.ru/search/offilia_Sovetov_living_chamber/?78142 │ 5 │ +│ http://e96.ru/movies/614418821/artir.ua/search │ 5 │ +│ http://slovari.yandex.ru%26orderovskij-index.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://povari.yandex │ 5 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_seo_entry=&op_category_... │ 5 │ +│ http://tks.ru/cat/publish-cherkalnaya-ttpodporyadushek │ 5 │ +│ http://video.yandex.ru/GameMain.aspx?Link │ 5 │ +│ http://slovarenok.com │ 5 │ +│ http://auto.ria.ua/auto_id=241269.html?1=1&cid=2127970 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://slovari.yandex │ 5 │ +│ http://auto_volkswagen-Palities/horobki │ 5 │ +│ http://afisha.yandex.php?r=23436303135353.html?1 │ 5 │ +│ http://radio&planet.ru/work.ru/catalog │ 5 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 40007&pt │ 5 │ +│ http://en.lyrsenses/zamba_zaborah_chamberk │ 5 │ +│ http://rustnye-sht-riemnikoi │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://myloveplanet.ru/v14572&lb_id=13000001216629 │ 5 │ +│ http://sslow_135000008&position=search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 5 │ +│ http://pogoda.yandex.php?gidcar │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://bibidohertki-i-OOOO_REPORT/07_2013 │ 5 │ +│ http://autodoc.ru/moscow │ 5 │ +│ http://real-estate=week&m=Dvigenie.html?option │ 5 │ +│ http://avtomobile/motory.ru/comp.ru/view.php │ 5 │ +│ http://topnews.ru/GameMain.aspx?group_cod_1s=1983&pt=b&pd=9&pw=0 │ 5 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 5 │ +│ http://love.ru/product_id=0&po_yers=0&po_yers=2&refererro/model=1346488078722&c... │ 5 │ +│ http://video.yandex.ru/firms.turizm │ 5 │ +│ http://video.yandex.ru%2FkategoriendflowerTo=&powerTo= │ 5 │ +│ http://loveplanet.ru/mymail/rudi │ 5 │ +│ http://auto.ria.ua/auto │ 5 │ +│ http://msk/platia-nashing/vannyie-product_id=1841&page2 │ 5 │ +│ http://auto.ria.ua │ 5 │ +│ http://nizhnieiewva88/photo/101246465376&cmd=show-to-buchaiev-pugache=51db32a68... │ 5 │ +│ http://club.ru/cinema/movies/no-pos │ 5 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D158197%26width │ 5 │ +│ http://tks.ru/cat/publish-chemec.ru/search?filmId=CktclMBmUXI │ 5 │ +│ http://direct.yandex.ru/index │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://kinopoisk.ru/spb.pulscen.ru/exp?sid=3159&op_category_id=&auth=0&checked=... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://holodilnik-rp-ploschaya-obuv/?ci=1280&with_video=0&choosOyg==&op_uid=111... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://wildberries.ru/real │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://slovariant_neu%3D1%26bid%3D1216/0001216629%26bt%3Dad │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://wildberrior/kia/ │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://md.mirkovskaya-obl.irr.ru/jobinmoscow │ 5 │ +│ http://jcmotorom-921205&bt=7 │ 5 │ +│ http://loveplanet.ru/\xD0\xB0\xD1\x80\xD0\xBE\xD0\xBC/curre-ap-i-showalbum/loui... │ 5 │ +│ http://povari.yandex.php?showalbum/login.pl?cl=all&film/497794,90458 │ 5 │ +│ http://en.lyrsense.com/obshchin-idieiala │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://video.yandex.ru%26bt%3Dad.adriver.ru/recipe/view/10217/?from │ 5 │ +│ http://gaylyU │ 5 │ +│ http://moscow/detail/Torgovuyu-organske.ru/real-estate │ 5 │ +│ http://smeshariki.ru/topic │ 5 │ +│ http:%2F%2Fwww.bonprix.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://loveplanet.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://alpari.ru/gallery/pic845274 │ 5 │ +│ http://alib.mist.html%26custom%3D%26c2%3D278888592138 │ 5 │ +│ http://loveplanet │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://video.yandex.ua │ 4 │ +│ http://whoyougle.ru/images/images/00000i/specifiers.ru/image=1&furniture │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 4 │ +│ http://video.yandex.ru/price │ 4 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/filmId │ 4 │ +│ http://samarskii_krai/tuapse/detail/result.aspx │ 4 │ +│ http://sslovarenok.ru │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://auto.ria.ua/auto_id=0 │ 4 │ +│ http://afisha.yandex.ru/zoom.php?f=5162613838.html_partments │ 4 │ +│ http://bdsmpeople.ru/Web/Pages=1/feedsmag.ru/~\xD0\xBA\xD0\xBD\xD0\xB8\xD0\xB3\... │ 4 │ +│ http://loveche.html │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 4 │ +│ http://irr.ru/index.php?showalbum/login-10618968476372773 │ 4 │ +│ http://wildberries.ru/catalog │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://afisha.yandex.ru%252f7769%252fe │ 4 │ +│ http://echoradar-s-Levoshcha │ 4 │ +│ http://radio&planet.ru/marka=62&model=1178128455&pvno=2&evlg=VC,5 │ 4 │ +│ http://love.ru/?p=1#countpage/vacancies/events/738/0/3/women.aspx │ 4 │ +│ http://diary.ru/catalog=on&input_city[3 │ 4 │ +│ http://direct.yandex.php?formsof(INFLECTION_ID=30861/14365-4b11&state/apartment... │ 4 │ +│ http://e96.ru/news/39733/page2=&input_sponsor=&o=1015219.html_partments-sale&pa... │ 4 │ +│ http://rasp.pl?cmd │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://travel.ru/state/apartments-sale/rashinitit%2F537 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.php?view_type=2&driveresult.ru/replies │ 4 │ +│ http://auto.ria.ua/auto_id=63799.html_params │ 4 │ +│ http://afisha.yandex.php?r=3&bs=&day │ 4 │ +│ http://ssl.hurranovskaya-ul-31-foto.ria │ 4 │ +│ http://kinopoisk.ru/saledParams%3Drhost%3Dad.adriver.ru/GameMain.aspx#location │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ https://smeshariki.ru/cinema/article10363136000001216629%26site_offilia_Sovets.... │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboy07/... │ 4 │ +│ http://vkirovoe-tourisma │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://smeshariki.ru/domchelkakh_location=search?text=\xD0\xBC\xD0\xB8vents │ 4 │ +│ http://guid=6&pw=2&pv=0&price_do=¤cy=1 │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://card/windows)&bL=ru&cE │ 4 │ +│ http://kniga.ru/view=\xD0\xA1\xD1\x82\xD0\xB0\xD0\xB2\xD1\x80\xD0\xBE\xD0\xB2&w... │ 4 │ +│ http://smeshariki.ru/search/keukeru-soft │ 4 │ +│ http://video.yandex.ru/GameMain.XYyZwYXRoPWEtbG9nb24vcG90Cw │ 4 │ +│ http://zarplata.ru/?p=12977-B26358/hasimages=1/page │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://matched_car=373838928155755775482794,9453.116 Safari%2F537.36&he=10&s_ye... │ 4 │ +│ http://video.yandex.ru/real │ 4 │ +│ http://afisha.yandex.ru/search │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://v102.ru/?s=Adaments-sale │ 4 │ +│ http://video.yandex.ru/GameMain.aspx#location-4.0.html │ 4 │ +│ https:%2F%2Fwwww.yandex.ru │ 4 │ +│ http://tks.ru/cat/publish-chernyjbelyj-9375966238&op_categoriya │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/social │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/realty/leaser_map=1/hasimay-2.html │ 4 │ +│ http://auto.ria.ua/canel_pe_mascona Hilfigeratov/153228 │ 4 │ +│ http://nizhny novgorod │ 4 │ +│ http://video.yandex.ru%26target=search/ab_area=categorija80119 │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://kubikus.ru/search.php?r=4140211,1,7,7,7,7,0 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://e-kuzbass.ru/a-shop │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://victorhead.php?full&dom=780067167694.0; │ 4 │ +│ http://guide.travel.ru/link │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/cart.php/cars/papago-d-plosch │ 4 │ +│ http://afishi,Mudanted-belyj-974299099/guest-id=34089.html │ 4 │ +│ http://fitness/building │ 4 │ +│ http://svpress_up.aspx#location[propfilter_pf[PODVAL]=&arrFilter][3463351841195... │ 4 │ +│ https://produkty%2Fpulove.ru/gost/?page3 │ 4 │ +│ http:%2F%2Fwwww.bonprix.ru/real-estate/out-of-town/house │ 4 │ +│ http://afisha.mail.aspx#locationalOffers │ 4 │ +│ http://video.yandex.ru/GameMain/dukhovyy │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadbor_sh... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http%3A//magnitogorod/page3/#over │ 4 │ +│ http://anketka.ru/bridget │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://afisha.yandex.php?action/2741920 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://love.ru/image=2&marka=84&model/mihailovo │ 4 │ +│ http://tks.ru/cat/public/gamemain.aspx#location │ 4 │ +│ http://nepogoda.yandex.ru/search=1&target=search=0&can_be │ 4 │ +│ http://kinopoisk.ru/searchAutoSearch=0&driver.ru/catalog/1/women.aspx#locationp... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://afisha.yandex.php?show=rlv&ru=1&expand_search │ 4 │ +│ http://love.ru/?p=1705 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://ssl.hurra.com │ 4 │ +│ http://auto_volkswagen_cated_cartovskaya-obl.irr.ru/album/login │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://video.yandex.ru/If yours.avtogsm.ru/animals/calculate │ 4 │ +│ http://afisha.yandex.php?p=31&input │ 4 │ +│ http://loveche.ru/job/1162323&PAGEN_1=30&state │ 4 │ +│ http://internet Explorer&aV=5.0 (Windows)&bL=en │ 4 │ +│ http://pogoda.yandex.ru/cooking_sm5_1148786993ab-417/photo/69363/26#formi.ru/co... │ 4 │ +│ http://rsdn.ru/details_103514,154;IC │ 4 │ +│ http://auto_s_product_name=\xD0\x9A\xD1\x80\xD1\x83\xD0\xB3\xD0\xBB\xD0\xBE\xD0... │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboyzon... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://video.yandex.ru/topnews.ru/lanas-advert2713][to]=&int │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://auto_volkswagen_pass_1161967 │ 4 │ +│ http%3A//edp1.adriverys/forum/view_type=city&custom=0&damages/0001216629%26bid%... │ 4 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD1\x82\xD0\xBE\xD1\x8... │ 4 │ +│ http://inspelishchin-platjie-doma.ru/irkutsk.irr.ru │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://smeshariki.ru/saint-petersburg-gorod/transfer/?id=7576149959760994861&op... │ 4 │ +│ http://en.lyrsenses/zamba_zabudka/photo-1/#page=0&sale/search?text=\xD0\x9C\xD0... │ 4 │ +│ http://afisha.yandex.ru/content2.adriver │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://auto_id=0&with_photo │ 4 │ +│ http://arma/frl-4/transportnoy-kv-m-malchik.ru/show │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://b.kavanga.ru/?a=inneVolumeFrom │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://irr.htm?from]=&int[1151;IC,112 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_category_id=592b9e01c48ce9403%26bn%3D0%2... │ 4 │ +│ http://tp66.ru/money.yandex.ru/albums_screenterval │ 4 │ +│ http://bdsmpeople.ru/film/64544.690078 │ 4 │ +│ http://afisha.yandex.ru&pvid=13733424 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://video.yandex.ru/GameMain │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ https://orenburg/?arrFiltersburg │ 3 │ +│ http://kinopoisk.ru/service.ru/iframe │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://samara.irr.ru%2Fproduct │ 3 │ +│ http://radiorecord.ru/login-m3w.html?1=1&cid │ 3 │ +│ http://romar/events/audio.ru/widget[]=vacancies/99.php?gidcar │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://afisha.yandex.php/topic104780204&op_uid=1954 │ 3 │ +│ http://afisha.yandex.php/tova.ru/uliya2076789599305953 │ 3 │ +│ http://afisha.yandex.ua/donetsk/urals │ 3 │ +│ http://afisha.yandex.ru/a-folders/misc │ 3 │ +│ http://afisha.yandex.ru/shop.ru/malta │ 3 │ +│ http://afisha.yandex.ru/project_price=&maxprice │ 3 │ +│ http://afisha.yandex.ru/kategoriya%2F5.0 (company │ 3 │ +│ http://afisha.yandex.ru/linkvac.php/board.php?topicseeng │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://irr.kz/realty/lease/3516093&pvno=2&evlg │ 3 │ +│ https://produkty%2Fplatjie-kuzbass.ru/newsru.com/iframe_right=0&auto_ria=0&meta... │ 3 │ +│ http://fuckfind=rent/view/2021/3 │ 3 │ +│ http://banantikov-nadushenie_orleona_server=sc.cheloveplant_11612/page │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://radioscannerica/filmId=Ba_id=13733568414&city=\xD0\x9C\xD0\xBE\xD1\x81\x... │ 3 │ +│ http://video.yandex.ru%2Fplata.ru/ch │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://kaluga/?ext=\xD0\xB3\xD0\xB5\xD1\x80\xD0\xBE\xD1\x8F\xD1\x82\xD0\xBD\xD1... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://love.ru/forum.cofe.ru/forum/view_type=city=790&Selectronics-technik │ 3 │ +│ http://astrobank.ru/image │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://sp-money.yandex.ru │ 3 │ +│ http://love.qip.ru │ 3 │ +│ http://auto_kia_30 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://sp-mamrostokonkursovet │ 3 │ +│ https://slovakia-600dd903c06c999c226647639.html%3Fhtml │ 3 │ +│ https://slovakia-600dd903c07022,101595,9143531427800648_elit │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category_id=0&wi=16000&... │ 3 │ +│ http://sp-money.yandex.ru/work rushki-sien-natalog/8570/page=0&expand │ 3 │ +│ http://video.yandex.ru&pvid=13735/?_h │ 3 │ +│ http://afisha.yandex.ru/forum.materinburg │ 3 │ +│ http://afisha.yandex.php?addriver.ru │ 3 │ +│ http://forum/topnews/2229605699574.html?1=1 │ 3 │ +│ http://video.yandex.by/search/?target%3D43%26bid%3D2 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberrior/bedroom]=&int[17][to]=&int[858 │ 3 │ +│ http://direct&sortdirect.yandex.ru/imagesize%3D0%26ar │ 3 │ +│ http://ssl.hurral=messages │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://rmnt.ru/stars │ 3 │ +│ http://video.yandex.ua/auto_id │ 3 │ +│ http://bdsmpeople.ru/search │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://b.kavanga.ru │ 3 │ +│ http://rmnt.ru/film/88677/russia/rio.ru/search?filmId=NNr6aJrm4s3M │ 3 │ +│ http:%2F%2Fwww.bonprix_ru}%2Fnizhniynovgorod/request-id │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://edp2.adriver.ru/catalog/181 │ 3 │ +│ http://video.yandex.ru/circle&state/out-of-town/houses │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film.ru │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://edp2.adriver.ru/jobinmoscow/detail │ 3 │ +│ http://svpress_w1t1042796786/6/?category │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://pogoda │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://msk/planet.ru/mymail.aspx#comme_me_saydinne │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.ru/forum.donfiscategory │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://pogoda.yandex.kz/family │ 3 │ +│ http://kazan.irr.ru/location │ 3 │ +│ https://produkty%2Fpulove.ru/voronezh-sien-zhienskaia-moda-zhienskaia-moda-zhie... │ 3 │ +│ http://video.yandex.php?topbloveche │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com/iframe-owa.html?1=1&cid=577&o... │ 3 │ +│ http://tks.ru/cat/publish-chin-play.php?categoriya%2Fzhiensmed │ 3 │ +│ http://card/windows NT 6.1) AppleWebKit%2F5 │ 3 │ +│ http://radiorecord.ru/catalog/idShare │ 3 │ +│ http://nigma.ru/product&op_category_name=\xD0\x91\xD0\xB8\xD0\xBA\xD0\xB8\xD0\x... │ 3 │ +│ http://ussuriysk.irr.ru/catalog/premiere/628962851d7fd0b6eb17b321d336f5bc7de189... │ 3 │ +│ http://magnitka_1_series.ru/?favorite_id=636233644&op_category_id=937514 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://loveche.ru/volzhskiy │ 3 │ +│ http://smeshariki.ru/a-phony │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty%2Ftanki │ 3 │ +│ http://svpress/showbiz/photo.htm │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/92054446660.ht... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://afisha.yandex.ru/tatatit_chto.php?industry │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountpage │ 3 │ +│ http://smeshariki.ru/catalog/286/women.aspx │ 3 │ +│ http://svpressa.ru/content/search │ 3 │ +│ http://video_dvd/game/iframe-owa.html │ 3 │ +│ http://ekategoriya%2F9B206 Safari │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://omsk/evential/housession%3D0%26url%3D//ad.adriver.ru/link/justic/h2.php/... │ 3 │ +│ http://msk/platia%2Fzhienskaia │ 3 │ +│ http://lk.wildberries │ 3 │ +│ http://holodilnik.ru/catalog │ 3 │ +│ http://tp66.ru/search/?page=1&fuelRateTo │ 3 │ +│ http://e96.ru/real-estate │ 3 │ +│ http://my.kp.ru/albumfoto-1/pol-2 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://amobil-nye-pliazhnaia │ 3 │ +│ http://personal/atlants/7292&xdm_c │ 3 │ +│ http://povarenok.ru/files/eliteh.ru/perm.irr.ru/board,75.2013-07-09 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://smeshariki.ru/?win=82&stat=141882,373;IC,2552f48 │ 3 │ +│ http://brand=498&pvno │ 3 │ +│ http://love.ru/?p=1#country=&op_seo_entry=-1&target │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://sp-mamrostovestory │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://irr.ru/washek-s-printom │ 3 │ +│ http://smeshariki.ru/real │ 3 │ +│ http://smeshariki.ru/goodavec/photo/6936325.html?id=223978/page=102 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://irr.ru/index.php?showalbum/login-kupaljinik-chere │ 3 │ +│ http://msuzie │ 3 │ +│ http://kinopoisk.ru/search │ 3 │ +│ http://wildberries.ru/item_no=2&evlg=VC,0;VL,205;IC,14;VL,757138/currency=RUR/h... │ 3 │ +│ http://3dnews.ru/?p=12636464/5#f │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic=79799398/?_h=search.htm... │ 3 │ +│ http://afisha.yandex.php?app=membered │ 3 │ +│ http://afisha.yandex.php?ELEMENT_ID │ 3 │ +│ http://afisha.yandex.ru/lesyach-hotels │ 3 │ +│ http://afisha.yandex.ru%26bt%3D90%26nid%3D1216629 │ 3 │ +│ http://afisha.yandex.php?id=727285 │ 3 │ +│ http://str_ob.html?1=1&choosO8gPJSs3M&where=all&filmId=mAyiC7y6M2mGV2GoA9hFoN3q... │ 3 │ +│ http://kaluzha-na-NovletedAutoSearch=0 │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostavia.travel.ru/s... │ 3 │ +│ http://product_brand=RAINBOW&op_cated_content/search/keup/en-ru │ 3 │ +│ http://love.ru/ru/irk/event=little&cated_country=-192.html?1=1&cid │ 3 │ +│ http://love.ru/?p=17057 │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://love.ru/recipes/indows │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory_id=577&search/ab_district/date_id=2271][from... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://kinopoisk.ru/sessulyanovka.ru/photosessid=3205&bt │ 3 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD0\xB2\... │ 3 │ +│ http://li.ru/filmId=XpzlPj8P8gE&where=all&text=\xD1\x81\xD0\xBA\xD0\xB0\xD1\x87... │ 3 │ +│ http://you_hashkaf.ua/search │ 3 │ +│ http://wildberries.ru/GameMain │ 3 │ +│ http://povaria/chak_naytimes.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://auto_repairs=0&confiscategoriya │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://afisha.yandex.ru/comment/search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://smeshariki.ru/GameMain.aspx#location │ 3 │ +│ http://afisha.yandex.ru%2Fobuv-sapozhkivka=23&price │ 3 │ +│ http://afisha.yandex.ru/hotel-agen-Goluboj-9730 │ 3 │ +│ http://notebooking pressa │ 3 │ +│ http://soft.oszone.ru │ 3 │ +│ http://pogoda.yandex.ru/real-estate │ 3 │ +│ http://video_dvd/ratesTypeSearch?text=\xD1\x87\xD0\xB5\xD0\xBB\xD0\xBE\xD0\xB2\... │ 3 │ +│ http://auto_repairs=0&po_yers=0&price.ru/\xD0\xB6\xD0\xB5\xD0\xBB\xD0\xB5\xD0\x... │ 3 │ +│ http://auto_id=0&engineVolumeFrom │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://wildberries.ru/basket&ch │ 3 │ +│ http://state/room=94720-recept-Salat-iz-glasya1lesyat │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://video.yandex.ru/personal/offeebe34c7e12944&op_product │ 3 │ +│ http://trashbox.ru/book │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://slovari.yandex.ru │ 3 │ +│ http://kommersantamina │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://audio_video.yandex.ru/mosday.html?item=4#photo446962 │ 3 │ +│ http://auto_ford Mix).mp3.ucoz.ru/v1430497.html%3Fhtml │ 3 │ +│ http://v102.ru/investate/apartment/?id=137336IseNhcbx3J85GkHSnzgnsPdZUU&where=a... │ 3 │ +│ http://afishers/story │ 3 │ +│ https://slovarenok │ 3 │ +│ http://pogoda.yandex.ru/vlas-moskovskaya │ 3 │ +│ http://guid=6&pw=2&pv=0&with_video.yandex.ru │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/photo/narod.irr.ru/katering=1&pr=569&s_yers │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com.ua/kiev/detail.ru/auth=1..640... │ 3 │ +│ http://video.yandex.ru/extra │ 3 │ +│ http://love.ru/ru/irk/event=little&category_id=731-643736&mode=1 │ 3 │ +│ http://dom.net/provoe-pervouralnaya/ChildGluZ19oZXJlci1kYXRpb25zPU4mbj0zJmlkPTM... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://alpari.yandex.ru/saint-petersburg.irr.ru/cars/page3 │ 3 │ +│ http://video.yandex.ru%2Fkategory_id=9759527418 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://video │ 3 │ +│ http://radiorecord │ 3 │ +│ http://wildberring │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://balcon_caddy Club relove │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://kinopoisk.ru/registernet Explorer&aV=5.0 (Windows NT 5.1; ru-ru&cE=true&... │ 3 │ +│ http://state_shariki │ 3 │ +│ http://en.lyrsenses/zamba_zabor_polnitsa-s.narod.irr.ru/bank/otzyvy/12031%2F%23... │ 3 │ +│ http://auto_id=0&color=0&confiscategory_id=3205&bt=7&bn=1&bc=3&ct=1&prr=http:%2... │ 3 │ +│ http://afisha.yandex.php?partments │ 3 │ +│ http://wildberries.ru/cgi-bin/click.cgi%3Fsize │ 3 │ +│ http://video.yandex.ru/real-estate/out-of-town/house.ru&pvid=1&distreet_legkovo... │ 3 │ +│ http://omsk/evential/housession%3D240%26rleurl%3D//ad.adriver.ru/marshavskaya-r... │ 3 │ +│ http://smeshariki.ru/cgi-bin/click.cgi%3Fsid%3D0%26pz │ 3 │ +│ http://kinopoisk.ru/spb.pulscen.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://loveplanet.ru/Bezli-all │ 3 │ +│ http://bdsmpeople.ru/show/39932/Itemid,40.0.html_params%3DfsSaHR0cDovL2pzLnNtaT... │ 3 │ +│ http://video.yandex.ru/realty/search/main.aspx?sort=popular │ 3 │ +│ http://afisha.yandex.ru/manga.ru/?rtext=\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB1\xD0\xB... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://saint-peter │ 3 │ +│ http://whoyougle.com/iframe/iframe_right.ru/spb │ 3 │ +│ http://lazarevskoe │ 3 │ +│ http:%2F%2Fwww.bonprix.ru/imagesize │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://un1.adriver.ru/page=30138117749516%252f110916%252fmedicinema/movie_ross ... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_product_brand=4200&lo=h... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://klubnich/zrh/ │ 3 │ +│ http://smeshariki.ru/furniture.html5 │ 3 │ +│ http://wildberries.ru/comment/search │ 3 │ +│ http://ssl.hurra.com/iframe-owa │ 3 │ +│ http://myloveplanet.ru/passenger/kitched_country_id=4312&input │ 3 │ +│ http://cxem.net/324487194836848 │ 3 │ +│ http://saint-petersburg-gorod/goodal │ 3 │ +│ http://sunmar.ru/cart&ch=utf-8&sF=11,7,700&aN=Opera&aV=9.80 (Windows │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://wildberries.ru/comme%2F2.12.388 Version/1552/page │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&film/67... │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://irr.ru/index.php?showalbum/logizer8/num-1/refremost │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://pogoda.yandex.ru/real-estate/apartments/73151 │ 3 │ +│ http://gotovim-doma.ru/personal/commersant.ru/image=19&pvno=2&engineVolum │ 3 │ +│ http://pogoda.yandex.ua/telefon_shtukaturkey │ 3 │ +│ http://krasnodar.irr.ru/yaransferapid │ 3 │ +│ http://jobs-education │ 3 │ +│ http://bdsmpeople.ru/index.by/ru/page=0&confiscategory_id │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://auto_id=0&color=0&confiscategoriya%2Fzhienskaya-advert25593 │ 3 │ +│ http://afisha.yandex.ru/sell/resident │ 3 │ +│ http://afisha.yandex.php?p=176d43f96ef32d5bc1272 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://forum/topics/ingradskazka-lookoformalities/poetry/events/?date&csrf-8200... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://video_dvd/suppoll/dleead6718.php?SECTION │ 3 │ +│ http://video=0&input_with_video.yandex.ru/page/10/women.aspx │ 3 │ +│ http://radioscannerica/film/47018.html?1=1&cid=691390&pvno │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://msk/platia-nashing/vanny.diary.ru/otdam_daily │ 3 │ +│ http://direct.yandex.ru%2F&sr │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=&is... │ 3 │ +│ http://kinopoisk.ru/cgi-bin/click.cgi%3Fsid%3D1216 │ 3 │ +│ http://irr.ru/index.php?showalbum/login-do-500-kv-m-Maya │ 3 │ +│ http://kinopoisk.ru/real-estate=2013-07-2089241607/photo=0&with_exchangeType │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/used/KIA-Cee-d... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://maps#ru_5_ru_1_ru_ru_ru_202_ru_1_ru_ru_ru_ru_2_ru_1743.html?oscsid=36303... │ 3 │ +│ http://rukodel=0&sort=newly&trafkey=27065/2/child.aspx#location │ 3 │ +│ http://zapchastny_fashing_mashes/index.ru │ 3 │ +│ http://myloveplanet.ru/bad_by_sidential/nizhnieiewva88 │ 3 │ +│ http://tyva-5/country=-1&washestvo/den_sidentialAmount │ 3 │ +│ http://chehod/zvenia8312&input_who2=1&input_age1=35&aN=Netscape │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory │ 3 │ +│ http://arma/frl-4/travel.ru/moscow/details │ 3 │ +│ http://rsdn.ru/info_all=yes&razdumy-i-trikshop/search&_h_page/1719920 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/procoolonelopitered/ministrict/3d-probeg-340-... │ 3 │ +│ http://ssl.hurra.com/iframe/iframe-owa.html%26custom%3D%26custom │ 3 │ +│ http://smeshariki.ru/news/2013/peshnye-udivlekanka.ru/l_03_00/bodreamfood.ua │ 3 │ +│ http://mylove.ru/zoom.php?GID=2&IsOrder │ 3 │ +│ http://zagranimals-planet.ru/user/31059&Module │ 3 │ +│ http://kuharka=48&modeloveplanet │ 3 │ +│ http://avtoto.ashx/1001087496197797217530729; Media Centernet_mastersburg │ 3 │ +│ http://sendflower │ 3 │ +│ http://whoyougle.ru/basket&ch=utf-8&sF=11,7,7,7,700 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://bdsmpeople.ru/Web/price │ 3 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://smeshariki.ru/index.ru/main.pl?cmd=show/47555 │ 3 │ +│ http://afisha.yandex.ua/index.ru/recipe │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://auto_operey-v-v-meha.ru/catalog/public │ 3 │ +│ http://votpusk.ru/ │ 3 │ +│ http://myloveplants_list-obl.irr.ru%2Fobuv-zhienskaia-modiezhda │ 3 │ +│ http://video=0&is_hot=0&che_simeis │ 3 │ +│ http://forum/topnews/222968695,910112_1164074834-908745 │ 3 │ +│ http://myfashihtzu.html?1=1&cid=65625f313230303&po_yers=2013/07 │ 3 │ +│ http://video.yandex.ru%2F%2Fwww.bonprix │ 3 │ +│ http://irr.ru/6323%26bn%3D27888895,96772&op_page47 │ 3 │ +│ http://afisha.mail.ru/stars/page │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://smeshariki.ru/chipinfo │ 3 │ +│ http://kurort/SP1399&op │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://irr.htm?from]=&int[852][to]=10&lastdiscussins/?keyworld │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stories.ru/art/MACKLEMORE │ 3 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 3 │ +│ http://pogoda.turizm.ru/communit=0&vip=0&order_by=2 │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.php?w=3160/transports │ 3 │ +│ http://afisha.yandex.php?link=114735200&brand=23368 │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountry │ 3 │ +│ http://wildberries.ru/page=0&vip │ 3 │ +│ http://nizhnieie-bielie-bieriends&fb_source-temno │ 3 │ +│ http://forum/topnews/2229362067528195&op_categoriya │ 3 │ +│ http://smeshariki.ru/Web/price │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://zarplata.ru/?p=1290&op_product_price=990348531&schoosOSRquM8gE&where=all... │ 3 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&top │ 3 │ +│ http://radiorecord.ru │ 3 │ +│ http:%2F%2Fmuzhchine/ru-g-Chelya_v_tsentyabrskii │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://ej.ru/muss/roll_to_audi/mode=replies │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://ur.hh.ru/file/news/2013 \xD0\xB3\xD0\xBE\xD0\xB4\xD0\xB0 │ 3 │ +│ http://guid=6&pw=2&pv=0&po_yers=0&with_video │ 3 │ +│ http://gorbus.aspx#localiformalitic │ 3 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 │ 3 │ +│ http://my.alpari.ru/filmId=yJg89hqV8gE&where=all&film/530/?fromCityCodeForcentr... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&text=\x... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://pogoda.yandex.ru/chat/ivan │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://yartb.html?city=55&TopicID=2&IsOrderedProduct │ 2 │ +│ http://afisha.yandex.ru/?trafkey=54073799 │ 2 │ +│ http://news/398261_enl.jpg-1 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://poisk.ru/news/articles │ 2 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD1\x81\... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 2 │ +│ http://video.yandex.ru/rent/info/messa.ru │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://ssl.hurra.com.ua/auto_repairs=0&page=10&category_id=detail │ 2 │ +│ http://moscow/detail/Torgovljatory/storii_efferanslyatting │ 2 │ +│ http://kinopoisk │ 2 │ +│ http://video=0&input_state │ 2 │ +│ http://forum.php?t=420 │ 2 │ +│ http://mysw.info/node/21544 │ 2 │ +│ http://smeshariki.ru/tashkinsk │ 2 │ +│ http://smeshariki.ru/product&op │ 2 │ +│ http://yaroslavl.irr │ 2 │ +│ http://board=11.ua.150.html%3Fhtml │ 2 │ +│ http://pogoda.yandex.ru/jobinmoscow │ 2 │ +│ http://afisha.mail.ru/cheva.ru/reportby │ 2 │ +│ https://diary/2013-07-05/101090/currency │ 2 │ +│ http://slovarenok.ru/chapochki │ 2 │ +│ http://pogoda.yandex.php?showalbum │ 2 │ +│ http://kinopoisk.ru/saint │ 2 │ +│ http://krasnyj-chastory │ 2 │ +│ http://pogoda.yandex.ru/real │ 2 │ +│ http://3dnews.ru/msk/events │ 2 │ +│ http://sslow_13500000%26rnd%3D278888 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 2 │ +│ http://wildberrin/foton │ 2 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 2 │ +│ http://diary.ru/search?familliklink │ 2 │ +│ http://omsk.spb.ru/filmId=RUb3Hf2m0Cw&where=all&text │ 2 │ +│ http:%2F%2Fwww.bonprix.ru/search=0&deletedAutos&marketing │ 2 │ +│ http://kaluga/?ext=\xD1\x80\xD0\xB5\xD0\xB9 \xD0\xBD\xD0\xB0 \xD0\xB1\xD1\x80\x... │ 2 │ +│ http://pogoda.yandex.php?t=14555667679/?PAGEN_3=5&s_yers=0&numphoto/62232/7#f │ 2 │ +│ http://pogoda.yandex.ru&xdm_e=http://name=\xD0\x91\xD0\xB0\xD0\xBB\xD0\xB5\xD1\... │ 2 │ +│ http://auto_id=3159&input_age2 │ 2 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 2 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://guid=6&pw=2&pv=0&price=690&s_yers=1916 │ 2 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=2furii10.html?city=0&hide │ 2 │ +│ http://afisha.yandex.php?s=4d450&pid │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://afisha.yandex.php?city=418&view │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://wildberries.ru/editem_no=100¤cy=1#country=&op_proizvodskaya-obuv-z... │ 2 │ +│ http://wildberries.ru/filmId=4920/room=1&lang=all&filmId=DnGbyVQVUXI&wheretomug... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.040 user 0.372000 sys 0.008000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +┌────────────────┬────────────────┬─────────────┬────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ TraficSourceID │ SearchEngineID │ AdvEngineID │ src │ dst │ pageviews │ +├────────────────┼────────────────┼─────────────┼────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33069 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 24703 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 15817 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 14233 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 │ 6549 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 │ 5257 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 5257 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 3547 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login │ 3538 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik │ 3371 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php │ 3333 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 3309 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 2923 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 2616 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 2441 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php │ 2418 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 2390 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari │ 2367 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 2349 │ +│ 1 │ 0 │ 0 │ https://google.com.ua/url?sa=t&rct │ http://komme%2F27.0.1453.116 │ 2228 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 1920 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://komme%2F27.0.1453.116 │ 1679 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ekburg.irr.ru%2Fpuloveplanet │ 1340 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://aliningrad │ 1270 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1254 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1213 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1193 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1186 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1142 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F27.0.1453.116 │ 1007 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 954 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://aliningrad │ 859 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login │ 821 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 791 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 777 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 757 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 722 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://video.yandex.php │ 702 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 691 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/obucheyelants │ 684 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 632 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 593 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 577 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://smeshariki.ru/obucheyelants │ 566 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.php │ 452 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 445 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBA\xD0\xBE\xD0\xBD\xD1\x82\xD1\x80\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 422 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 421 │ +│ 0 │ 0 │ 0 │ │ http://obninsk/detail │ 407 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 386 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug.ru │ http://irr.ru/index.php │ 374 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru/index │ 360 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 348 │ +│ 2 │ 0 │ 13 │ │ http://komme%2F27.0.1453.116 │ 347 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-2011/43597 │ 293 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 293 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6HS │ 282 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 268 │ +│ 3 │ 72 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 267 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 259 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 257 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari │ 256 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 │ 241 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login │ 237 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 │ 236 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/28435&lr=157 │ http://komme%2F27.0.1453.116 │ 233 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/ru/photo/6936313555&text=\xD1\x85\xD0\xBA \xD0\xBB\xD0\xBE\xD... │ http://komme%2F27.0.1453.116 │ 224 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php │ 223 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cat/dushkirillovyj │ http://komme%2F27.0.1453.116 │ 222 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=359&op_page2/... │ 218 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kriminally-bezhevsk │ 217 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0 │ 212 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 207 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 202 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 199 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://ekburg.irr.ru%2Fpuloveplanet │ 199 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 198 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 197 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 195 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/414526863.xlsx │ 191 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CDMQFjAJ │ http://irr.ru/index.php?showalbum/login-kiriskaya-obl.irr.ru/index.ru/GameMain.... │ 190 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=0&with_photo.ashx/101/4/?cat=6257271 │ 188 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=partments-sale/search?text=\xD1\x81\xD0... │ 187 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://afisha.yandex.ru/index │ 183 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://ekburg.irr.ru%2Fpuloveplanet │ 171 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 168 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 164 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 163 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://ekburg.irr.ru%2Fpuloveplanet │ 160 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 160 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/life.ru/cars/misc/travel.ru/?trafkey=058143&p... │ 155 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 │ 154 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=577&oki=1&oby=&op_s... │ 152 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://wildberrior/uphold │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6HS │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 149 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 146 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustic/meterburg │ 144 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 144 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 144 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E │ 141 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 140 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 136 │ +│ 1 │ 0 │ 0 │ http://kombardighantnie │ http://komme%2F27.0.1453.116 │ 136 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login │ 135 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kysjacevtika │ 132 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://komme%2F27.0.1453.116 Safari │ 124 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 121 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category/stroy/dachines... │ 114 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/?state │ http://komme%2F27.0.1453.116 │ 113 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/GameMain │ http://komme%2F27.0.1453.116 │ 113 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 111 │ +│ 3 │ 85 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 110 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login │ 110 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kardigan │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 107 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosoftwarenok.ru/projects/zhbi.po... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 105 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268143.html?1=1&cid=577&o... │ 104 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 104 │ +│ 0 │ 0 │ 0 │ │ http://tvidi.ru/photo=0&confiscategory_id=0&engineVolumeFrom=&fuelRateFrom=type... │ 103 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 102 │ +│ 3 │ 14 │ 0 │ │ http://komme%2F27.0.1453.116 │ 102 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 100 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 98 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://video.yandex.php │ 97 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 96 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.21150895 │ 96 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?sort=price │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 95 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login │ 95 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.12.388 │ 93 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 93 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 92 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberrior/uphold │ 92 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 91 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-tanks/search=1&ady=62&modeloveplanet.ru │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 90 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.145332.15&he=10&category_id=2740387993 │ 89 │ +│ 1 │ 0 │ 0 │ http://in-the-weightEnd=2351&numphoto=&isExclusiver.ru/alertljus │ http://komme%2F27.0.1453.116 │ 88 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fprodazha_Italja_unit=1&av=1&nm=1&lang=ru │ http://irr.ru/index.ru/show/414526863.xlsx │ 87 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 86 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb1.html?item_no=386703/?bundle=7172&msid=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 86 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 │ 85 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 84 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733582852/ │ 84 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupit/action │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 82 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 82 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?bodystyle │ http://komme%2F27.0.1453.116 │ 81 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F22.14&he=768486 │ 81 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusk.ru/ru/lookaginitial/Prodayu-Dach... │ 80 │ +│ 3 │ 4 │ 0 │ │ http://komme%2F27.0.1453.116 │ 80 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 79 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://aliningrad │ 78 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 78 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login │ 76 │ +│ 1 │ 0 │ 0 │ https://go.1ps.ru/show&showforum │ http://komme%2F27.0.1453.116 │ 76 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandex.ru │ http://komme%2F27.0.1453.116 │ 76 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26221/detail.ru/v1496366&... │ 75 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php │ 75 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 74 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%2F&sr=http://bonprix.ru... │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len80/page/product │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filtr/all/perm.pulscen... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 73 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 73 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F1.7.1364.172 │ 72 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://diary.ru/forum/intries │ 72 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/show/414526863_112 │ 72 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2618561&pp=1059&op_produc... │ 72 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://video.yandex.php │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 71 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 71 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari │ 71 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://aliningrad │ 71 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=product_id=42&Selection.chelov.ru/searc... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/yandsearch?te... │ http://irr.ru/index.php │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/server=sc.chel.ru/main... │ http://irr.ru/index.php │ 70 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification/?year=\xD0\xB1\... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2791954~43.87725656132&op... │ 69 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://komme%2F27.0.1453.116 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/produkty/bleacs/udilis... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 69 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&wi=1366&br... │ 68 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 67 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731&CgID=124jc&where=all... │ 66 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/Yozh/Goodda │ http://komme%2F27.0.1453.116 │ 66 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2725215195&ti=\xD0\x9F\xD... │ 66 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://ekburg.irr.ru%2Fpuloveplanet │ 65 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru/index │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 64 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://afisha.yandex.ru/index │ 64 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 63 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nmg.com%2F4.0 Safari%26clients-sale/search&e... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 63 │ +│ 2 │ 13 │ 13 │ │ http://komme%2F27.0.1453.116 │ 62 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 62 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login │ 62 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://ekburg.irr.ru%2Fpuloveplanet │ 61 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 61 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26092.html?s_text=\x5C\x5... │ 59 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/thenon-houses/public/g... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27755f32316.30; .NET CLR ... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742/details/?cauth=0&dam... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fautoad/kniga.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26004/?_h=galle/\xD0\xBF\... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert27930555&sob=1&p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2692.html%3Fhtml?period=3... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/world/photo31469:Album... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=leting "HalUXI&where=\xD0\x9F\xD0\xB5\xD1\x8... │ http://irr.ru/index.php?showalbum/lofiver.ru/articles/86121%26uid%3D139750%26ad... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/koshka.com/ig/iframe-o... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27000,224648804-recept-so... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory=cinema.perm.p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/realty/suntime-5/extre... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742357/detskii_gosts.xml... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742304][from]=&int[14670... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694336/photo/suzannason/... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Forum25/top... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268320995,968650f45491882... │ 57 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupit/action │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1375605&ga... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://video.yandex.php │ 56 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga/choice/... │ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_product_... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?showtopic,5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26017/quarius_Moscow/cavi... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2726125413975d77cf&search... │ 55 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 54 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266848223/review_type=pro... │ 53 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 53 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26989%26bt%3Dad.adriver.r... │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/album/login-1800002&pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 52 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0 │ 51 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2698172,93932353064614618... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605085268a9c4d61-9862.49... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19&numphoto/login=A-CL-MS-36575c72937][to]=&int[12822304 │ http://irr.ru/index.ru/widgetchrome%2F&ti=no&dom_v_bordovye-printime.ru │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/investate/comple/make/?page5/&docid=jlMNIrXw... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 50 │ +│ 0 │ 0 │ 0 │ │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 50 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F11.7.1364 │ 50 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 50 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26051.htBeg=6&NightRegist... │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xBE\xD1\x81\xD0\xB8\xD0\xB1... │ 49 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 49 │ +│ 5 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 49 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?group=days=3&text=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27410/photo-2.xhtml&serve... │ 48 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandsearch │ http://komme%2F27.0.1453.116 │ 48 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 48 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusty-i-vkont.at.ua/search=0&userId=0... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266128182&op_seo_entry/de... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?sort=&br... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/intrumen │ 46 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://afisha.yandex.ru/index │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumanegenre=33155?analog/kitchen_mini... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login%2Flick.g.doubleclick.diary.ru/car/kw/3061/us... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://afisha.yandex.ru/index │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734.html_params%3Dfh_loc... │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/GameMain.p1Yo4A │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ua/searchads/jo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605906/frl-2/sportal.ru/... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fshow/lpp/cre.ru/pers... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.asp?search&ev... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logize.ru/msk/events_liver.ru/russert-plies.r... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26099486633033&countpage=... │ 44 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://sslow_135000008&position=search │ 43 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 43 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischet-solik/odezhda-plos... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert277553/38021/66936575776/... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271050&with_photo.kurortm... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 43 │ +│ 1 │ 0 │ 0 │ http://forums/liii-kuler S22oHgBJTngegotavgorod55.ru/filtr[2]=42 │ http://komme%2F27.0.1453.116 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-folders/?end=9a08488... │ http://irr.ru/index.php?showalbum/litamak.irr.ru/catalog/8570/travel.ru/cgi-bin... │ 41 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 41 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 41 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/0001216629/#top_by │ 41 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26040931&s_yers=0&with_vi... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://ekburg.irr.ru%2Fpuloveplanet │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.137508&s_yers=200... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://aliningrad │ 40 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logito8ergo_6470/page_type_id=20872/0/001:12:... │ 40 │ +│ 0 │ 0 │ 0 │ │ http://afisha.mail.ru/dmitrij │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/readar-nashi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27924563724&key=46960/med... │ 40 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://lib.ru/exp?sid=3205&bt=7&bn │ 40 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 39 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credit │ http://komme%2F27.0.1453.116 │ 38 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=8570/page=5&s_yers=2006 │ 38 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2679/detail/5482,935033/2... │ 38 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 38 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login │ 37 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dnevnoy-kv-Samara.irr.ru/searchAutos&marka=4... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 37 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://komme%2F27.0.1453.116 │ 37 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=theating&page=... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?group │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2784389/room=39695,966681... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/forum/topicID=269&stat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/votkim-rukav-i-kova-ul-adve... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filmId=xFX1UbTNJjxe4yF... │ http://irr.ru/index.php?showalbum/login.asp?razdel7/test/matched=115909d9_dsc07... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wolf-club478561/OPEL | \xD0\xB0\xD0\xB2\xD1\... │ http://irr.ru/index.php?showalbum/login-marka=13&city&custom=0&damages/0001216 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27553&s_yers=0&po_yers/46... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert275226607660?design=6efxq... │ 36 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=show=&fgroup-tab-mara.irinables/yearT... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278171&size=52094&op_seo_... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27330528/photo/6223799%26... │ 36 │ +│ 5 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://smeshariki.ru/obucheyelants │ 36 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36&he │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=post_neu%3D22%26pz%3D0%26rleurl%3D%26xp... │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 35 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/8569 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/index.ru/katego... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vip.ru/book.com/photo/7086/page=0&state=mont... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-cukickdrops_bak_yant4tlGtZgy3BQ&bvm=bv.49478... │ http://irr.ru/index.php?showalbum/login-501-98552&op_uid=1060948/6#f │ 35 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (Windows │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19&m_staraya-obl │ http://irr.ru/index.ru/show/414526863_112 │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 34 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.12.388 │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 34 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_uid=1... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/promo=C-Tease/rent/dat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 34 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/list │ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 34 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/directadvert/kavanga_728x90.html │ http://komme%2F27.0.1453.116 │ 34 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 33 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshops.xml?typ │ http://komme%2F27.0.1453.116 │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?cPath=default.ru/yandex.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33 │ +│ 1 │ 0 │ 0 │ http://auto.ria.ua/\xD0\x9A\xD0\xBB\xD0\xB8\xD0\xBC\xD0\xB0\xD1\x82\xD1\x8C\xD1... │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 33 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://video.yandex.php │ 33 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 33 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser │ 33 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265748ba3f755671_1162684&... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertif?sle=85000 \xD0\xB4\xD0... │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364 │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/pub │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 32 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zxcvbnm1990&search/jobinmoscow.ru/yandex.by/... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements-obschaya │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fproduct/foto-4/login... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&op_category_id=1174]... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniturers_id=575386110 │ http://irr.ru/index.php?showalbum/login.exit/rem/php/board/10_kruizer_8267049&o... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiepochto_id=93231238][to... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://afisha.yandex.ru/index │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ssl.hurra.com/iframe │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischuk_Kerasivye-klavik/?... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/jobs-education/m_acces... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26791e3a7c543c9bf9ef5c0-9... │ 31 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt │ http://komme%2F27.0.1453.116 │ 31 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertificia/?letteo_985428161/... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_api.php?cid=41389/rooms/perm.pulscen.ru/sear... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 30 │ +│ 1 │ 0 │ 0 │ http://domchelov.html&lr=55&text=\xD0\xB4\xD1\x80\xD1\x83\xD0\xB3\xD0\xB8\xD0\x... │ http://komme%2F27.0.1453.116 │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoryID=12452929587/... │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 30 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 30 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268630533&site_ot=&price_... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-k608i.trashbox.ru/cars/page5/&docid=577&lr=2... │ http://irr.ru/index.php?showalbum/logii_58247.php?forum.borovichy77/page5 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2716/~3/150160947694,9745... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/products/?category_id=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2696374/#page/tab=com_avt... │ 30 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/topic │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605446518%2F&sr=http://e... │ 30 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.14&he=768&wi=1920 │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26979553039353936694&ch=u... │ 30 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://smeshariki.ru/obucheyelants │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-carava/fotok-8-steklove.ru │ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26928142&op_products/view... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kupibatikov/?recrete/personal/klimat.ru/work... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 29 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x9A\xD0\xBE\xD1\x80\xD0\xBE\xD1\... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/wedditeli_foto-2/__48/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertifications[0][150]=60&inp... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_countpage/1 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/click.net/paged=696&lo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274229696.0 (Windows)&bL=... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-14132&with_photo=1&srtime-zone.net/catalog/t... │ http://irr.ru/index.php?showalbum/login-sierra%2Fdlia-zhienskaia-moda-zhiensmed │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 29 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2664952&xdm_p=1#country=-... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704.html%3Fhtml5/v12/?fr... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734/fotographic_2017666&... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategoriya/zhienskaya-... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9649.html%3... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27350350394&ch=UTF-8&sF=1... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/small_mercial-shoppicc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_seo_entr... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-baza/gadge... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27425.3120%26ntype_id=2&r... │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 28 │ +│ 1 │ 0 │ 0 │ https://directions[0][1541769377921968 │ http://komme%2F1.7.1364.172 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13733097&op_categ... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert272291684/hasimage=0&view... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/mann japanel/?text=\xD1\x81\xD0\xBC\xD0... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269500469412216388/detail... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-my-sovies/bebybum.homestion bonprix.ru/... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikarbox=2&tz=9b81998&po_y... │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?lang=all&fi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-176-kakaya-obl.irr.ru/search?lr=191&ei=N6rrg... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\xA4\... │ 28 │ +│ 3 │ 95 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/anime-2/#album/l... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-eve-nn.ru/cars/passenger/\xD0\x92\xD0\x90\xD... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274236&pv=15&prr=8&sid=35... │ 28 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic/8939858-59929477/detailshop │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/41452626u1zIq0SGLXCI │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F22.14&he=768486 │ 28 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://ekburg.irr.ru/#lingvo │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678/page=2&marka=84&mode... │ 27 │ +│ 3 │ 2 │ 0 │ │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/search?cl4url=http://yandex.ru/online... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27013.ya.ru/sportalznakom... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert24061.jpg.html%3Fhtml?1=1... │ 27 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031343-sh-898675/sort=pri... │ http://irr.ru/index.php?showalbum/login-5158&jenre/slyudya_metroman.ru/GameMain... │ 27 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19195/offset=101&district=&city&with_photo=¤cy │ http://irr.ru/img/catalog/53485785/topic/8939850.php?page=3&marka=84&mm │ 27 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://obninsk/detail │ 27 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-oleginnesujeli-i-centum=etarget=search?clid=... │ http://irr.ru/index.php?showalbum/login-kupe.html_params%3Drhost%3Dad.adriver.r... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fhit_list.html?s... │ http://irr.ru/index.php?showalbum/login-irake-myservierk-supierts%2F&ti=\xD0\x9... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27928092_price=\xD0\xBC\x... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/mazda-dievochnye_avari... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-19.xhtml?city_to_one=All&film]/on/orders/810... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/1.19.mobile_photo=6001... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27630/?item_id=0&bodystyl... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ 1 │ 0 │ 0 │ http://bonprix_ru_11559&lr=12&usln │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lizova_ii_1112_1150&option[price_do=300... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E&wher... │ 26 │ +│ 1 │ 0 │ 0 │ http://yandex.ua/?target=search/tab=user │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://obninsk/detail │ 26 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detall/seconomicsmovinki │ http://komme%2F27.0.1453.116 │ 26 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/loginsk.irr.ru%2Fkategory_id=9204471-650/?_h=... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login-jjjekrju-s-pring=1&price[price=\xD0\xBC... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification.ru/messa.ru/rea... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lejandsearch?text=\xD1\x82\xD0\xB8\xD1\x85\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert21124631/?Search.php │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 26 │ +│ -1 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 26 │ +│ 3 │ 197 │ 0 │ │ http://komme%2F27.0.1453.116 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_category... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?messa.ru/worlds/page2/7277932582&text=\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 26 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-kupe-20010120652838799.html?n=7148.html... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemey-volvom80Cw&where=a... │ 26 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=607&state=4... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.22 (KHTML, like Gecko) │ 25 │ +│ 1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 25 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/people.ru/cars/passets... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731/?city=0&pvno=2&evlg=... │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vivarki/redki_sdelaet-law.ru/produkty/kartgo... │ http://irr.ru/index.php?showalbum/login=driff/en-ru/?p=2#messages/00001216629 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.html&ei=GcXrUYe8F2DAU-RbuRlLMczoJ--5uDCx8 │ http://irr.ru/index.php?showalbum/login-132/#images/0000.h95/\xD1\x82\xD1\x8E\x... │ 25 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert264314953); ru) AppleWebK... │ 25 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://obninsk/detail │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search?text=myaccountry │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguard-payments-sale/se... │ http://irr.ru/index.php?showalbum/login-88i8LaDyEkCVv6-DhRfEDcw==&action │ 25 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/yandex.ru/?f... │ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 25 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.ru/film/46351/frl-2/bage │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605838.html5/v12/?from=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-link=1147373-1&p=1&p=2&text=\xD0\xBC\xD0\xBE... │ http://irr.ru/index.php?showalbum/logisterlingvo/#! │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694589/detail/555-javata... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741559&t=5204/make=Chrys... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=shops.html?id=1&body_type=\xD0\xBF\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781472265&op_seo_entry=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626rleurl%3D//ad.adriver... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685/price_ot=&price=\xD0... │ 24 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://diary.ru/forum/intries │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26685857947301_Zoryatiya/... │ 24 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-117031&op_category&op_seo_entry=&op_uid │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27399992.php/board,13.0) ... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671291&fridgets/2012&pri... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguar.ru/page4/?emain.a... │ http://irr.ru/index.php?showalbum/login=ogabass.ru/filmId=9WOqzzitive&view │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo/7... │ http://irr.ru/index.php?showalbum/login-kupit-plitka-s-korsiety/art/151/n4p/160... │ 24 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://video.yandex.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-annative-expressageId=0oVXx21hUXI&where=all&... │ http://irr.ru/index.php?showalbum/login-rybnovlevojj_mamountry=-1&type%3D0 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/intrumen │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kupalnaya_elit=&id=3&clid=9403&lr=1913849 │ http://irr.ru/index.php?showalbum/login-gallebia_zhurnalCall D.R.E.mp3ex.net/ph... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lolacake/tatyaka.html?1=1&cid=577&oki=1 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinglish.rus-l7-p70505-1... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/yandsearch?lr=1... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-yvaken/topic=7702.jpg.html?1=1&cid=577&... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=1&bc=3&ct=1&pr │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-547552/1/?sma=RAINBOW&op_uid=fdd1b9d2721728&... │ http://irr.ru/index.php?showalbum/login-kapusta-advertika/search/room=1&damage=... │ 23 │ +│ 1 │ 0 │ 0 │ http://auto_volkswagency=1&text │ http://komme%2F27.0.1453.116 │ 23 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgarials/commend/searchvage-2.html&dt=13734... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-tuniki_510... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263090024189-528619c2077/... │ 23 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/ru/index.ru%26bid │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333572620201709/page/10... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news/radio&clid=198555... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26939.html?page/3/#count=... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/kategory_id=5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2740974%26pz%3D0%26ar_sli... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 23 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/resultatya9176da22f1a521a5853.html&... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26600721376439322%26pz%3D... │ 23 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga_728x90.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://afisha.yandex.ru │ 22 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2697574697.html_param=0&u... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemennoke0070553995f27d6... │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-105vr/ │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=search.tutung/s... │ 22 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/wheel.ceratornaya_solnechka │ http://komme%2F27.0.1453.116 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-10760b31b65633eZateq eb806e887d9f15ccf593280... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2091&local=1&TypeSearch?mail.ru/yandsearch&c... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26058&nnum=s4746835895&op... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-the-ili-tempera-minsk.irr.ru/produkty/bluzki... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodny │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739693071/pomer... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2649.html?pg=menu_29.jpg&... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/v1465][from]=&int[157281 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267830840994,95688781470%... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-business/sale/ru/search?mail.ru/film%2Fbarna... │ http://irr.ru/index.php?showalbum/login-zakon_type=1&fuelRatesTypeSearch │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 22 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27200,55.7654.html_parat-... │ 22 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26601629][from=&fuelRateT... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&l... │ http://irr.ru/introlux_page5/2/page/Renaul.irr.ru/start=1500-rublic/gamemain/Tu... │ 22 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://ekburg.irr.ru%2Fpuloveplanet │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liliate_id=24145602&with_phoney.yandex.ru;ya... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-natashkarola.irr.ru%2Fviewforum/MsgList.html... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26900/technics-technics-t... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&city[7]=23239330794,25826044_Black_lis... │ 21 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?price_till beli.php?cx=015216684_36 │ http://komme%2F27.0.1453.116 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694,978825315f373400/det... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691_ru_17832523.html_par... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1) AppleWebKit%2F537 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/world/photo/41/62b1dfa450/3/women-clother%26tms%3D%26ev_ltx%3D... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/forum%2Fukhov/l... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27025&Select[4][]=32598.h... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/basketshop.ru/yandsear... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265228.html?1=1&cid=577&o... │ 21 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://wildberrior/uphold │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo44953.116.php?t=4... │ http://irr.ru/index.php?showalbum/login=ko&page=0&view.aspx?group_cod_1s=85&key... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/?from │ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/houses/passenge... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-dance/index.ru/?favorite_off=1&encoding&hl=\... │ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logino-s-grigerator/page1=&input_age1 │ 21 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cars/commeddesk.ru/google_s&12.5.746.59954.30 (KHTML, like/\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/logii-bin/click.cgi%3Fsid%3D158195,97987231-9... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26737865/?page/12186/#/ec... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ramblery/pic/893985650697... │ http://smeshariki.ru/obucheyelants │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login.html?1=1&input_who1=2&input_who2=1&inpu... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/club.ru/anime-zone.ru/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929&from%3D%26custom=0&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dietsik.ru/razdel_id=111,7,700&w=728x90.html... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-brie... │ 21 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739353/details.... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2186/detail.aspx#location... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification%2F4.0; XBLWP7; ... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kupalnik │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/9-0--navam-zhien... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741465][from]=&input_wit... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_uid=1147... │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login=uzpp2XnEw&bvm=bv.49784469][from │ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 20 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-Larki-i-korobeg-1124-95367/guestblowinp... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26219&wi=1280&lo=http://w... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estatic.diary.ru/... │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=58&Selectronics-technics/k... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/yandex.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b706234651&op_uid=1&b... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?er=2&text=\xD0\xBA\xD1\x83\xD0\xBF\xD0\xB8\... │ http://irr.ru/index.php?showalbum/login=razer2.moikrug.ru/recipes/shop.spb │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&price │ 20 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://video.yandex.php │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=NeIdeaCenternet Explorer&aV=5.0 │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertificirovka.ru/noteating-i... │ 20 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271161076&st=261&t=170977... │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313163307/?from]=&int[15... │ http://che.ru/produkty_zarubezhei-niepochekhly │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate=0&ReturnUr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604370757034dea482207549... │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_api.php?id=7262882,9454472&op_product_n... │ 20 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/cars │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-karbox=0&top=0&category/1961/#images/00... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26637&model=1705.html?1=1... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumilora481 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-iulyanovskaya-obl/lyubvi?page=166733&eid=485... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27502/detail/?folders/#pa... │ 20 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt=13733129/room │ http://komme%2F27.0.1453.116 │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://video.yandex.php │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626u1zIq0SGLXCI&where=al... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=240&u_cd=242035165&input_who2=1... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news_id_72387877055/nu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?sort=popup/casualg... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikulina.ru/real-estate/ou... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 19 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/filmId=eRaB4pYAXCI │ http://komme%2F27.0.1453.116 │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.ru/daily │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBB\xD0\xB8\xD0\xBA\xD0\xBE\xD0\xBB\xD0\... │ http://irr.ru/index.php │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260540718534/?dateOn=1&bo... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login=perfect.yandex.ru%2Fkategoriya%2F537 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261921&pr=2441185112.html... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26672655462.html?city.ru/... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 19 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostok.ru/cars │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/check=1&redir=1&lang=a... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671&Destige-all.html_par... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27404895,95923.html%26cus... │ 19 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2638/?from=&raceTo=&power... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313437&pvno=2&evlg=VC,2;... │ http://irr.ru/index.php?showalbum/login-rizova.ru/look/timashirtsevm.cofe │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6HS │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166333/price[price_till]=&pri... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F_liveresum... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27355f3132366336601&uuid=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.php?f=11340.1j1j2.12...5998-103358071/8/page... │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/00007/10/1320006&p... │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto_repai... │ 19 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.15751 Safari%2F5.0 (Windows │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://smeshariki.ru/obucheyelants │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2675406828ac956028692581/... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26968794618/irr.ru/real-e... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://obninsk/detail │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2629&lr=65&rstr=-213&text=back=False&withmos... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2702483,631;IC,444041%2F&... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?search?text=\xD1\x80\xD1\x83\xD1\x81\xD0\xB... │ http://irr.ru/index.php?showalbum/login-inadlinny-sched_car=0&city=0&price=18&p... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=http://video.yandex.ru/real-estate │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26669E116-1-1550046560013... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274026181891&rn=52&brand=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/dlia-zhiensk... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-165&jenre]/49047&lr=163&text=samsung ga-moda... │ http://irr.ru/index.php?showalbum/login-2-komn-v-na-92f5-6ccf-fef3-013f9f926a21... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&checked=0&state/room=10002-g-v-program... │ 18 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ru/index │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5 │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?elmt=popular&where=all&film/723/num │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/restate/out-of-town-resh=1&cnt=1373... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2012-recept-Ragu-iz-2-x │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupaljinik-slidi/places/?PAGEN_1=2 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=deltec&type=citymo=&version%2F4.0 (Linu... │ 18 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27534.30 (KHTML, like Gec... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kochtinsk.pulscendinskiy-krasnodar.irr.ru │ http://irr.ru/index.php?showalbum/login-kuplyuskij/zapchastorii_state/out │ 18 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login.moikrug.ru/catalog/otchenko-ul-advert27... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zzzi.ru/a-shop and blademas/?id=1&marka=0&ma... │ http://irr.ru/index.php?showalbum/login-2003prev=/search/index.ru/meteor.html%3... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\... │ 18 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278453&with_exchange=0&ex... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=367132&pv=2... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27132069304;IC,1511e8d158... │ 18 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27071038_114736895,923401... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x9A\... │ 18 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/8018&l=malkogo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kanza_tab_2499472&lr=1074&sort=popular │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/?target=search?... │ http://irr.ru/index.php?showalbum/login-bigutensiysk.irr.ru/regular&bid=3205&bt... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27420780790931.html5/v12/... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-natura.ru/jobs-education=post_137336ID0... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-21102&text=\xD0\xB1\xD0\xB0\xD0\xB1\xD0\xBA\... │ http://irr.ru/index.php?showalbum/login.mospsy.ru/super-na-kostronics/tv-audio.... │ 18 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/obuv%2F │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685&numphoto=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertimeshariki.ru/cgi-bin/cli... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626p/ │ 18 │ +│ 1 │ 0 │ 0 │ https://diary.ru/magnitogorsk │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260908861%26point-peter=&... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sien-zhienskaya-i-kvartir.html?id=1955451-01... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1453.116 Safari%2F8536 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeSearch?text=\xD0\xB2\xD0\xBA\xD1\x83\xD1... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=yators/?jumping.ru/series.ru/priceup&page=3&... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga1788778.137329TVmbFNmbVNaR0YwW$UyNDg4fxS... │ http://irr.ru/index.php?showalbum/login-sienskaia-moda-zhienskikh_rabotjaga.ru/... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=36427929&stat... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinger/\xD0\x93\xD0\x90\... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929750%26ar_sliceid%3D2... │ 18 │ +│ 4 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691c352005&pvno=2&evlg=V... │ 17 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27422544/3/womens.ru/ufa.... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/cars/communalux.ru/dos... │ http://irr.ru/index.php?showalbum/loshaya-obl.irr.ru/film/35562C?analytics/kto-... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru%2Ffilm/4858?pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271527091/frl-2/bage-2.ht... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.103402.html%3Fhtml │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#7878... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=artira-Lyubyat │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.aspx#location │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=yes&y1=2013-07-07.ya.ru/5_search?text=\... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.15.html?1=1 │ 17 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://aliningrad │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266149_51928/detail.ru/ka... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%26rleurl%3D%26CompPath%... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2613168312.71 Safari%2F__... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2670308&po_yers=0&price_o... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=8&ch=UTF-8&ifr=1&av=1&nm=1&ved=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_Bolers-device.aspx#commersanta_premiery... │ 17 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6HS │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-dlia-zhiensmed.ru/el... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginyazevskaya%2F5.0 (Windows NT 5.1) Prestorygoo... │ http://irr.ru/index.php?showalbum/login-kupilomatic.aspx#location=rr&days&city&... │ 17 │ +│ 1 │ 0 │ 0 │ http://bdsmpeople.ru/register2123 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logistereda.ru/photo/70861/6#f │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263161366&bid=2823&numpho... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26041.htm%3Fsid%3D0%26pz%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowthreadreplies=24&ids=74&cu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27595,9305f3931339322%26n... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313&ussp=mstp&usln=1&inp... │ http://irr.ru/index.php?showalbum/login-3767436/roomootofile/obzor.com/iframe │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273363331251798796&op_seo... │ 17 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/stan/index.kz/yandex │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-search%3Futm_source=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031323532363&win=70&mode=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertistia.html?partment/searc... │ 17 │ +│ 3 │ 22 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ 1 │ 0 │ 0 │ http://bibieters_sig=5ea8QizwGSPy0yGcm14ATH74D4Bw&usg=AFQjCNHxMZlonova.ru/p1847... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://diary.ru/forum/intries │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_style... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261636/detail/odnoklassim... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lenfiki-zhienskaia-moda-muzhchin-sitafa ishq... │ http://irr.ru/index.php?showalbum/logical.ru/link=11485-9065383235348%2F&sr=htt... │ 17 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/messar.ru/professig │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-futbolki-k... │ 17 │ +│ 1 │ 0 │ 0 │ http://acase.php?input_who1=2&input_who2=1 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.10 │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733145625/details... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694&option%2F12.14&he=76... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-irina19910735%2F27.0.1453.116 Safari │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268814453957595,94406/det... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26618531&t=111246.html?p=... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=Like Gecko) Chrome%2Fpotnik=1&price_do=&curr... │ http://irr.ru/index.php?showalbum/login-the-poxudet_sponsor=&o=6000708498/?caut... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b76faact/less=1&ru=1&... │ 17 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-53584715,1327288/belgium/arch=1&themec.... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=bestwo.diary/details&id=9160/0/posti.ri... │ 17 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 16 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/category=cinem rasmusic │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098707209463401090/deta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267044005320AA76)&vendor_... │ 16 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search?clid=19554786.0.8.0.2.2003558_3497926... │ http://irr.ru/index.php?showalbum/logie-niz-doktops/electronics/4185570c72 │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-herokee_tatus=1&rm=18606bAxFEcQT6smBB4W... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27034195,9520160173/5/wom... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgas.rQRAX2Ua3IF1iHJcaz4ATv34DABw │ http://irr.ru/index.php?showalbum/login/?page=1024&wi=144438-88-3906740/currenc... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search/cuZXdzJTJGJmxyPTI4fQ,... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&pt=b&pd=7&pw=2&page5... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-plan... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26396284046.xhtml%3Fhtml%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate/out-of-tow... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260612d7cf.4082813,74,756... │ 16 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login.aspx?sle=13&s_yers=0&page_type=0&door=0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/page=91552&q=\... │ http://irr.ru/index.php │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-krasok.html_params%3Drhost%3Dad.adriver │ 16 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/movinki... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnaja-prost-petersburg/detail/?fold... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?&clients-sale&siteurl%3D//ads/search?text... │ http://irr.ru/index.php?showalbum/login-kapusta-advert273786/foto-5/#photo=2817... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661232&streamfood.com/if... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiensmed.ru/dl/\xD0\xB7\x... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti/redmonds %2F offset=403134333.2201560&c... │ http://irr.ru/index.php?showalbum/login-v40-velopiter.feriod=0&scroll_to_auto.r... │ 16 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-57548811426&text=\xD0\xBB\xD1\x83\xD1\x87\xD... │ http://irr.ru/index.php?showalbum/login-coolonellana-Molodilnik.ru/index.php?vi... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166303133334%2F&ei=horia+iudi... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26765.html_params%3Drhost... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/70948/35.htm?id=... │ http://irr.ru/index.php?showalbum/logiy-luchaiev%2F&sr=http:%2F%2Fwww.bonprix c... │ 16 │ +│ 1 │ 0 │ 0 │ http://histore/profile;u= │ http://irr.ru/index.php?showalbum/login-kupe-20013&uuid=1373356164564_1sort/sta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=findjob.ru/planet.ru/index.ru/carinov.h... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2755597.html%3Fhtml?1=1&c... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/showtopic,803813.html&... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_catalog/1250/?itemsg/cd... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert260477/cities/visas/exp?s... │ 16 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://video.yandex.php │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27429&input_bdsm_position... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2728024/detail/508/?instv... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26887301/Zona/simferopol.... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-153-4b9c4.4331626.htm?size%3D0%26rleurl │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 16 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect │ http://komme%2F27.0.1453.116 │ 16 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://msuzie-shop/premiery-c-38208_2.html │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/posts&q=\xD0\xB2\xD0\xB5\xD0\xB4\xD1\x83\xD1... │ http://irr.ru/index.php?showalbum/login-mistore/#CATALOG_LIST-s-ovosibirsk/deta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-marka=23&model&desting?field_town/search/pri... │ http://irr.ru/index.php?showalbum/login-492ea9&show/417582,9626512874":10157628... │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/sch/price][min]=41&lr=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27364229586121%26url%3D%2... │ 16 │ +│ 1 │ 0 │ 0 │ http://volgografiyah_27_iyunya_50_let%2FgetId │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/tv-audi/a7-spec=9894797179698712/p1/8... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-maritkiN │ http://irr.ru/index.php?showalbum/login-ladimir.irr.ru/remiery-telefon.ru │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333%26bid%3D1%26rleurl%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661251-6efa-d61f-fef3-01... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new=127201148][fr... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/7427510/detail/5... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti%2F%3Ff%3D100%&http://afisha.yandsearch&... │ http://irr.ru/index.php?showalbum/login-6030d.html_params%3Drhost%3D90%26height │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=view/5/item3963... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269899458/price/3815&pvno... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5.0 (Win... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logiste's a di galaxy-s4-story1.aspx#location... │ 16 │ +│ 1 │ 0 │ 0 │ http://yandsearch?lr=2&color │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-gorod/search?p=7&oprnd=9902.jpg&img_url=http... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27222.vk.me/u3166 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2753][from]=&pricedownloa... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new10152954vac │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2735030373434-152495.php?... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makeevka.ru/perm.irr.ru/slingvo/#1\xD0\... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313033393633310,932803][... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691.html?1=1&input_age2/... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26708662307][]=&selection... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-irinakai/page_num_read2306e4574&ei=Ot_rUfjPG... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2010000087378687/pic/8939375f303839303935373... │ http://irr.ru/index.php?showalbum/login-souse=2/path=39_1.html?1=1&cid=577&oki=... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumy.ua/search?text=\xD1\x81\xD0\xB5\... │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/?strict=5710... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/artira │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertists/736850/?item_no=737&... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2695/19545602cf94d77/repl... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikal.ru/search/room=1&dam... │ 16 │ +│ 1 │ 0 │ 0 │ http://forums/liiiervierk-suppohudeemvmesting/294465&op_categoriya │ http://komme%2F27.0.1453.116 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&model=1173... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=new&cad=rjt&fu=0&input_country_id=228&lr=961... │ http://irr.ru/index.php?showalbum/login-cam.shtml#objdesc=true&uA=Mozilla │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login/?do=ready-mansion%3D0%26url%3D%26bn%3D0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb=1&prepairs=0&city[1 │ http://irr.ru/index.php?showalbum/lounona-muzhchin-kupaljinik-chernyj-odnoe/san... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-4433140796851/detail/536180&all=False&i... │ 15 │ +│ 1 │ 0 │ 0 │ http://launcher-searchads/search │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781308;IC,238208836746/0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginsk.eu/ru/Pagesize=13&m1=07 │ http://irr.ru/index.php?showalbum/login-3muda/truction/vacancies/750207190765.h... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-album/login.2/second... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_produkty/kiev.org/forum... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26981583/page=1089592445/... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945HPS?analog/r10418/sort=price_do=200&site_off=1 │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F1.7.1364.172 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273389; U; Android 4.0.14... │ 15 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshop/id_art_type=7&s_yers │ http://irr.ru/index.php?showalbum/login │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273631253711/foto-6320166... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2724/?_h=search?text=\xD0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-goluboj-podserial&dfs=13 │ http://irr.ru/index.php?showalbum/login-haus.html#news/228670,257&pci=3012/frl │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#67 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266356163f39ea6f8/7a8745&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26605566254/room=1.6&wher... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/washes/built-in_two_ch... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?page37/?sta... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/state=1909644 │ http://afisha.yandex.ua/auto_id=0&with_photo.kurortmag.ru/razdnitsya-vishnury │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?Topic │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?transk.i... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginskikh-viana.irr.ru/GameMain.aspx?sle=1/house.... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://irr.ru/index.ru/show/414526863_112 │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-land_search?text=\xD0\xB0\xD0\xBC\xD0\xB1\xD... │ http://irr.ru/6323%26bn%3D27888895,963095425 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678&op_page=60000/curren... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list.html?typ=SMA&anbieter=aleks_evilkos.com │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/produkty%2Fplatj... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/index.ru/ange=0&s_yers=(3000&static.diary.ru... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2718599/photo=0&is_hot=0&... │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?Id=9582 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-tumbov.irr.ru/page1=&input_who1=2&id=29... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=alini... │ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liloveplanet.ru/futurer533/women.aspx?group-... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2631920&lo=http://person_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.1Uv1UfqCA8SonYC4BQ&usg=AFQjCNGB3pBUuKY1jJPP3... │ http://irr.ru/index.php?showalbum/login-tank-sale/search%3Fmode=&page_type │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2699364224073532663835386... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.php?city[1]=700003 │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26761,55.654289600/detail... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27515/418695&st=327-B110Q │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login=vladimir/page_type=0&expand_search?text... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?dok=001&rightbox/week&From=0&user │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/frl-4/trailer/view/3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-lential/secondary/details9.html_params%... │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page9/#14... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/gamemain.asp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-676216b8af/4fd00fa61b3185631821/page_ty... │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=25127691%2F... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2730675595,9292fa-d61f-fe... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27877437494,943082&stat_t... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27265484158197%26width%3D... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienshchin-planet.ru/myma... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1955451&lr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/ch/floore troubleclick... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_appliazh-pliance/mista-bez-uchaiev/000202&cl... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Ford-antent... │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 15 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 15 │ +│ 3 │ 123 │ 0 │ │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginy_name/3196906481/currency=6465373200&price=\... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2776/?date=0&doorov.irr.r... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-102-821922237&arrFilter2013/08-iH4AT5zIGQDA │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_type=&freetao.diary.ru/sea... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nashinger/users/search?textilead&353%26ev_pl... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert262997385f32313335781094&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2693_763613.html_params%3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/877/ru/buildin... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert276278-ploschaya_checked_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274298799461981/?date=129... │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9584%26pz%3... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.10 │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 15 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credir=1 │ http://komme%2F27.0.1453.116 │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://ekburg.irr.ru%2Fpuloveplanet │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=on&input_onliner... │ http://irr.ru/index.php?showalbum/login.html%26custom%3D%26CompPath.2; WOW64; r... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/gosthelp.ru/auto.ria.... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=on&in... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga664.1721/deti74.ru/animals-planet.ru │ http://irr.ru/index.php?showalbum/login=K-SR-B-13-9635095,9661/9#f │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/litlip/saint-peter557932E-8C62-4917%26ad%3D64... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2651734&pt=b&pd=7&pw=1&pr... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search?text=\xD1\x84\x... │ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 15 │ +└────────────────┴────────────────┴─────────────┴────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.126 user 1.188000 sys 0.004000 +D 07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +Run Time: real 0.014 user 0.188000 sys 0.004000 +D D (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +Run Time: real 0.019 user 0.264000 sys 0.000000 +D " = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) ORDER BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))); +Run Time: real 0.012 user 0.164000 sys 0.000000 +D +D +D +D +D '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(URL) > 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +┌──────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├──────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 102341 │ +│ http://komme%2F27.0.1453.116 │ 51218 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18315 │ +│ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16461 │ +│ http://irr.ru/index.php │ 12577 │ +│ http://irr.ru/index.php?showalbum/login │ 10880 │ +│ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 7627 │ +│ http://irr.ru/index.php?showalbum/login-kupalnik │ 4369 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 4058 │ +│ http://komme%2F27.0.1453.116 Safari │ 3021 │ +└──────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.064 user 0.792000 sys 0.000000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(Title) > 0 GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ Title │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ \xD0\xA2\xD0\xB5\xD1\x81\xD1\x82 (\xD0\xA0\xD0\xBE\xD1\x81\xD1\x81\xD0\xB8\xD1\... │ 122407 │ +│ \xD0\xA8\xD0\xB0\xD1\x80\xD0\xB0\xD1\x80\xD0\xB0\xD0\xB9), \xD0\x92\xD1\x8B\xD0... │ 82935 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA - IRR.ru │ 80958 │ +│ \xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\xB8 New Era H (\xD0\x90\xD1\x81\xD1\x83\xD... │ 39098 │ +│ \xD0\xA2\xD0\xB5\xD0\xBF\xD0\xBB\xD0\xBE\xD1\x81\xD0\xBA\xD1\x83 \xD0\xBD\xD0\x... │ 23123 │ +│ Dave and Hotpoint sport \xE2\x80\x93 \xD1\x81\xD0\xB0\xD0\xBC\xD1\x8B\xD0\xB5 \... │ 14329 │ +│ AUTO.ria.ua \xE2\x84\xA2 - \xD0\x90\xD0\xBF\xD0\xBF\xD0\xB5\xD1\x80 │ 14053 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA (\xD0\xA0\xD0\... │ 13912 │ +│ OWAProfessign), \xD0\xBF\xD1\x80\xD0\xBE\xD0\xB4\xD0\xB0\xD1\x82\xD1\x8C │ 10919 │ +│ \xD0\xA2\xD1\x80\xD1\x83\xD1\x81\xD0\xB8 - \xD0\xA8\xD0\xBE\xD1\x83\xD0\xB1\xD0... │ 10157 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.045 user 0.576000 sys 0.004000 +D AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 7479 │ +│ http://aliningrad │ 4791 │ +│ http://ekburg.irr.ru%2Fpuloveplanet │ 3584 │ +│ http://smeshariki.ru/obucheyelants │ 3064 │ +│ http://video.yandex.php │ 2887 │ +│ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 1084 │ +│ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 891 │ +│ http://afisha.yandex.ru/index │ 855 │ +│ http://sslow_13507.html?aspx?naId=6HS │ 521 │ +│ http://wildberrior/uphold │ 484 │ +│ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 289 │ +│ http://obninsk/detail │ 241 │ +│ http://diary.ru/forum/intries │ 208 │ +│ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 185 │ +│ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 185 │ +│ http://kurort/SINA, ADRIAN │ 157 │ +│ http://afisha.yandex.ru │ 132 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 124 │ +│ http://ssl.hurra.com/iframe │ 123 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 119 │ +│ http://stars-visa.html_params%3Drhost%3Dad.adriver.ru/catalog.php │ 105 │ +│ http://komme%2F27.0.1453.116 │ 83 │ +│ http://pogoda.yandex │ 80 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 79 │ +│ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 73 │ +│ http://video.yandex │ 71 │ +│ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 68 │ +│ http://wildberries.ru/daily │ 68 │ +│ http://smeshariki.ru/ru/index.ru%26bid │ 68 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 64 │ +│ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 64 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn │ 63 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 59 │ +│ http://sslow_135000008&position=search │ 58 │ +│ http:%2F%2Fwwwwww.bonprix.ru/topic │ 53 │ +│ http://sslow_13507.html/articles │ 52 │ +│ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 51 │ +│ http://rsdn.ru/rss.ya.ru/catalog │ 51 │ +│ http://ekburg.irr.ru/#lingvo │ 46 │ +│ http://pogoda.yandex.ru │ 45 │ +│ http://sslow_13500000%26rnd%3D2788881.html │ 44 │ +│ http://maps#ru_5_ru_22106.377648194,975924][to]=&int[14270pa106&op_uid=17759/6#... │ 42 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 37 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 37 │ +│ http://video.yandex.ru/film/46351/frl-2/bage │ 36 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 35 │ +│ http://direct.yandex │ 34 │ +│ http://sslow_13507.html?aspx?naId=3X_3bhLcs3M │ 33 │ +│ http://gotovim-doma │ 32 │ +│ http://che.ru/produkty_zarubezhei-niepochekhly │ 31 │ +│ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 30 │ +│ http://video.yandex.ru/Newsletter │ 29 │ +│ http://sslow_13507.html?aspx?naId=6D8IzMGys3M │ 29 │ +│ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ http://video.yandex.ru │ 28 │ +│ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 28 │ +│ http://notes=1/currency │ 27 │ +│ http://sslow_13507.html?aspx?naId=649&state/out-of-town=\xD0\xA5\xD0\xB0\xD0\xB... │ 27 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 26 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 26 │ +│ http:%2F%2Fwwww.bonprix.ru/tambov │ 24 │ +│ http://kinopoisk.ru/shoppich.ru/search?clid │ 24 │ +│ http://wildberries │ 23 │ +│ http:%2F%2Fwwwwww.bonprix.ru/searchAutoSearch?text=\xD0\xB2\xD0\xB5\xD0\xBB\xD0... │ 22 │ +│ http://myloveplanet │ 20 │ +│ http://stars-visa-litraj.txt","lpu":"http://pogoda │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/secondary │ 20 │ +│ http://msuzie-shop/premiery-c-38208_2.html │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://smeshariki │ 19 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 19 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ http://irr.ru/6323%26bn%3D27888895,96772,97436 │ 18 │ +│ http://kinopoisk.ru │ 18 │ +│ http://nepogoda.yandex.ru%2Fproducts/search?text=subscripts/busineshop │ 17 │ +│ http://wildberries.ru │ 17 │ +│ http://kinopoisk.ru/catalog/9902224 │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://direct.yandex.html │ 17 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 17 │ +│ http://irr.ru/6323%26bn%3D27888895,963095425 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 16 │ +│ http://afisha.yandex.php?gidcar=36281664 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://auto.ria.ua/search │ 15 │ +│ http://direct │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ http://irr.ru/index.php?showalbum/login-kupalnaya-obl │ 15 │ +│ http://kinopoisk.ru/odessya │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 14 │ +│ http://ekburg.irr.irr.ru/maker │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.yandex │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.mail/rnd=0.9788 │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://auto_many_to_auto.ria.ua/igrush43/ │ 13 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 13 │ +│ http://afisha.yandex.ru/cars │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 13 │ +│ http://love.ru/a-myprofi │ 13 │ +│ http: │ 13 │ +│ http:%2F%2Fwww.bonprix │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://real-estate/aparther/offiliates/corruption/russinsk │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://on-online=on&accetti │ 12 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 12 │ +│ http://samara.irr.html5/v12/?from]= │ 12 │ +│ http://en.lyrsenses/zamba_zaborah_coldplay=1&gearbox │ 12 │ +│ http://kinopoisk.ru/saledParams │ 12 │ +│ http://zvukovo/hondar/2007&state/renlew/rigma.ru/scribed │ 12 │ +│ http://pogoda.yandex.php?SECTION │ 12 │ +│ http://msk/platia-nashing/vanny.diary.ru/moscow │ 12 │ +│ http://video.yandex.ru/GameMain.E6smreQhiu_hXR4&where=all&film │ 12 │ +│ http://nizhnieiene/p17378705/currency=1&with_photo-ideapadeno │ 11 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 11 │ +│ http://news/6483731559676/Unlocknotebooks/m83/800_D_Black_list │ 11 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty/photo-12/#imag... │ 11 │ +│ http://msk/platia-nashing/vanny.diary.ru/sale/liver │ 11 │ +│ http://video.yandex.ru/GameMain.aspx#location │ 11 │ +│ http://guid=6&pw=6&pv=13 │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 11 │ +│ http://wildberries.ru/rost.html?1 │ 11 │ +│ http://smeshariki.ru/?win=82&stat=1&page/196264&pt │ 11 │ +│ http://pogoda.yandex.ru/catalog/jokers │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 11 │ +│ http://en.lyrsenses/zamba_zabudtrimazok.html?page=12&prr=http://fap1.adrive_typ... │ 11 │ +│ http://bonprix.ru%26bid │ 11 │ +│ http://loveplanet.ru/GameMain │ 10 │ +│ http://bdsmpeople.ru │ 10 │ +│ http://liver.ru/cheboksicily/foto.aspx?sort=newly&trafkey │ 10 │ +│ http://video.yandex.ru&pvid │ 10 │ +│ http:%2F%2F%2Fwwww.bonprix │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://club.ru/spokoiteli/photo37775280000 │ 10 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 10 │ +│ http:%2F%2Fwwww.bonprix │ 10 │ +│ http://auto_id=240&n=13901038 │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://smeshariki.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 10 │ +│ http://slovariant_new3077940810/detail │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://en.lyrsenses/zamba_zabor_id=1012_blank%26site │ 10 │ +│ http://sslow_13500000%26rnd%3D2788881.html?parts/passe │ 10 │ +│ http://pogoda.html%3Fhtml_params%3Drhost%3D43 │ 10 │ +│ http://irr.ru/index.php?showalbum/logout%26verstova.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://pogoda.yandex.php │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film/6781203.html?id=242037047/detai... │ 9 │ +│ http://mysw.info/blog/sankt-peter%3D1216/00001216629 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://e96.ru/albumfotok-15-fotki │ 9 │ +│ http://alpari.yandex.html?html_param=0&users/#page/Search/ab_dob%2Ffieiie-razvo... │ 9 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://bonprix.ru/catalog/8570/1006790 │ 9 │ +│ http://b2b.testered/main/discuss/matched_country=-1&top=0&cityid=1024&wi=1366&o... │ 9 │ +│ http://svpressa.ru/topic=17082630 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://bonprix.ru │ 9 │ +│ http:%2F%2Fwwww.bonprix.ru/filmId=8j5j97LRs3M&where=all&sources │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/#win_13.html_p... │ 9 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/4744089758 │ 9 │ +│ http://nail=Yes&target=search │ 9 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_produkty%2F&sr=http://slovaria │ 9 │ +│ http://rlsnet.ru/vacancy/view_type_id=9677548268010367 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ https://m.myloveplanet.ru/forum/abrika-kobelenie_nebestsenal │ 8 │ +│ http://irr.ru/imagecache/wm/2013&where=all&filmId │ 8 │ +│ http://poisk.ru/price_ot=&price_ot=&price │ 8 │ +│ http://zapchast.com/iframe-owa.html?1=1&cid=577&oki=1&op │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 8 │ +│ http://afisha.yandex.php?t=141880517 │ 8 │ +│ http://zarplata.ru/velika_all=\xD0\xBE\xD1\x82 │ 8 │ +│ http:%2F%2Fwwwwww.bonprix.ru/news/222974895&op │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://fore=3&marka=0&top=0 │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://direct.yandex.ru/catalog │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96777&oki │ 8 │ +│ http://video.yandex.ru&xdm_p=1#item/search │ 8 │ +│ http://en.lyrsenses/zamba_zabor/bedroomolsk │ 8 │ +│ http://zarplata.ru/?p=12977-B26358/currency=RUR/page=1080&wi=1024&lo=http://rzh... │ 8 │ +│ http://masterh4.adriver.yandex │ 8 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ==&page_avtomodules.php?f=100&ref... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://mastered/main.aspx#location=1&bc=3&ct=1&pr=60322056107100919/page5/?_h=s... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://omsk.mlsn.ru │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96779/87 │ 8 │ +│ http://che.ru&pvid=13733142835/100/topic,5240556895&ch=UTF-8&sF=11,7,7,0 │ 8 │ +│ http://smeshariki.ru/GameMain │ 8 │ +│ http://afisha.yandex.php?gidcar=367108851%2Fr%2F1 │ 8 │ +│ http://wildberries.xml?from]=&input │ 8 │ +│ http://love.ru/?p=17059 │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/index.php?showalbum/login-kupit-topy%2Fplatjie-gotovlexandex.html... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 8 │ +│ http://auto.ria.ua/auto_id=24126629/0/index.ru/real-estate/out │ 8 │ +│ http://victor?page_type=city.stol-yar.ru/cars │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://video.yandex.ru%2F&sr=http://loveplants/65398f55 │ 7 │ +│ http://kinopoisk.ru/ch/feed/letniaiaprice/1609 │ 7 │ +│ http://real-estate/aparts/Aquarevski │ 7 │ +│ http://video.yandex.ru/a-album/login-vitiju/photo │ 7 │ +│ http://bonprix.ru/social/product_id │ 7 │ +│ http://moscow/detail/5552/0/2792834&m=111,7,7,5 │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 7 │ +│ http://irr.ru/Registered/main/topnewsru.com/page=6 │ 7 │ +│ http://irr.ru/index.php?showalbum/login-kapustics?sort=pogoda.yandex.ru%26bt%3D... │ 7 │ +│ http://bonprix.ru/catalog/8570/14139489 │ 7 │ +│ http://afisha.yandex.ru/\xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB0/\xD0\x91\xD0\xA1\xD0\x... │ 7 │ +│ http://irr.htm?from]=&int[85][from]=&input_vsegodnyie │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://love.ru/?p=1#country=&op_seo │ 7 │ +│ http://bdsmpeople.ru/niktory/shtory/308/roomed.ru/p59473682740295 │ 7 │ +│ http:%2F%2Fwwwww.bonprix │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 7 │ +│ http://myloveplantrackIt?tid │ 7 │ +│ http://spb/event=big&marka=84&model=0&auto_id=0&s_yers=0&pv=10&can_be_check_PP │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://pogoda.yandex.ru&pvid=1 │ 7 │ +│ http://irr.ru/index.php?showalbum/login-a-5-advert27114 │ 7 │ +│ http://video=0&is_hot │ 7 │ +│ http://bdsmpeople │ 7 │ +│ http://irr.ru/index.php?showalbum/login-zk34/pages/0001216629 │ 7 │ +│ http://svpressa.ru │ 7 │ +│ http://money.yandex │ 7 │ +│ http://gotovim-doma.ru │ 7 │ +│ http://afisha │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://video.yandex.ru/ekt │ 6 │ +│ http://omsk/evential/house.ru/catalog/kitchedule=213-606361653965283 │ 6 │ +│ http://video.yandex.ru%2Fkategory_id │ 6 │ +│ │ 6 │ +│ http://afisha.yandex.ru%2F%2Fmail/169 │ 6 │ +│ http://love.ru/?p=1#country=-1&sq_liver.ru/kyrgyzstan │ 6 │ +│ http://bdsmpeople.ru/film/64544.690022.rar.html_params%3Drhost%3D_black_list=0&... │ 6 │ +│ http://stars-varenok.ru/16745959680706/800_0.jpeg.html%3Fhtml5/v123593 │ 6 │ +│ http://afisha.yandex.ru/catalog=on │ 6 │ +│ http://bdsmpeople.ru/GameMain │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://v102.ru/investate/apartments-sale │ 6 │ +│ http://wildberries.ru/search │ 6 │ +│ http://omsk/evential/housession%3D0 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://video.yandex.ru/GameMain.aspx#location/page_type=category │ 6 │ +│ http://afisha.yandex.ru%26bt%3D43%26anbietersburg │ 6 │ +│ http://direct.yandex.ru/refererprofile%2F2.10 │ 6 │ +│ http://video.yandex.ru/a-topy │ 6 │ +│ http://rukodel=0&sort=newly&trafkey=2750 │ 6 │ +│ http://moscow/details │ 6 │ +│ http://smeshariki.ru/world/photofider_credit=0&view │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://novosibirsk.irr.ru%26bid │ 6 │ +│ http://irr.ru/index.php?showalbum/login-12.html%26custom │ 6 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 6 │ +│ http://solutions.diary.ru/realtitroenie_v_jurman.ru/albums/frame-owa.html?stric... │ 6 │ +│ http://mr7.ru/newsru.com/iframe_right%3D43 │ 6 │ +│ http://autodoc.ru/real-estate/apart │ 6 │ +│ http://smeshariki.ru/catalog │ 6 │ +│ http://edp2.adriver.ru/hocketshop.ru/moscow/detailanude │ 6 │ +│ http://povari.yandex.ru/greecondary/Products_id=&auto_vaz_2111 │ 6 │ +│ http://video.yandex.ru/catalog │ 6 │ +│ http://ereal-estate/rent │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://msk/platia-nashing/vantralitsa_transion │ 6 │ +│ http://3dnewsru.com/iframe_right.html?1=1&cid=51538 │ 6 │ +│ http://afisha.yandex.php/board,39.04839 │ 6 │ +│ http://novo/detail.aspx?group_cod_1s │ 6 │ +│ http://bdsmpeople.ru/saledParams=rhost%3D43%26bid%3D1 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://kalininmyclonus1 │ 6 │ +│ http://forum/topnews/22294&op_category │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://auto_hyundai_sarator │ 6 │ +│ http://love.ru/?p=17055335 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://real-estate=week/page=1&expand_search?film/298677435615.html │ 6 │ +│ http://afisha.yandex.ru/mymail.php │ 6 │ +│ http://video=0&with_exchangeType │ 6 │ +│ http://afisha.yandex.ru/index.ru/recipe │ 6 │ +│ http://koolinar.ru/port.ru/doc │ 6 │ +│ http://kinel-lab.com/rus/20130709_117485994,93304&op_seo_entry=1&gearbox=0&type... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ https://slovakia-600dd903c07022,101595,91194&op_seo_entry │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://diary.ru/exp?sid=3205 │ 6 │ +│ http://video.yandex.php?search?text=\xD0\x9A\xD0\xBE\xD0\xBD\xD1\x8C\xD1\x8F\xD... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://video.yandex.php?from]=&interapy-wkti/ &cd │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://love.ru/ru/irk/event/search/ │ 6 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D8393224 │ 6 │ +│ http://kinopoisk.ru/catalog │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://auto_volkswagen/vologdano/il_dlya-dnevka.ru │ 5 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 5 │ +│ http://barnaul/details/?cauth │ 5 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD0\xB5\xD1\x80&where=... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://metal-lodku-Obzor │ 5 │ +│ http://sp-mamrostova │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 5 │ +│ http://tp66.ru/exp?sid=3860217/rooms=2/men.aspx#location%3D0%26rnd │ 5 │ +│ http://zvukovo-gorodsk │ 5 │ +│ http://rmnt.ru/search/offilia_Sovetov_living_chamber/?78142 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://e96.ru/movies/614418821/artir.ua/search │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 5 │ +│ http:%2F%2Fwwww.bonprix.ru/?id=2013&where=all&filmId │ 5 │ +│ http://video.yandex.by/?state_id=&auth=1..630;IC,7711588 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_seo_entry=&op_category_... │ 5 │ +│ http://povari.yandex │ 5 │ +│ http://slovari.yandex.ru%26orderovskij-index.ru │ 5 │ +│ http://tks.ru/cat/publish-cherkalnaya-ttpodporyadushek │ 5 │ +│ http://video.yandex.ru/GameMain.aspx?Link │ 5 │ +│ http://slovarenok.com │ 5 │ +│ http://auto.ria.ua/auto_id=241269.html?1=1&cid=2127970 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://rustnye-sht-riemnikoi │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://slovari.yandex │ 5 │ +│ http://afisha.yandex.php?r=23436303135353.html?1 │ 5 │ +│ http://auto_volkswagen-Palities/horobki │ 5 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 40007&pt │ 5 │ +│ http://en.lyrsenses/zamba_zaborah_chamberk │ 5 │ +│ http://radio&planet.ru/work.ru/catalog │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 5 │ +│ http://love.ru/product_id=0&po_yers=0&po_yers=2&refererro/model=1346488078722&c... │ 5 │ +│ http://topnews.ru/GameMain.aspx?group_cod_1s=1983&pt=b&pd=9&pw=0 │ 5 │ +│ http://myloveplanet.ru/v14572&lb_id=13000001216629 │ 5 │ +│ http://sslow_135000008&position=search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 5 │ +│ http://real-estate=week&m=Dvigenie.html?option │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://pogoda.yandex.php?gidcar │ 5 │ +│ http://autodoc.ru/moscow │ 5 │ +│ http://bibidohertki-i-OOOO_REPORT/07_2013 │ 5 │ +│ http://avtomobile/motory.ru/comp.ru/view.php │ 5 │ +│ http://loveplanet.ru/mymail/rudi │ 5 │ +│ http://video.yandex.ru/firms.turizm │ 5 │ +│ http://video.yandex.ru%2FkategoriendflowerTo=&powerTo= │ 5 │ +│ http://auto.ria.ua/auto │ 5 │ +│ http://msk/platia-nashing/vannyie-product_id=1841&page2 │ 5 │ +│ http://auto.ria.ua │ 5 │ +│ http://nizhnieiewva88/photo/101246465376&cmd=show-to-buchaiev-pugache=51db32a68... │ 5 │ +│ http://direct.yandex.ru/index │ 5 │ +│ http://tks.ru/cat/publish-chemec.ru/search?filmId=CktclMBmUXI │ 5 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D158197%26width │ 5 │ +│ http://club.ru/cinema/movies/no-pos │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://kinopoisk.ru/spb.pulscen.ru/exp?sid=3159&op_category_id=&auth=0&checked=... │ 5 │ +│ http://holodilnik-rp-ploschaya-obuv/?ci=1280&with_video=0&choosOyg==&op_uid=111... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://wildberries.ru/real │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://slovariant_neu%3D1%26bid%3D1216/0001216629%26bt%3Dad │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://md.mirkovskaya-obl.irr.ru/jobinmoscow │ 5 │ +│ http://wildberrior/kia/ │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://povari.yandex.php?showalbum/login.pl?cl=all&film/497794,90458 │ 5 │ +│ http://jcmotorom-921205&bt=7 │ 5 │ +│ http://loveplanet.ru/\xD0\xB0\xD1\x80\xD0\xBE\xD0\xBC/curre-ap-i-showalbum/loui... │ 5 │ +│ http://en.lyrsense.com/obshchin-idieiala │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://smeshariki.ru/topic │ 5 │ +│ http://video.yandex.ru%26bt%3Dad.adriver.ru/recipe/view/10217/?from │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://moscow/detail/Torgovuyu-organske.ru/real-estate │ 5 │ +│ http:%2F%2Fwww.bonprix.ru │ 5 │ +│ http://gaylyU │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://alib.mist.html%26custom%3D%26c2%3D278888592138 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://loveplanet.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 5 │ +│ http://alpari.ru/gallery/pic845274 │ 5 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 4 │ +│ http://loveplanet │ 4 │ +│ http://whoyougle.ru/images/images/00000i/specifiers.ru/image=1&furniture │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://video.yandex.ua │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 4 │ +│ http://video.yandex.ru/price │ 4 │ +│ http://bdsmpeople.ru/Web/Pages=1/feedsmag.ru/~\xD0\xBA\xD0\xBD\xD0\xB8\xD0\xB3\... │ 4 │ +│ http://irr.ru/index.php?showalbum/login-10618968476372773 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/filmId │ 4 │ +│ http://sslovarenok.ru │ 4 │ +│ http://afisha.yandex.ru/zoom.php?f=5162613838.html_partments │ 4 │ +│ http://auto.ria.ua/auto_id=0 │ 4 │ +│ http://samarskii_krai/tuapse/detail/result.aspx │ 4 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 4 │ +│ http://loveche.html │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://wildberries.ru/catalog │ 4 │ +│ http://afisha.yandex.ru%252f7769%252fe │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://echoradar-s-Levoshcha │ 4 │ +│ http://e96.ru/news/39733/page2=&input_sponsor=&o=1015219.html_partments-sale&pa... │ 4 │ +│ http://direct.yandex.php?formsof(INFLECTION_ID=30861/14365-4b11&state/apartment... │ 4 │ +│ http://love.ru/?p=1#countpage/vacancies/events/738/0/3/women.aspx │ 4 │ +│ http://diary.ru/catalog=on&input_city[3 │ 4 │ +│ http://radio&planet.ru/marka=62&model=1178128455&pvno=2&evlg=VC,5 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://rasp.pl?cmd │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 4 │ +│ http://travel.ru/state/apartments-sale/rashinitit%2F537 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ https://smeshariki.ru/cinema/article10363136000001216629%26site_offilia_Sovets.... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://afisha.yandex.php?r=3&bs=&day │ 4 │ +│ http://video.yandex.php?view_type=2&driveresult.ru/replies │ 4 │ +│ http://auto.ria.ua/auto_id=63799.html_params │ 4 │ +│ http://ssl.hurranovskaya-ul-31-foto.ria │ 4 │ +│ http://kinopoisk.ru/saledParams%3Drhost%3Dad.adriver.ru/GameMain.aspx#location │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://smeshariki.ru/domchelkakh_location=search?text=\xD0\xBC\xD0\xB8vents │ 4 │ +│ http://vkirovoe-tourisma │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboy07/... │ 4 │ +│ http://smeshariki.ru/search/keukeru-soft │ 4 │ +│ http://guid=6&pw=2&pv=0&price_do=¤cy=1 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://card/windows)&bL=ru&cE │ 4 │ +│ http://kniga.ru/view=\xD0\xA1\xD1\x82\xD0\xB0\xD0\xB2\xD1\x80\xD0\xBE\xD0\xB2&w... │ 4 │ +│ http://afisha.yandex.ru/search │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://v102.ru/?s=Adaments-sale │ 4 │ +│ http://video.yandex.ru/GameMain.XYyZwYXRoPWEtbG9nb24vcG90Cw │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/real │ 4 │ +│ http://matched_car=373838928155755775482794,9453.116 Safari%2F537.36&he=10&s_ye... │ 4 │ +│ http://zarplata.ru/?p=12977-B26358/hasimages=1/page │ 4 │ +│ http://video.yandex.ru/GameMain.aspx#location-4.0.html │ 4 │ +│ https:%2F%2Fwwww.yandex.ru │ 4 │ +│ http://tks.ru/cat/publish-chernyjbelyj-9375966238&op_categoriya │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/social │ 4 │ +│ http://video.yandex.ru/realty/leaser_map=1/hasimay-2.html │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://auto.ria.ua/canel_pe_mascona Hilfigeratov/153228 │ 4 │ +│ http://nizhny novgorod │ 4 │ +│ http://video.yandex.ru%26target=search/ab_area=categorija80119 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://e-kuzbass.ru/a-shop │ 4 │ +│ http://guide.travel.ru/link │ 4 │ +│ http://victorhead.php?full&dom=780067167694.0; │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://kubikus.ru/search.php?r=4140211,1,7,7,7,7,0 │ 4 │ +│ http://afishi,Mudanted-belyj-974299099/guest-id=34089.html │ 4 │ +│ http://fitness/building │ 4 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/cart.php/cars/papago-d-plosch │ 4 │ +│ http://svpress_up.aspx#location[propfilter_pf[PODVAL]=&arrFilter][3463351841195... │ 4 │ +│ http:%2F%2Fwwww.bonprix.ru/real-estate/out-of-town/house │ 4 │ +│ https://produkty%2Fpulove.ru/gost/?page3 │ 4 │ +│ http://afisha.mail.aspx#locationalOffers │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/GameMain/dukhovyy │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadbor_sh... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http%3A//magnitogorod/page3/#over │ 4 │ +│ http://anketka.ru/bridget │ 4 │ +│ http://afisha.yandex.php?action/2741920 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://tks.ru/cat/public/gamemain.aspx#location │ 4 │ +│ http://love.ru/image=2&marka=84&model/mihailovo │ 4 │ +│ http://nepogoda.yandex.ru/search=1&target=search=0&can_be │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://kinopoisk.ru/searchAutoSearch=0&driver.ru/catalog/1/women.aspx#locationp... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://afisha.yandex.php?show=rlv&ru=1&expand_search │ 4 │ +│ http://love.ru/?p=1705 │ 4 │ +│ http://ssl.hurra.com │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://afisha.yandex.php?p=31&input │ 4 │ +│ http://loveche.ru/job/1162323&PAGEN_1=30&state │ 4 │ +│ http://video.yandex.ru/If yours.avtogsm.ru/animals/calculate │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://auto_volkswagen_cated_cartovskaya-obl.irr.ru/album/login │ 4 │ +│ http://rsdn.ru/details_103514,154;IC │ 4 │ +│ http://internet Explorer&aV=5.0 (Windows)&bL=en │ 4 │ +│ http://auto_s_product_name=\xD0\x9A\xD1\x80\xD1\x83\xD0\xB3\xD0\xBB\xD0\xBE\xD0... │ 4 │ +│ http://pogoda.yandex.ru/cooking_sm5_1148786993ab-417/photo/69363/26#formi.ru/co... │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboyzon... │ 4 │ +│ http://video.yandex.ru/topnews.ru/lanas-advert2713][to]=&int │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http%3A//edp1.adriverys/forum/view_type=city&custom=0&damages/0001216629%26bid%... │ 4 │ +│ http://inspelishchin-platjie-doma.ru/irkutsk.irr.ru │ 4 │ +│ http://auto_volkswagen_pass_1161967 │ 4 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD1\x82\xD0\xBE\xD1\x8... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://afisha.yandex.ru/content2.adriver │ 4 │ +│ http://en.lyrsenses/zamba_zabudka/photo-1/#page=0&sale/search?text=\xD0\x9C\xD0... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://auto_id=0&with_photo │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://b.kavanga.ru/?a=inneVolumeFrom │ 4 │ +│ http://smeshariki.ru/saint-petersburg-gorod/transfer/?id=7576149959760994861&op... │ 4 │ +│ http://arma/frl-4/transportnoy-kv-m-malchik.ru/show │ 4 │ +│ http://bdsmpeople.ru/film/64544.690078 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://tp66.ru/money.yandex.ru/albums_screenterval │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://irr.htm?from]=&int[1151;IC,112 │ 4 │ +│ http://afisha.yandex.ru&pvid=13733424 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_category_id=592b9e01c48ce9403%26bn%3D0%2... │ 4 │ +│ http://video.yandex.ru/GameMain │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://radiorecord.ru/login-m3w.html?1=1&cid │ 3 │ +│ http://video.yandex.ru%2Fplata.ru/ch │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ https://orenburg/?arrFiltersburg │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://afisha.yandex.php/topic104780204&op_uid=1954 │ 3 │ +│ http://afisha.yandex.php/tova.ru/uliya2076789599305953 │ 3 │ +│ http://afisha.yandex.ua/donetsk/urals │ 3 │ +│ http://afisha.yandex.ru/a-folders/misc │ 3 │ +│ http://afisha.yandex.ru/shop.ru/malta │ 3 │ +│ http://afisha.yandex.ru/project_price=&maxprice │ 3 │ +│ http://afisha.yandex.ru/kategoriya%2F5.0 (company │ 3 │ +│ http://afisha.yandex.ru/linkvac.php/board.php?topicseeng │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://romar/events/audio.ru/widget[]=vacancies/99.php?gidcar │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://irr.kz/realty/lease/3516093&pvno=2&evlg │ 3 │ +│ https://produkty%2Fplatjie-kuzbass.ru/newsru.com/iframe_right=0&auto_ria=0&meta... │ 3 │ +│ http://fuckfind=rent/view/2021/3 │ 3 │ +│ http://banantikov-nadushenie_orleona_server=sc.cheloveplant_11612/page │ 3 │ +│ http://radioscannerica/filmId=Ba_id=13733568414&city=\xD0\x9C\xD0\xBE\xD1\x81\x... │ 3 │ +│ http://kinopoisk.ru/service.ru/iframe │ 3 │ +│ http://samara.irr.ru%2Fproduct │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://video.yandex.ru&pvid=13735/?_h │ 3 │ +│ http://ssl.hurral=messages │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ https://slovakia-600dd903c06c999c226647639.html%3Fhtml │ 3 │ +│ https://slovakia-600dd903c07022,101595,9143531427800648_elit │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category_id=0&wi=16000&... │ 3 │ +│ http://sp-money.yandex.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://love.qip.ru │ 3 │ +│ http://auto_kia_30 │ 3 │ +│ http://kaluga/?ext=\xD0\xB3\xD0\xB5\xD1\x80\xD0\xBE\xD1\x8F\xD1\x82\xD0\xBD\xD1... │ 3 │ +│ http://sp-mamrostokonkursovet │ 3 │ +│ http://afisha.yandex.ru/forum.materinburg │ 3 │ +│ http://afisha.yandex.php?addriver.ru │ 3 │ +│ http://sp-money.yandex.ru/work rushki-sien-natalog/8570/page=0&expand │ 3 │ +│ http://love.ru/forum.cofe.ru/forum/view_type=city=790&Selectronics-technik │ 3 │ +│ http://astrobank.ru/image │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://forum/topnews/2229605699574.html?1=1 │ 3 │ +│ http://video.yandex.by/search/?target%3D43%26bid%3D2 │ 3 │ +│ http://direct&sortdirect.yandex.ru/imagesize%3D0%26ar │ 3 │ +│ http://wildberrior/bedroom]=&int[17][to]=&int[858 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://rmnt.ru/film/88677/russia/rio.ru/search?filmId=NNr6aJrm4s3M │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://bdsmpeople.ru/search │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://rmnt.ru/stars │ 3 │ +│ http://b.kavanga.ru │ 3 │ +│ http://video.yandex.ua/auto_id │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http:%2F%2Fwww.bonprix_ru}%2Fnizhniynovgorod/request-id │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://edp2.adriver.ru/catalog/181 │ 3 │ +│ http://video.yandex.ru/circle&state/out-of-town/houses │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://pogoda │ 3 │ +│ http://nigma.ru/product&op_category_name=\xD0\x91\xD0\xB8\xD0\xBA\xD0\xB8\xD0\x... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://svpress_w1t1042796786/6/?category │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://radiorecord.ru/catalog/idShare │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://afisha.yandex.ru/forum.donfiscategory │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://edp2.adriver.ru/jobinmoscow/detail │ 3 │ +│ http://kazan.irr.ru/location │ 3 │ +│ http://pogoda.yandex.kz/family │ 3 │ +│ http://msk/planet.ru/mymail.aspx#comme_me_saydinne │ 3 │ +│ https://produkty%2Fpulove.ru/voronezh-sien-zhienskaia-moda-zhienskaia-moda-zhie... │ 3 │ +│ http://video.yandex.php?topbloveche │ 3 │ +│ http://card/windows NT 6.1) AppleWebKit%2F5 │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com/iframe-owa.html?1=1&cid=577&o... │ 3 │ +│ http://tks.ru/cat/publish-chin-play.php?categoriya%2Fzhiensmed │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://omsk/evential/housession%3D0%26url%3D//ad.adriver.ru/link/justic/h2.php/... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty%2Ftanki │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/92054446660.ht... │ 3 │ +│ http://svpress/showbiz/photo.htm │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://loveche.ru/volzhskiy │ 3 │ +│ http://ussuriysk.irr.ru/catalog/premiere/628962851d7fd0b6eb17b321d336f5bc7de189... │ 3 │ +│ http://afisha.yandex.ru/tatatit_chto.php?industry │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://magnitka_1_series.ru/?favorite_id=636233644&op_category_id=937514 │ 3 │ +│ http://smeshariki.ru/a-phony │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://ekategoriya%2F9B206 Safari │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://smeshariki.ru/catalog/286/women.aspx │ 3 │ +│ http://svpressa.ru/content/search │ 3 │ +│ http://video_dvd/game/iframe-owa.html │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountpage │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://msk/platia%2Fzhienskaia │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://brand=498&pvno │ 3 │ +│ http://tp66.ru/search/?page=1&fuelRateTo │ 3 │ +│ http://lk.wildberries │ 3 │ +│ http://e96.ru/real-estate │ 3 │ +│ http://my.kp.ru/albumfoto-1/pol-2 │ 3 │ +│ http://holodilnik.ru/catalog │ 3 │ +│ http://povarenok.ru/files/eliteh.ru/perm.irr.ru/board,75.2013-07-09 │ 3 │ +│ http://personal/atlants/7292&xdm_c │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://smeshariki.ru/?win=82&stat=141882,373;IC,2552f48 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://sp-mamrostovestory │ 3 │ +│ http://love.ru/?p=1#country=&op_seo_entry=-1&target │ 3 │ +│ http://amobil-nye-pliazhnaia │ 3 │ +│ http://smeshariki.ru/goodavec/photo/6936325.html?id=223978/page=102 │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://love.ru/recipes/indows │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberries.ru/item_no=2&evlg=VC,0;VL,205;IC,14;VL,757138/currency=RUR/h... │ 3 │ +│ http://kaluzha-na-NovletedAutoSearch=0 │ 3 │ +│ http://irr.ru/index.php?showalbum/login-kupaljinik-chere │ 3 │ +│ http://irr.ru/washek-s-printom │ 3 │ +│ http://msuzie │ 3 │ +│ http://kinopoisk.ru/search │ 3 │ +│ http://smeshariki.ru/real │ 3 │ +│ http://afisha.yandex.php?app=membered │ 3 │ +│ http://afisha.yandex.php?ELEMENT_ID │ 3 │ +│ http://afisha.yandex.ru/lesyach-hotels │ 3 │ +│ http://3dnews.ru/?p=12636464/5#f │ 3 │ +│ http://afisha.yandex.php?id=727285 │ 3 │ +│ http://afisha.yandex.ru%26bt%3D90%26nid%3D1216629 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic=79799398/?_h=search.htm... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://str_ob.html?1=1&choosO8gPJSs3M&where=all&filmId=mAyiC7y6M2mGV2GoA9hFoN3q... │ 3 │ +│ http://product_brand=RAINBOW&op_cated_content/search/keup/en-ru │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory_id=577&search/ab_district/date_id=2271][from... │ 3 │ +│ http://love.ru/ru/irk/event=little&cated_country=-192.html?1=1&cid │ 3 │ +│ http://love.ru/?p=17057 │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostavia.travel.ru/s... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberries.ru/basket&ch │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://state/room=94720-recept-Salat-iz-glasya1lesyat │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://kinopoisk.ru/sessulyanovka.ru/photosessid=3205&bt │ 3 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD0\xB2\... │ 3 │ +│ http://li.ru/filmId=XpzlPj8P8gE&where=all&text=\xD1\x81\xD0\xBA\xD0\xB0\xD1\x87... │ 3 │ +│ http://you_hashkaf.ua/search │ 3 │ +│ http://auto_repairs=0&confiscategoriya │ 3 │ +│ http://wildberries.ru/GameMain │ 3 │ +│ http://povaria/chak_naytimes.ru │ 3 │ +│ http://afisha.yandex.ru%2Fobuv-sapozhkivka=23&price │ 3 │ +│ http://afisha.yandex.ru/hotel-agen-Goluboj-9730 │ 3 │ +│ http://notebooking pressa │ 3 │ +│ http://smeshariki.ru/GameMain.aspx#location │ 3 │ +│ http://afisha.yandex.ru/comment/search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://soft.oszone.ru │ 3 │ +│ http://pogoda.yandex.ru/real-estate │ 3 │ +│ http://auto_repairs=0&po_yers=0&price.ru/\xD0\xB6\xD0\xB5\xD0\xBB\xD0\xB5\xD0\x... │ 3 │ +│ http://video_dvd/ratesTypeSearch?text=\xD1\x87\xD0\xB5\xD0\xBB\xD0\xBE\xD0\xB2\... │ 3 │ +│ http://auto_id=0&engineVolumeFrom │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://kommersantamina │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://video.yandex.ru/personal/offeebe34c7e12944&op_product │ 3 │ +│ https://slovarenok │ 3 │ +│ http://pogoda.yandex.ru/vlas-moskovskaya │ 3 │ +│ http://slovari.yandex.ru │ 3 │ +│ http://afishers/story │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://v102.ru/investate/apartment/?id=137336IseNhcbx3J85GkHSnzgnsPdZUU&where=a... │ 3 │ +│ http://guid=6&pw=2&pv=0&with_video.yandex.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/photo/narod.irr.ru/katering=1&pr=569&s_yers │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://audio_video.yandex.ru/mosday.html?item=4#photo446962 │ 3 │ +│ http://alpari.yandex.ru/saint-petersburg.irr.ru/cars/page3 │ 3 │ +│ http://video.yandex.ru/extra │ 3 │ +│ http://dom.net/provoe-pervouralnaya/ChildGluZ19oZXJlci1kYXRpb25zPU4mbj0zJmlkPTM... │ 3 │ +│ http://trashbox.ru/book │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com.ua/kiev/detail.ru/auth=1..640... │ 3 │ +│ http://love.ru/ru/irk/event=little&category_id=731-643736&mode=1 │ 3 │ +│ http://auto_ford Mix).mp3.ucoz.ru/v1430497.html%3Fhtml │ 3 │ +│ http://state_shariki │ 3 │ +│ http://omsk/evential/housession%3D240%26rleurl%3D//ad.adriver.ru/marshavskaya-r... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://smeshariki.ru/cgi-bin/click.cgi%3Fsid%3D0%26pz │ 3 │ +│ http://kinopoisk.ru/registernet Explorer&aV=5.0 (Windows NT 5.1; ru-ru&cE=true&... │ 3 │ +│ http://video.yandex.ru%2Fkategory_id=9759527418 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberring │ 3 │ +│ http://video │ 3 │ +│ http://radiorecord │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://afisha.yandex.php?partments │ 3 │ +│ http://en.lyrsenses/zamba_zabor_polnitsa-s.narod.irr.ru/bank/otzyvy/12031%2F%23... │ 3 │ +│ http://auto_id=0&color=0&confiscategory_id=3205&bt=7&bn=1&bc=3&ct=1&prr=http:%2... │ 3 │ +│ http://balcon_caddy Club relove │ 3 │ +│ http://wildberries.ru/cgi-bin/click.cgi%3Fsize │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://video.yandex.ru/real-estate/out-of-town/house.ru&pvid=1&distreet_legkovo... │ 3 │ +│ http://loveplanet.ru/Bezli-all │ 3 │ +│ http://bdsmpeople.ru/show/39932/Itemid,40.0.html_params%3DfsSaHR0cDovL2pzLnNtaT... │ 3 │ +│ http://kinopoisk.ru/spb.pulscen.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&film/67... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_product_brand=4200&lo=h... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.ru/manga.ru/?rtext=\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB1\xD0\xB... │ 3 │ +│ http://smeshariki.ru/furniture.html5 │ 3 │ +│ http://ssl.hurra.com/iframe-owa │ 3 │ +│ http://saint-peter │ 3 │ +│ http://whoyougle.com/iframe/iframe_right.ru/spb │ 3 │ +│ http://lazarevskoe │ 3 │ +│ http:%2F%2Fwww.bonprix.ru/imagesize │ 3 │ +│ http://video.yandex.ru/realty/search/main.aspx?sort=popular │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://cxem.net/324487194836848 │ 3 │ +│ http://klubnich/zrh/ │ 3 │ +│ http://wildberries.ru/comment/search │ 3 │ +│ http://saint-petersburg-gorod/goodal │ 3 │ +│ http://sunmar.ru/cart&ch=utf-8&sF=11,7,700&aN=Opera&aV=9.80 (Windows │ 3 │ +│ http://un1.adriver.ru/page=30138117749516%252f110916%252fmedicinema/movie_ross ... │ 3 │ +│ http://myloveplanet.ru/passenger/kitched_country_id=4312&input │ 3 │ +│ http://wildberries.ru/comme%2F2.12.388 Version/1552/page │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://bdsmpeople.ru/index.by/ru/page=0&confiscategory_id │ 3 │ +│ http://gotovim-doma.ru/personal/commersant.ru/image=19&pvno=2&engineVolum │ 3 │ +│ http://krasnodar.irr.ru/yaransferapid │ 3 │ +│ http://jobs-education │ 3 │ +│ http://irr.ru/index.php?showalbum/logizer8/num-1/refremost │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://afisha.yandex.ru/sell/resident │ 3 │ +│ http://afisha.yandex.php?p=176d43f96ef32d5bc1272 │ 3 │ +│ http://auto_id=0&color=0&confiscategoriya%2Fzhienskaya-advert25593 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://pogoda.yandex.ua/telefon_shtukaturkey │ 3 │ +│ http://forum/topics/ingradskazka-lookoformalities/poetry/events/?date&csrf-8200... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://pogoda.yandex.ru/real-estate/apartments/73151 │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://video=0&input_with_video.yandex.ru/page/10/women.aspx │ 3 │ +│ http://video_dvd/suppoll/dleead6718.php?SECTION │ 3 │ +│ http://radioscannerica/film/47018.html?1=1&cid=691390&pvno │ 3 │ +│ http://smeshariki.ru/news/2013/peshnye-udivlekanka.ru/l_03_00/bodreamfood.ua │ 3 │ +│ http://msk/platia-nashing/vanny.diary.ru/otdam_daily │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/used/KIA-Cee-d... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=&is... │ 3 │ +│ http://tyva-5/country=-1&washestvo/den_sidentialAmount │ 3 │ +│ http://rukodel=0&sort=newly&trafkey=27065/2/child.aspx#location │ 3 │ +│ http://kinopoisk.ru/real-estate=2013-07-2089241607/photo=0&with_exchangeType │ 3 │ +│ http://maps#ru_5_ru_1_ru_ru_ru_202_ru_1_ru_ru_ru_ru_2_ru_1743.html?oscsid=36303... │ 3 │ +│ http://irr.ru/index.php?showalbum/login-do-500-kv-m-Maya │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://mylove.ru/zoom.php?GID=2&IsOrder │ 3 │ +│ http://zapchastny_fashing_mashes/index.ru │ 3 │ +│ http://rsdn.ru/info_all=yes&razdumy-i-trikshop/search&_h_page/1719920 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://chehod/zvenia8312&input_who2=1&input_age1=35&aN=Netscape │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory │ 3 │ +│ http://arma/frl-4/travel.ru/moscow/details │ 3 │ +│ http://direct.yandex.ru%2F&sr │ 3 │ +│ http://kinopoisk.ru/cgi-bin/click.cgi%3Fsid%3D1216 │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/procoolonelopitered/ministrict/3d-probeg-340-... │ 3 │ +│ http://ssl.hurra.com/iframe/iframe-owa.html%26custom%3D%26custom │ 3 │ +│ http://myloveplanet.ru/bad_by_sidential/nizhnieiewva88 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://smeshariki.ru/index.ru/main.pl?cmd=show/47555 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://afisha.mail.ru/stars/page │ 3 │ +│ http://whoyougle.ru/basket&ch=utf-8&sF=11,7,7,7,700 │ 3 │ +│ http://votpusk.ru/ │ 3 │ +│ http://kuharka=48&modeloveplanet │ 3 │ +│ http://avtoto.ashx/1001087496197797217530729; Media Centernet_mastersburg │ 3 │ +│ http://zagranimals-planet.ru/user/31059&Module │ 3 │ +│ http://sendflower │ 3 │ +│ http://smeshariki.ru/chipinfo │ 3 │ +│ http://afisha.yandex.ua/index.ru/recipe │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://auto_operey-v-v-meha.ru/catalog/public │ 3 │ +│ http://bdsmpeople.ru/Web/price │ 3 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://irr.ru/6323%26bn%3D27888895,96772&op_page47 │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://forum/topnews/222968695,910112_1164074834-908745 │ 3 │ +│ http://myfashihtzu.html?1=1&cid=65625f313230303&po_yers=2013/07 │ 3 │ +│ http://video.yandex.ru%2F%2Fwww.bonprix │ 3 │ +│ http://video=0&is_hot=0&che_simeis │ 3 │ +│ http://myloveplants_list-obl.irr.ru%2Fobuv-zhienskaia-modiezhda │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://pogoda.turizm.ru/communit=0&vip=0&order_by=2 │ 3 │ +│ http://stories.ru/art/MACKLEMORE │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://irr.htm?from]=&int[852][to]=10&lastdiscussins/?keyworld │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://afisha.yandex.php?w=3160/transports │ 3 │ +│ http://kurort/SP1399&op │ 3 │ +│ http://afisha.yandex.php?link=114735200&brand=23368 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://wildberries.ru/page=0&vip │ 3 │ +│ http://nizhnieie-bielie-bieriends&fb_source-temno │ 3 │ +│ http://forum/topnews/2229362067528195&op_categoriya │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountry │ 3 │ +│ http://smeshariki.ru/Web/price │ 3 │ +│ http://ur.hh.ru/file/news/2013 \xD0\xB3\xD0\xBE\xD0\xB4\xD0\xB0 │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&text=\x... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http:%2F%2Fmuzhchine/ru-g-Chelya_v_tsentyabrskii │ 3 │ +│ http://radiorecord.ru │ 3 │ +│ http://ej.ru/muss/roll_to_audi/mode=replies │ 3 │ +│ http://guid=6&pw=2&pv=0&po_yers=0&with_video │ 3 │ +│ http://zarplata.ru/?p=1290&op_product_price=990348531&schoosOSRquM8gE&where=all... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 3 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&top │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://gorbus.aspx#localiformalitic │ 3 │ +│ http://my.alpari.ru/filmId=yJg89hqV8gE&where=all&film/530/?fromCityCodeForcentr... │ 3 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 │ 3 │ +│ http://pogoda.yandex.ru&xdm_e=http://name=\xD0\x91\xD0\xB0\xD0\xBB\xD0\xB5\xD1\... │ 2 │ +│ http://krasnyj-chastory │ 2 │ +│ http://board=11.ua.150.html%3Fhtml │ 2 │ +│ http://wildberries.ru/index.ua │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 2 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 2 │ +│ http://masterlingvo/#I 1 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://news/398261_enl.jpg-1 │ 2 │ +│ http://auto_id=3159&input_age2 │ 2 │ +│ http://poisk.ru/news/articles │ 2 │ +│ http://sslow_13500000%26rnd%3D278888 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD1\x81\... │ 2 │ +│ http://pogoda.yandex.ru/images/0001216629/0 │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 2 │ +│ http://moscow/detail/Torgovljatory/storii_efferanslyatting │ 2 │ +│ http://kinopoisk │ 2 │ +│ http://video=0&input_state │ 2 │ +│ http://forum.php?t=420 │ 2 │ +│ http://mysw.info/node/21544 │ 2 │ +│ http://smeshariki.ru/tashkinsk │ 2 │ +│ http://smeshariki.ru/product&op │ 2 │ +│ http://pogoda.yandex.ru/jobinmoscow │ 2 │ +│ http://afisha.mail.ru/cheva.ru/reportby │ 2 │ +│ https://diary/2013-07-05/101090/currency │ 2 │ +│ http://slovarenok.ru/chapochki │ 2 │ +│ http://pogoda.yandex.php?showalbum │ 2 │ +│ http://pogoda.yandex.ru/real │ 2 │ +│ http://kinopoisk.ru/saint │ 2 │ +│ http://3dnews.ru/msk/events │ 2 │ +│ http://afisha.yandex.php?id=1620_4_licanel │ 2 │ +│ http://yartb.html?city=55&TopicID=2&IsOrderedProduct │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://yaroslavl.irr │ 2 │ +│ http://video.yandex.ru/rent/info/messa.ru │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://ssl.hurra.com.ua/auto_repairs=0&page=10&category_id=detail │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://pogoda.yandex.ru/chat/ivan │ 2 │ +│ http://afisha.yandex.php?s=4d450&pid │ 2 │ +│ http://afisha.yandex.ru/?trafkey=54073799 │ 2 │ +│ http://afisha.yandex.php?city=418&view │ 2 │ +│ http://guid=6&pw=2&pv=0&price=690&s_yers=1916 │ 2 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=2furii10.html?city=0&hide │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://diary.ru/search?familliklink │ 2 │ +│ http://omsk.spb.ru/filmId=RUb3Hf2m0Cw&where=all&text │ 2 │ +│ http://kaluga/?ext=\xD1\x80\xD0\xB5\xD0\xB9 \xD0\xBD\xD0\xB0 \xD0\xB1\xD1\x80\x... │ 2 │ +│ http://wildberrin/foton │ 2 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 2 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 2 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 2 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.040 user 0.368000 sys 0.012000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +┌────────────────┬────────────────┬─────────────┬────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ TraficSourceID │ SearchEngineID │ AdvEngineID │ src │ dst │ pageviews │ +├────────────────┼────────────────┼─────────────┼────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33069 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 24703 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 15817 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 14233 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 │ 6549 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 │ 5257 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 5257 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 3547 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login │ 3538 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik │ 3371 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php │ 3333 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 3309 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 2923 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 2616 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 2441 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php │ 2418 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 2390 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari │ 2367 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 2349 │ +│ 1 │ 0 │ 0 │ https://google.com.ua/url?sa=t&rct │ http://komme%2F27.0.1453.116 │ 2228 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 1920 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://komme%2F27.0.1453.116 │ 1679 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ekburg.irr.ru%2Fpuloveplanet │ 1340 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://aliningrad │ 1270 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1254 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1213 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1193 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1186 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1142 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F27.0.1453.116 │ 1007 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 954 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://aliningrad │ 859 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login │ 821 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 791 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 777 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 757 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 722 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://video.yandex.php │ 702 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 691 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/obucheyelants │ 684 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 632 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 593 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 577 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://smeshariki.ru/obucheyelants │ 566 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.php │ 452 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 445 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBA\xD0\xBE\xD0\xBD\xD1\x82\xD1\x80\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 422 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 421 │ +│ 0 │ 0 │ 0 │ │ http://obninsk/detail │ 407 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 386 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug.ru │ http://irr.ru/index.php │ 374 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru/index │ 360 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 348 │ +│ 2 │ 0 │ 13 │ │ http://komme%2F27.0.1453.116 │ 347 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-2011/43597 │ 293 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 293 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6HS │ 282 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 268 │ +│ 3 │ 72 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 267 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 259 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 257 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari │ 256 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 │ 241 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login │ 237 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 │ 236 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/28435&lr=157 │ http://komme%2F27.0.1453.116 │ 233 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/ru/photo/6936313555&text=\xD1\x85\xD0\xBA \xD0\xBB\xD0\xBE\xD... │ http://komme%2F27.0.1453.116 │ 224 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php │ 223 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cat/dushkirillovyj │ http://komme%2F27.0.1453.116 │ 222 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=359&op_page2/... │ 218 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kriminally-bezhevsk │ 217 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0 │ 212 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 207 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 202 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 199 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://ekburg.irr.ru%2Fpuloveplanet │ 199 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 198 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 197 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 195 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/414526863.xlsx │ 191 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CDMQFjAJ │ http://irr.ru/index.php?showalbum/login-kiriskaya-obl.irr.ru/index.ru/GameMain.... │ 190 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=0&with_photo.ashx/101/4/?cat=6257271 │ 188 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=partments-sale/search?text=\xD1\x81\xD0... │ 187 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://afisha.yandex.ru/index │ 183 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://ekburg.irr.ru%2Fpuloveplanet │ 171 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 168 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 164 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 163 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://ekburg.irr.ru%2Fpuloveplanet │ 160 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 160 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/life.ru/cars/misc/travel.ru/?trafkey=058143&p... │ 155 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 │ 154 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=577&oki=1&oby=&op_s... │ 152 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://wildberrior/uphold │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6HS │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 149 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 146 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustic/meterburg │ 144 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 144 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 144 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E │ 141 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 140 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 136 │ +│ 1 │ 0 │ 0 │ http://kombardighantnie │ http://komme%2F27.0.1453.116 │ 136 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login │ 135 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kysjacevtika │ 132 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://komme%2F27.0.1453.116 Safari │ 124 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 121 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category/stroy/dachines... │ 114 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/?state │ http://komme%2F27.0.1453.116 │ 113 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/GameMain │ http://komme%2F27.0.1453.116 │ 113 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 111 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login │ 110 │ +│ 3 │ 85 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 110 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kardigan │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 107 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosoftwarenok.ru/projects/zhbi.po... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 105 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268143.html?1=1&cid=577&o... │ 104 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 104 │ +│ 0 │ 0 │ 0 │ │ http://tvidi.ru/photo=0&confiscategory_id=0&engineVolumeFrom=&fuelRateFrom=type... │ 103 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 102 │ +│ 3 │ 14 │ 0 │ │ http://komme%2F27.0.1453.116 │ 102 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 100 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 98 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://video.yandex.php │ 97 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 96 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.21150895 │ 96 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?sort=price │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 95 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login │ 95 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.12.388 │ 93 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 93 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 92 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberrior/uphold │ 92 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 91 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-tanks/search=1&ady=62&modeloveplanet.ru │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 90 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.145332.15&he=10&category_id=2740387993 │ 89 │ +│ 1 │ 0 │ 0 │ http://in-the-weightEnd=2351&numphoto=&isExclusiver.ru/alertljus │ http://komme%2F27.0.1453.116 │ 88 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fprodazha_Italja_unit=1&av=1&nm=1&lang=ru │ http://irr.ru/index.ru/show/414526863.xlsx │ 87 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 86 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb1.html?item_no=386703/?bundle=7172&msid=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 86 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 │ 85 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 84 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733582852/ │ 84 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupit/action │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 82 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 82 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?bodystyle │ http://komme%2F27.0.1453.116 │ 81 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F22.14&he=768486 │ 81 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusk.ru/ru/lookaginitial/Prodayu-Dach... │ 80 │ +│ 3 │ 4 │ 0 │ │ http://komme%2F27.0.1453.116 │ 80 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 79 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://aliningrad │ 78 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 78 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login │ 76 │ +│ 1 │ 0 │ 0 │ https://go.1ps.ru/show&showforum │ http://komme%2F27.0.1453.116 │ 76 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandex.ru │ http://komme%2F27.0.1453.116 │ 76 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26221/detail.ru/v1496366&... │ 75 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php │ 75 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 74 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%2F&sr=http://bonprix.ru... │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len80/page/product │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filtr/all/perm.pulscen... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 73 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 73 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F1.7.1364.172 │ 72 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://diary.ru/forum/intries │ 72 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/show/414526863_112 │ 72 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2618561&pp=1059&op_produc... │ 72 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://video.yandex.php │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 71 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 71 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari │ 71 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://aliningrad │ 71 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=product_id=42&Selection.chelov.ru/searc... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/yandsearch?te... │ http://irr.ru/index.php │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/server=sc.chel.ru/main... │ http://irr.ru/index.php │ 70 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification/?year=\xD0\xB1\... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2791954~43.87725656132&op... │ 69 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://komme%2F27.0.1453.116 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/produkty/bleacs/udilis... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 69 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&wi=1366&br... │ 68 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 67 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731&CgID=124jc&where=all... │ 66 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/Yozh/Goodda │ http://komme%2F27.0.1453.116 │ 66 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2725215195&ti=\xD0\x9F\xD... │ 66 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://ekburg.irr.ru%2Fpuloveplanet │ 65 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru/index │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 64 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://afisha.yandex.ru/index │ 64 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 63 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nmg.com%2F4.0 Safari%26clients-sale/search&e... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 63 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 62 │ +│ 2 │ 13 │ 13 │ │ http://komme%2F27.0.1453.116 │ 62 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login │ 62 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://ekburg.irr.ru%2Fpuloveplanet │ 61 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 61 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 61 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26092.html?s_text=\x5C\x5... │ 59 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/thenon-houses/public/g... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27755f32316.30; .NET CLR ... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742/details/?cauth=0&dam... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fautoad/kniga.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26004/?_h=galle/\xD0\xBF\... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert27930555&sob=1&p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2692.html%3Fhtml?period=3... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/world/photo31469:Album... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=leting "HalUXI&where=\xD0\x9F\xD0\xB5\xD1\x8... │ http://irr.ru/index.php?showalbum/lofiver.ru/articles/86121%26uid%3D139750%26ad... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27000,224648804-recept-so... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/koshka.com/ig/iframe-o... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory=cinema.perm.p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/realty/suntime-5/extre... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742357/detskii_gosts.xml... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742304][from]=&int[14670... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694336/photo/suzannason/... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Forum25/top... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268320995,968650f45491882... │ 57 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupit/action │ 57 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1375605&ga... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://video.yandex.php │ 56 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga/choice/... │ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_product_... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?showtopic,5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26017/quarius_Moscow/cavi... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2726125413975d77cf&search... │ 55 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 54 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266848223/review_type=pro... │ 53 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 53 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26989%26bt%3Dad.adriver.r... │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/album/login-1800002&pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 52 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0 │ 51 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2698172,93932353064614618... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605085268a9c4d61-9862.49... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19&numphoto/login=A-CL-MS-36575c72937][to]=&int[12822304 │ http://irr.ru/index.ru/widgetchrome%2F&ti=no&dom_v_bordovye-printime.ru │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/investate/comple/make/?page5/&docid=jlMNIrXw... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 50 │ +│ 0 │ 0 │ 0 │ │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 50 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F11.7.1364 │ 50 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 50 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26051.htBeg=6&NightRegist... │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xBE\xD1\x81\xD0\xB8\xD0\xB1... │ 49 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 49 │ +│ 5 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 49 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?group=days=3&text=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27410/photo-2.xhtml&serve... │ 48 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandsearch │ http://komme%2F27.0.1453.116 │ 48 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 48 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusty-i-vkont.at.ua/search=0&userId=0... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266128182&op_seo_entry/de... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?sort=&br... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/intrumen │ 46 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://afisha.yandex.ru/index │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumanegenre=33155?analog/kitchen_mini... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik │ 46 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login%2Flick.g.doubleclick.diary.ru/car/kw/3061/us... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://afisha.yandex.ru/index │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734.html_params%3Dfh_loc... │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/GameMain.p1Yo4A │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ua/searchads/jo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605906/frl-2/sportal.ru/... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fshow/lpp/cre.ru/pers... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.asp?search&ev... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logize.ru/msk/events_liver.ru/russert-plies.r... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26099486633033&countpage=... │ 44 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 43 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://sslow_135000008&position=search │ 43 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischet-solik/odezhda-plos... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert277553/38021/66936575776/... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271050&with_photo.kurortm... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 43 │ +│ 1 │ 0 │ 0 │ http://forums/liii-kuler S22oHgBJTngegotavgorod55.ru/filtr[2]=42 │ http://komme%2F27.0.1453.116 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-folders/?end=9a08488... │ http://irr.ru/index.php?showalbum/litamak.irr.ru/catalog/8570/travel.ru/cgi-bin... │ 41 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 41 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 41 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/0001216629/#top_by │ 41 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26040931&s_yers=0&with_vi... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://ekburg.irr.ru%2Fpuloveplanet │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.137508&s_yers=200... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://aliningrad │ 40 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logito8ergo_6470/page_type_id=20872/0/001:12:... │ 40 │ +│ 0 │ 0 │ 0 │ │ http://afisha.mail.ru/dmitrij │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/readar-nashi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27924563724&key=46960/med... │ 40 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://lib.ru/exp?sid=3205&bt=7&bn │ 40 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 39 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credit │ http://komme%2F27.0.1453.116 │ 38 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=8570/page=5&s_yers=2006 │ 38 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2679/detail/5482,935033/2... │ 38 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 38 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login │ 37 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dnevnoy-kv-Samara.irr.ru/searchAutos&marka=4... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://komme%2F27.0.1453.116 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 37 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=theating&page=... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?group │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/forum/topicID=269&stat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2784389/room=39695,966681... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/votkim-rukav-i-kova-ul-adve... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filmId=xFX1UbTNJjxe4yF... │ http://irr.ru/index.php?showalbum/login.asp?razdel7/test/matched=115909d9_dsc07... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wolf-club478561/OPEL | \xD0\xB0\xD0\xB2\xD1\... │ http://irr.ru/index.php?showalbum/login-marka=13&city&custom=0&damages/0001216 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27553&s_yers=0&po_yers/46... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert275226607660?design=6efxq... │ 36 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=show=&fgroup-tab-mara.irinables/yearT... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278171&size=52094&op_seo_... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27330528/photo/6223799%26... │ 36 │ +│ 5 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 36 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36&he │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://smeshariki.ru/obucheyelants │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=post_neu%3D22%26pz%3D0%26rleurl%3D%26xp... │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 35 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/8569 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/index.ru/katego... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vip.ru/book.com/photo/7086/page=0&state=mont... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-cukickdrops_bak_yant4tlGtZgy3BQ&bvm=bv.49478... │ http://irr.ru/index.php?showalbum/login-501-98552&op_uid=1060948/6#f │ 35 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (Windows │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19&m_staraya-obl │ http://irr.ru/index.ru/show/414526863_112 │ 34 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.12.388 │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/promo=C-Tease/rent/dat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 34 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_uid=1... │ 34 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/list │ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 34 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/directadvert/kavanga_728x90.html │ http://komme%2F27.0.1453.116 │ 34 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 33 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshops.xml?typ │ http://komme%2F27.0.1453.116 │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?cPath=default.ru/yandex.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33 │ +│ 1 │ 0 │ 0 │ http://auto.ria.ua/\xD0\x9A\xD0\xBB\xD0\xB8\xD0\xBC\xD0\xB0\xD1\x82\xD1\x8C\xD1... │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 33 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://video.yandex.php │ 33 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 33 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser │ 33 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265748ba3f755671_1162684&... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertif?sle=85000 \xD0\xB4\xD0... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/pub │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364 │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 32 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zxcvbnm1990&search/jobinmoscow.ru/yandex.by/... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements-obschaya │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fproduct/foto-4/login... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&op_category_id=1174]... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniturers_id=575386110 │ http://irr.ru/index.php?showalbum/login.exit/rem/php/board/10_kruizer_8267049&o... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiepochto_id=93231238][to... │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://afisha.yandex.ru/index │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ssl.hurra.com/iframe │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischuk_Kerasivye-klavik/?... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/jobs-education/m_acces... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26791e3a7c543c9bf9ef5c0-9... │ 31 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt │ http://komme%2F27.0.1453.116 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_api.php?cid=41389/rooms/perm.pulscen.ru/sear... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertificia/?letteo_985428161/... │ 30 │ +│ 1 │ 0 │ 0 │ http://domchelov.html&lr=55&text=\xD0\xB4\xD1\x80\xD1\x83\xD0\xB3\xD0\xB8\xD0\x... │ http://komme%2F27.0.1453.116 │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoryID=12452929587/... │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 30 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 30 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268630533&site_ot=&price_... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-k608i.trashbox.ru/cars/page5/&docid=577&lr=2... │ http://irr.ru/index.php?showalbum/logii_58247.php?forum.borovichy77/page5 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2716/~3/150160947694,9745... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/products/?category_id=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2696374/#page/tab=com_avt... │ 30 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/topic │ 30 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.14&he=768&wi=1920 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605446518%2F&sr=http://e... │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26979553039353936694&ch=u... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://smeshariki.ru/obucheyelants │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-carava/fotok-8-steklove.ru │ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26928142&op_products/view... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kupibatikov/?recrete/personal/klimat.ru/work... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/wedditeli_foto-2/__48/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x9A\xD0\xBE\xD1\x80\xD0\xBE\xD1\... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertifications[0][150]=60&inp... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_countpage/1 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/click.net/paged=696&lo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274229696.0 (Windows)&bL=... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-14132&with_photo=1&srtime-zone.net/catalog/t... │ http://irr.ru/index.php?showalbum/login-sierra%2Fdlia-zhienskaia-moda-zhiensmed │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 29 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704.html%3Fhtml5/v12/?fr... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2664952&xdm_p=1#country=-... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734/fotographic_2017666&... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategoriya/zhienskaya-... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9649.html%3... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/small_mercial-shoppicc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27350350394&ch=UTF-8&sF=1... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_seo_entr... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-baza/gadge... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27425.3120%26ntype_id=2&r... │ 28 │ +│ 1 │ 0 │ 0 │ https://directions[0][1541769377921968 │ http://komme%2F1.7.1364.172 │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert272291684/hasimage=0&view... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13733097&op_categ... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/mann japanel/?text=\xD1\x81\xD0\xBC\xD0... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269500469412216388/detail... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-my-sovies/bebybum.homestion bonprix.ru/... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikarbox=2&tz=9b81998&po_y... │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-176-kakaya-obl.irr.ru/search?lr=191&ei=N6rrg... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?lang=all&fi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 28 │ +│ 3 │ 95 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\xA4\... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/anime-2/#album/l... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-eve-nn.ru/cars/passenger/\xD0\x92\xD0\x90\xD... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274236&pv=15&prr=8&sid=35... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/41452626u1zIq0SGLXCI │ 28 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic/8939858-59929477/detailshop │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://ekburg.irr.ru/#lingvo │ 28 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F22.14&he=768486 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678/page=2&marka=84&mode... │ 27 │ +│ 3 │ 2 │ 0 │ │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/search?cl4url=http://yandex.ru/online... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27013.ya.ru/sportalznakom... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert24061.jpg.html%3Fhtml?1=1... │ 27 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031343-sh-898675/sort=pri... │ http://irr.ru/index.php?showalbum/login-5158&jenre/slyudya_metroman.ru/GameMain... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19195/offset=101&district=&city&with_photo=¤cy │ http://irr.ru/img/catalog/53485785/topic/8939850.php?page=3&marka=84&mm │ 27 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 27 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 27 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-oleginnesujeli-i-centum=etarget=search?clid=... │ http://irr.ru/index.php?showalbum/login-kupe.html_params%3Drhost%3Dad.adriver.r... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fhit_list.html?s... │ http://irr.ru/index.php?showalbum/login-irake-myservierk-supierts%2F&ti=\xD0\x9... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27928092_price=\xD0\xBC\x... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/mazda-dievochnye_avari... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-19.xhtml?city_to_one=All&film]/on/orders/810... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/1.19.mobile_photo=6001... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27630/?item_id=0&bodystyl... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ 1 │ 0 │ 0 │ http://bonprix_ru_11559&lr=12&usln │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lizova_ii_1112_1150&option[price_do=300... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E&wher... │ 26 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 26 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detall/seconomicsmovinki │ http://komme%2F27.0.1453.116 │ 26 │ +│ 1 │ 0 │ 0 │ http://yandex.ua/?target=search/tab=user │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://obninsk/detail │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login-jjjekrju-s-pring=1&price[price=\xD0\xBC... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/loginsk.irr.ru%2Fkategory_id=9204471-650/?_h=... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification.ru/messa.ru/rea... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lejandsearch?text=\xD1\x82\xD0\xB8\xD1\x85\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert21124631/?Search.php │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 26 │ +│ -1 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_category... │ 26 │ +│ 3 │ 197 │ 0 │ │ http://komme%2F27.0.1453.116 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?messa.ru/worlds/page2/7277932582&text=\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 26 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-kupe-20010120652838799.html?n=7148.html... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemey-volvom80Cw&where=a... │ 26 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=607&state=4... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.22 (KHTML, like Gecko) │ 25 │ +│ 1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 25 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/people.ru/cars/passets... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731/?city=0&pvno=2&evlg=... │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vivarki/redki_sdelaet-law.ru/produkty/kartgo... │ http://irr.ru/index.php?showalbum/login=driff/en-ru/?p=2#messages/00001216629 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.html&ei=GcXrUYe8F2DAU-RbuRlLMczoJ--5uDCx8 │ http://irr.ru/index.php?showalbum/login-132/#images/0000.h95/\xD1\x82\xD1\x8E\x... │ 25 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert264314953); ru) AppleWebK... │ 25 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://obninsk/detail │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search?text=myaccountry │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguard-payments-sale/se... │ http://irr.ru/index.php?showalbum/login-88i8LaDyEkCVv6-DhRfEDcw==&action │ 25 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/yandex.ru/?f... │ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.ru/film/46351/frl-2/bage │ 25 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605838.html5/v12/?from=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-link=1147373-1&p=1&p=2&text=\xD0\xBC\xD0\xBE... │ http://irr.ru/index.php?showalbum/logisterlingvo/#! │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741559&t=5204/make=Chrys... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694589/detail/555-javata... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=shops.html?id=1&body_type=\xD0\xBF\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781472265&op_seo_entry=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626rleurl%3D//ad.adriver... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685/price_ot=&price=\xD0... │ 24 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://diary.ru/forum/intries │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26685857947301_Zoryatiya/... │ 24 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-117031&op_category&op_seo_entry=&op_uid │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27399992.php/board,13.0) ... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671291&fridgets/2012&pri... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguar.ru/page4/?emain.a... │ http://irr.ru/index.php?showalbum/login=ogabass.ru/filmId=9WOqzzitive&view │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-annative-expressageId=0oVXx21hUXI&where=all&... │ http://irr.ru/index.php?showalbum/login-rybnovlevojj_mamountry=-1&type%3D0 │ 24 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://video.yandex.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo/7... │ http://irr.ru/index.php?showalbum/login-kupit-plitka-s-korsiety/art/151/n4p/160... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/intrumen │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kupalnaya_elit=&id=3&clid=9403&lr=1913849 │ http://irr.ru/index.php?showalbum/login-gallebia_zhurnalCall D.R.E.mp3ex.net/ph... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lolacake/tatyaka.html?1=1&cid=577&oki=1 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinglish.rus-l7-p70505-1... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/yandsearch?lr=1... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-yvaken/topic=7702.jpg.html?1=1&cid=577&... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=1&bc=3&ct=1&pr │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-547552/1/?sma=RAINBOW&op_uid=fdd1b9d2721728&... │ http://irr.ru/index.php?showalbum/login-kapusta-advertika/search/room=1&damage=... │ 23 │ +│ 1 │ 0 │ 0 │ http://auto_volkswagency=1&text │ http://komme%2F27.0.1453.116 │ 23 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgarials/commend/searchvage-2.html&dt=13734... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-tuniki_510... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263090024189-528619c2077/... │ 23 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/ru/index.ru%26bid │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333572620201709/page/10... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news/radio&clid=198555... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26939.html?page/3/#count=... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/kategory_id=5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2740974%26pz%3D0%26ar_sli... │ 23 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 23 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/resultatya9176da22f1a521a5853.html&... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26600721376439322%26pz%3D... │ 23 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 23 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga_728x90.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://afisha.yandex.ru │ 22 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemennoke0070553995f27d6... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2697574697.html_param=0&u... │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-105vr/ │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=search.tutung/s... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/wheel.ceratornaya_solnechka │ http://komme%2F27.0.1453.116 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-10760b31b65633eZateq eb806e887d9f15ccf593280... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2091&local=1&TypeSearch?mail.ru/yandsearch&c... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26058&nnum=s4746835895&op... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-the-ili-tempera-minsk.irr.ru/produkty/bluzki... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodny │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2649.html?pg=menu_29.jpg&... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739693071/pomer... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/v1465][from]=&int[157281 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267830840994,95688781470%... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-business/sale/ru/search?mail.ru/film%2Fbarna... │ http://irr.ru/index.php?showalbum/login-zakon_type=1&fuelRatesTypeSearch │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 22 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27200,55.7654.html_parat-... │ 22 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26601629][from=&fuelRateT... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&l... │ http://irr.ru/introlux_page5/2/page/Renaul.irr.ru/start=1500-rublic/gamemain/Tu... │ 22 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://ekburg.irr.ru%2Fpuloveplanet │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liliate_id=24145602&with_phoney.yandex.ru;ya... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-natashkarola.irr.ru%2Fviewforum/MsgList.html... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26900/technics-technics-t... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&city[7]=23239330794,25826044_Black_lis... │ 21 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?price_till beli.php?cx=015216684_36 │ http://komme%2F27.0.1453.116 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691_ru_17832523.html_par... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694,978825315f373400/det... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1) AppleWebKit%2F537 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/world/photo/41/62b1dfa450/3/women-clother%26tms%3D%26ev_ltx%3D... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/basketshop.ru/yandsear... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/forum%2Fukhov/l... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27025&Select[4][]=32598.h... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265228.html?1=1&cid=577&o... │ 21 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://wildberrior/uphold │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/houses/passenge... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo44953.116.php?t=4... │ http://irr.ru/index.php?showalbum/login=ko&page=0&view.aspx?group_cod_1s=85&key... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/?from │ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-dance/index.ru/?favorite_off=1&encoding&hl=\... │ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logino-s-grigerator/page1=&input_age1 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login.html?1=1&input_who1=2&input_who2=1&inpu... │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cars/commeddesk.ru/google_s&12.5.746.59954.30 (KHTML, like/\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ramblery/pic/893985650697... │ http://smeshariki.ru/obucheyelants │ 21 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26737865/?page/12186/#/ec... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/logii-bin/click.cgi%3Fsid%3D158195,97987231-9... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/club.ru/anime-zone.ru/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dietsik.ru/razdel_id=111,7,700&w=728x90.html... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929&from%3D%26custom=0&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-brie... │ 21 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739353/details.... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2186/detail.aspx#location... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kupalnik │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/9-0--navam-zhien... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741465][from]=&input_wit... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification%2F4.0; XBLWP7; ... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_uid=1147... │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login=uzpp2XnEw&bvm=bv.49784469][from │ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 20 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-Larki-i-korobeg-1124-95367/guestblowinp... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26219&wi=1280&lo=http://w... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/yandex.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estatic.diary.ru/... │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=58&Selectronics-technics/k... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?er=2&text=\xD0\xBA\xD1\x83\xD0\xBF\xD0\xB8\... │ http://irr.ru/index.php?showalbum/login=razer2.moikrug.ru/recipes/shop.spb │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b706234651&op_uid=1&b... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&price │ 20 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://video.yandex.php │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=NeIdeaCenternet Explorer&aV=5.0 │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertificirovka.ru/noteating-i... │ 20 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271161076&st=261&t=170977... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate=0&ReturnUr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313163307/?from]=&int[15... │ http://che.ru/produkty_zarubezhei-niepochekhly │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604370757034dea482207549... │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_api.php?id=7262882,9454472&op_product_n... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 20 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/cars │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-karbox=0&top=0&category/1961/#images/00... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26637&model=1705.html?1=1... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumilora481 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt=13733129/room │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-iulyanovskaya-obl/lyubvi?page=166733&eid=485... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27502/detail/?folders/#pa... │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://video.yandex.php │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626u1zIq0SGLXCI&where=al... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=240&u_cd=242035165&input_who2=1... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news_id_72387877055/nu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikulina.ru/real-estate/ou... │ 19 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?sort=popup/casualg... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/filmId=eRaB4pYAXCI │ http://komme%2F27.0.1453.116 │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBB\xD0\xB8\xD0\xBA\xD0\xBE\xD0\xBB\xD0\... │ http://irr.ru/index.php │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.ru/daily │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260540718534/?dateOn=1&bo... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login=perfect.yandex.ru%2Fkategoriya%2F537 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26672655462.html?city.ru/... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261921&pr=2441185112.html... │ 19 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostok.ru/cars │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/check=1&redir=1&lang=a... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671&Destige-all.html_par... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27404895,95923.html%26cus... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313437&pvno=2&evlg=VC,2;... │ http://irr.ru/index.php?showalbum/login-rizova.ru/look/timashirtsevm.cofe │ 19 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2638/?from=&raceTo=&power... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6HS │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27355f3132366336601&uuid=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166333/price[price_till]=&pri... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F_liveresum... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.php?f=11340.1j1j2.12...5998-103358071/8/page... │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/00007/10/1320006&p... │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto_repai... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://smeshariki.ru/obucheyelants │ 19 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.15751 Safari%2F5.0 (Windows │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2675406828ac956028692581/... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://obninsk/detail │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26968794618/irr.ru/real-e... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2629&lr=65&rstr=-213&text=back=False&withmos... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2702483,631;IC,444041%2F&... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=http://video.yandex.ru/real-estate │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?search?text=\xD1\x80\xD1\x83\xD1\x81\xD0\xB... │ http://irr.ru/index.php?showalbum/login-inadlinny-sched_car=0&city=0&price=18&p... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26669E116-1-1550046560013... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274026181891&rn=52&brand=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/dlia-zhiensk... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&checked=0&state/room=10002-g-v-program... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-165&jenre]/49047&lr=163&text=samsung ga-moda... │ http://irr.ru/index.php?showalbum/login-2-komn-v-na-92f5-6ccf-fef3-013f9f926a21... │ 18 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ru/index │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5 │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?elmt=popular&where=all&film/723/num │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupaljinik-slidi/places/?PAGEN_1=2 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/restate/out-of-town-resh=1&cnt=1373... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2012-recept-Ragu-iz-2-x │ 18 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=deltec&type=citymo=&version%2F4.0 (Linu... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27534.30 (KHTML, like Gec... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kochtinsk.pulscendinskiy-krasnodar.irr.ru │ http://irr.ru/index.php?showalbum/login-kuplyuskij/zapchastorii_state/out │ 18 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login.moikrug.ru/catalog/otchenko-ul-advert27... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zzzi.ru/a-shop and blademas/?id=1&marka=0&ma... │ http://irr.ru/index.php?showalbum/login-2003prev=/search/index.ru/meteor.html%3... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\... │ 18 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278453&with_exchange=0&ex... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=367132&pv=2... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27132069304;IC,1511e8d158... │ 18 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27071038_114736895,923401... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x9A\... │ 18 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/?target=search?... │ http://irr.ru/index.php?showalbum/login-bigutensiysk.irr.ru/regular&bid=3205&bt... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/8018&l=malkogo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-natura.ru/jobs-education=post_137336ID0... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kanza_tab_2499472&lr=1074&sort=popular │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27420780790931.html5/v12/... │ 18 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/obuv%2F │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-21102&text=\xD0\xB1\xD0\xB0\xD0\xB1\xD0\xBA\... │ http://irr.ru/index.php?showalbum/login.mospsy.ru/super-na-kostronics/tv-audio.... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685&numphoto=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertimeshariki.ru/cgi-bin/cli... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626p/ │ 18 │ +│ 1 │ 0 │ 0 │ https://diary.ru/magnitogorsk │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sien-zhienskaya-i-kvartir.html?id=1955451-01... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260908861%26point-peter=&... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=yators/?jumping.ru/series.ru/priceup&page=3&... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1453.116 Safari%2F8536 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeSearch?text=\xD0\xB2\xD0\xBA\xD1\x83\xD1... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga1788778.137329TVmbFNmbVNaR0YwW$UyNDg4fxS... │ http://irr.ru/index.php?showalbum/login-sienskaia-moda-zhienskikh_rabotjaga.ru/... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=36427929&stat... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinger/\xD0\x93\xD0\x90\... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929750%26ar_sliceid%3D2... │ 18 │ +│ 4 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691c352005&pvno=2&evlg=V... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru%2Ffilm/4858?pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/cars/communalux.ru/dos... │ http://irr.ru/index.php?showalbum/loshaya-obl.irr.ru/film/35562C?analytics/kto-... │ 17 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27422544/3/womens.ru/ufa.... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271527091/frl-2/bage-2.ht... │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#7878... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.103402.html%3Fhtml │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=artira-Lyubyat │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.aspx#location │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=yes&y1=2013-07-07.ya.ru/5_search?text=\... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.15.html?1=1 │ 17 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://aliningrad │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266149_51928/detail.ru/ka... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%26rleurl%3D%26CompPath%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2670308&po_yers=0&price_o... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2613168312.71 Safari%2F__... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_Bolers-device.aspx#commersanta_premiery... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=8&ch=UTF-8&ifr=1&av=1&nm=1&ved=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 17 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6HS │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-dlia-zhiensmed.ru/el... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginyazevskaya%2F5.0 (Windows NT 5.1) Prestorygoo... │ http://irr.ru/index.php?showalbum/login-kupilomatic.aspx#location=rr&days&city&... │ 17 │ +│ 1 │ 0 │ 0 │ http://bdsmpeople.ru/register2123 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logistereda.ru/photo/70861/6#f │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263161366&bid=2823&numpho... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowthreadreplies=24&ids=74&cu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27595,9305f3931339322%26n... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273363331251798796&op_seo... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313&ussp=mstp&usln=1&inp... │ http://irr.ru/index.php?showalbum/login-3767436/roomootofile/obzor.com/iframe │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26041.htm%3Fsid%3D0%26pz%... │ 17 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/stan/index.kz/yandex │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertistia.html?partment/searc... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-search%3Futm_source=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031323532363&win=70&mode=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 3 │ 22 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://diary.ru/forum/intries │ 17 │ +│ 1 │ 0 │ 0 │ http://bibieters_sig=5ea8QizwGSPy0yGcm14ATH74D4Bw&usg=AFQjCNHxMZlonova.ru/p1847... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_style... │ 17 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/messar.ru/professig │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261636/detail/odnoklassim... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lenfiki-zhienskaia-moda-muzhchin-sitafa ishq... │ http://irr.ru/index.php?showalbum/logical.ru/link=11485-9065383235348%2F&sr=htt... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-futbolki-k... │ 17 │ +│ 1 │ 0 │ 0 │ http://acase.php?input_who1=2&input_who2=1 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.10 │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733145625/details... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694&option%2F12.14&he=76... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-irina19910735%2F27.0.1453.116 Safari │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268814453957595,94406/det... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26618531&t=111246.html?p=... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=Like Gecko) Chrome%2Fpotnik=1&price_do=&curr... │ http://irr.ru/index.php?showalbum/login-the-poxudet_sponsor=&o=6000708498/?caut... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b76faact/less=1&ru=1&... │ 17 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-53584715,1327288/belgium/arch=1&themec.... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=bestwo.diary/details&id=9160/0/posti.ri... │ 17 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/category=cinem rasmusic │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 16 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search?clid=19554786.0.8.0.2.2003558_3497926... │ http://irr.ru/index.php?showalbum/logie-niz-doktops/electronics/4185570c72 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098707209463401090/deta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgas.rQRAX2Ua3IF1iHJcaz4ATv34DABw │ http://irr.ru/index.php?showalbum/login/?page=1024&wi=144438-88-3906740/currenc... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267044005320AA76)&vendor_... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27034195,9520160173/5/wom... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-herokee_tatus=1&rm=18606bAxFEcQT6smBB4W... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search/cuZXdzJTJGJmxyPTI4fQ,... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-plan... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&pt=b&pd=7&pw=2&page5... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26396284046.xhtml%3Fhtml%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate/out-of-tow... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260612d7cf.4082813,74,756... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/page=91552&q=\... │ http://irr.ru/index.php │ 16 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login.aspx?sle=13&s_yers=0&page_type=0&door=0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?&clients-sale&siteurl%3D//ads/search?text... │ http://irr.ru/index.php?showalbum/login-kapusta-advert273786/foto-5/#photo=2817... │ 16 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/movinki... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnaja-prost-petersburg/detail/?fold... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-krasok.html_params%3Drhost%3Dad.adriver │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiensmed.ru/dl/\xD0\xB7\x... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti/redmonds %2F offset=403134333.2201560&c... │ http://irr.ru/index.php?showalbum/login-v40-velopiter.feriod=0&scroll_to_auto.r... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661232&streamfood.com/if... │ 16 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26765.html_params%3Drhost... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166303133334%2F&ei=horia+iudi... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-57548811426&text=\xD0\xBB\xD1\x83\xD1\x87\xD... │ http://irr.ru/index.php?showalbum/login-coolonellana-Molodilnik.ru/index.php?vi... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/70948/35.htm?id=... │ http://irr.ru/index.php?showalbum/logiy-luchaiev%2F&sr=http:%2F%2Fwww.bonprix c... │ 16 │ +│ 1 │ 0 │ 0 │ http://histore/profile;u= │ http://irr.ru/index.php?showalbum/login-kupe-20013&uuid=1373356164564_1sort/sta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2755597.html%3Fhtml?1=1&c... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=findjob.ru/planet.ru/index.ru/carinov.h... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/showtopic,803813.html&... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_catalog/1250/?itemsg/cd... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert260477/cities/visas/exp?s... │ 16 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://video.yandex.php │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27429&input_bdsm_position... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26887301/Zona/simferopol.... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2728024/detail/508/?instv... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-153-4b9c4.4331626.htm?size%3D0%26rleurl │ 16 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect │ http://komme%2F27.0.1453.116 │ 16 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://msuzie-shop/premiery-c-38208_2.html │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/posts&q=\xD0\xB2\xD0\xB5\xD0\xB4\xD1\x83\xD1... │ http://irr.ru/index.php?showalbum/login-mistore/#CATALOG_LIST-s-ovosibirsk/deta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-marka=23&model&desting?field_town/search/pri... │ http://irr.ru/index.php?showalbum/login-492ea9&show/417582,9626512874":10157628... │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/sch/price][min]=41&lr=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27364229586121%26url%3D%2... │ 16 │ +│ 1 │ 0 │ 0 │ http://volgografiyah_27_iyunya_50_let%2FgetId │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661251-6efa-d61f-fef3-01... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-maritkiN │ http://irr.ru/index.php?showalbum/login-ladimir.irr.ru/remiery-telefon.ru │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333%26bid%3D1%26rleurl%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new=127201148][fr... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/tv-audi/a7-spec=9894797179698712/p1/8... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=view/5/item3963... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti%2F%3Ff%3D100%&http://afisha.yandsearch&... │ http://irr.ru/index.php?showalbum/login-6030d.html_params%3Drhost%3D90%26height │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logiste's a di galaxy-s4-story1.aspx#location... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269899458/price/3815&pvno... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/7427510/detail/5... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5.0 (Win... │ 16 │ +│ 1 │ 0 │ 0 │ http://yandsearch?lr=2&color │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new10152954vac │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2735030373434-152495.php?... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2753][from]=&pricedownloa... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-gorod/search?p=7&oprnd=9902.jpg&img_url=http... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27222.vk.me/u3166 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makeevka.ru/perm.irr.ru/slingvo/#1\xD0\... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26708662307][]=&selection... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313033393633310,932803][... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-irinakai/page_num_read2306e4574&ei=Ot_rUfjPG... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691.html?1=1&input_age2/... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2010000087378687/pic/8939375f303839303935373... │ http://irr.ru/index.php?showalbum/login-souse=2/path=39_1.html?1=1&cid=577&oki=... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/artira │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/?strict=5710... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2695/19545602cf94d77/repl... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumy.ua/search?text=\xD1\x81\xD0\xB5\... │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertists/736850/?item_no=737&... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikal.ru/search/room=1&dam... │ 16 │ +│ 1 │ 0 │ 0 │ http://forums/liiiervierk-suppohudeemvmesting/294465&op_categoriya │ http://komme%2F27.0.1453.116 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&model=1173... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login/?do=ready-mansion%3D0%26url%3D%26bn%3D0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=new&cad=rjt&fu=0&input_country_id=228&lr=961... │ http://irr.ru/index.php?showalbum/login-cam.shtml#objdesc=true&uA=Mozilla │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb=1&prepairs=0&city[1 │ http://irr.ru/index.php?showalbum/lounona-muzhchin-kupaljinik-chernyj-odnoe/san... │ 15 │ +│ 1 │ 0 │ 0 │ http://launcher-searchads/search │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781308;IC,238208836746/0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-album/login.2/second... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_produkty/kiev.org/forum... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginsk.eu/ru/Pagesize=13&m1=07 │ http://irr.ru/index.php?showalbum/login-3muda/truction/vacancies/750207190765.h... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26981583/page=1089592445/... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-4433140796851/detail/536180&all=False&i... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273389; U; Android 4.0.14... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945HPS?analog/r10418/sort=price_do=200&site_off=1 │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F1.7.1364.172 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273631253711/foto-6320166... │ 15 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshop/id_art_type=7&s_yers │ http://irr.ru/index.php?showalbum/login │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2724/?_h=search?text=\xD0... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-goluboj-podserial&dfs=13 │ http://irr.ru/index.php?showalbum/login-haus.html#news/228670,257&pci=3012/frl │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#67 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266356163f39ea6f8/7a8745&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26605566254/room=1.6&wher... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/washes/built-in_two_ch... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?Topic │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/state=1909644 │ http://afisha.yandex.ua/auto_id=0&with_photo.kurortmag.ru/razdnitsya-vishnury │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://irr.ru/index.ru/show/414526863_112 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/produkty%2Fplatj... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?transk.i... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginskikh-viana.irr.ru/GameMain.aspx?sle=1/house.... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-land_search?text=\xD0\xB0\xD0\xBC\xD0\xB1\xD... │ http://irr.ru/6323%26bn%3D27888895,963095425 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/index.ru/ange=0&s_yers=(3000&static.diary.ru... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?page37/?sta... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678&op_page=60000/curren... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list.html?typ=SMA&anbieter=aleks_evilkos.com │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?Id=9582 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=alini... │ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liloveplanet.ru/futurer533/women.aspx?group-... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2631920&lo=http://person_... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-tumbov.irr.ru/page1=&input_who1=2&id=29... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.1Uv1UfqCA8SonYC4BQ&usg=AFQjCNGB3pBUuKY1jJPP3... │ http://irr.ru/index.php?showalbum/login-tank-sale/search%3Fmode=&page_type │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2718599/photo=0&is_hot=0&... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.php?city[1]=700003 │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27515/418695&st=327-B110Q │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26761,55.654289600/detail... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login=vladimir/page_type=0&expand_search?text... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2699364224073532663835386... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-lential/secondary/details9.html_params%... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?dok=001&rightbox/week&From=0&user │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/frl-4/trailer/view/3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_appliazh-pliance/mista-bez-uchaiev/000202&cl... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=25127691%2F... │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page9/#14... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2730675595,9292fa-d61f-fe... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienshchin-planet.ru/myma... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/gamemain.asp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27877437494,943082&stat_t... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27265484158197%26width%3D... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-676216b8af/4fd00fa61b3185631821/page_ty... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/ch/floore troubleclick... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1955451&lr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 15 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 3 │ 123 │ 0 │ │ http://komme%2F27.0.1453.116 │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Ford-antent... │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nashinger/users/search?textilead&353%26ev_pl... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginy_name/3196906481/currency=6465373200&price=\... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2776/?date=0&doorov.irr.r... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-102-821922237&arrFilter2013/08-iH4AT5zIGQDA │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_type=&freetao.diary.ru/sea... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/877/ru/buildin... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9584%26pz%3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert276278-ploschaya_checked_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2693_763613.html_params%3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274298799461981/?date=129... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert262997385f32313335781094&... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.10 │ 15 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credir=1 │ http://komme%2F27.0.1453.116 │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://ekburg.irr.ru%2Fpuloveplanet │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=on&input_onliner... │ http://irr.ru/index.php?showalbum/login.html%26custom%3D%26CompPath.2; WOW64; r... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/gosthelp.ru/auto.ria.... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=on&in... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2651734&pt=b&pd=7&pw=1&pr... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/litlip/saint-peter557932E-8C62-4917%26ad%3D64... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga664.1721/deti74.ru/animals-planet.ru │ http://irr.ru/index.php?showalbum/login=K-SR-B-13-9635095,9661/9#f │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search?text=\xD1\x84\x... │ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 15 │ +└────────────────┴────────────────┴─────────────┴────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.132 user 1.200000 sys 0.020000 +D 07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +Run Time: real 0.014 user 0.184000 sys 0.000000 +D D (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +Run Time: real 0.019 user 0.248000 sys 0.000000 +D " = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) ORDER BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))); +Run Time: real 0.012 user 0.152000 sys 0.000000 +D +D +D '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(URL) > 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +┌──────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├──────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 102341 │ +│ http://komme%2F27.0.1453.116 │ 51218 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18315 │ +│ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16461 │ +│ http://irr.ru/index.php │ 12577 │ +│ http://irr.ru/index.php?showalbum/login │ 10880 │ +│ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 7627 │ +│ http://irr.ru/index.php?showalbum/login-kupalnik │ 4369 │ +│ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 4058 │ +│ http://komme%2F27.0.1453.116 Safari │ 3021 │ +└──────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.077 user 0.900000 sys 0.016000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(Title) > 0 GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ Title │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ \xD0\xA2\xD0\xB5\xD1\x81\xD1\x82 (\xD0\xA0\xD0\xBE\xD1\x81\xD1\x81\xD0\xB8\xD1\... │ 122407 │ +│ \xD0\xA8\xD0\xB0\xD1\x80\xD0\xB0\xD1\x80\xD0\xB0\xD0\xB9), \xD0\x92\xD1\x8B\xD0... │ 82935 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA - IRR.ru │ 80958 │ +│ \xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\xB8 New Era H (\xD0\x90\xD1\x81\xD1\x83\xD... │ 39098 │ +│ \xD0\xA2\xD0\xB5\xD0\xBF\xD0\xBB\xD0\xBE\xD1\x81\xD0\xBA\xD1\x83 \xD0\xBD\xD0\x... │ 23123 │ +│ Dave and Hotpoint sport \xE2\x80\x93 \xD1\x81\xD0\xB0\xD0\xBC\xD1\x8B\xD0\xB5 \... │ 14329 │ +│ AUTO.ria.ua \xE2\x84\xA2 - \xD0\x90\xD0\xBF\xD0\xBF\xD0\xB5\xD1\x80 │ 14053 │ +│ \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBC\xD0\xBE\xD1\x80\xD1\x81\xD0\xBA (\xD0\xA0\xD0\... │ 13912 │ +│ OWAProfessign), \xD0\xBF\xD1\x80\xD0\xBE\xD0\xB4\xD0\xB0\xD1\x82\xD1\x8C │ 10919 │ +│ \xD0\xA2\xD1\x80\xD1\x83\xD1\x81\xD0\xB8 - \xD0\xA8\xD0\xBE\xD1\x83\xD0\xB1\xD0... │ 10157 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.051 user 0.688000 sys 0.000000 +D AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +┌────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ URL │ pageviews │ +├────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 7479 │ +│ http://aliningrad │ 4791 │ +│ http://ekburg.irr.ru%2Fpuloveplanet │ 3584 │ +│ http://smeshariki.ru/obucheyelants │ 3064 │ +│ http://video.yandex.php │ 2887 │ +│ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 1084 │ +│ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 891 │ +│ http://afisha.yandex.ru/index │ 855 │ +│ http://sslow_13507.html?aspx?naId=6HS │ 521 │ +│ http://wildberrior/uphold │ 484 │ +│ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 289 │ +│ http://obninsk/detail │ 241 │ +│ http://diary.ru/forum/intries │ 208 │ +│ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 185 │ +│ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 185 │ +│ http://kurort/SINA, ADRIAN │ 157 │ +│ http://afisha.yandex.ru │ 132 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 124 │ +│ http://ssl.hurra.com/iframe │ 123 │ +│ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 119 │ +│ http://stars-visa.html_params%3Drhost%3Dad.adriver.ru/catalog.php │ 105 │ +│ http://komme%2F27.0.1453.116 │ 83 │ +│ http://pogoda.yandex │ 80 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 79 │ +│ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 73 │ +│ http://video.yandex │ 71 │ +│ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 68 │ +│ http://wildberries.ru/daily │ 68 │ +│ http://smeshariki.ru/ru/index.ru%26bid │ 68 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 64 │ +│ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 64 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn │ 63 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 59 │ +│ http://sslow_135000008&position=search │ 58 │ +│ http:%2F%2Fwwwwww.bonprix.ru/topic │ 53 │ +│ http://sslow_13507.html/articles │ 52 │ +│ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 51 │ +│ http://rsdn.ru/rss.ya.ru/catalog │ 51 │ +│ http://ekburg.irr.ru/#lingvo │ 46 │ +│ http://pogoda.yandex.ru │ 45 │ +│ http://sslow_13500000%26rnd%3D2788881.html │ 44 │ +│ http://maps#ru_5_ru_22106.377648194,975924][to]=&int[14270pa106&op_uid=17759/6#... │ 42 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 37 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 37 │ +│ http://video.yandex.ru/film/46351/frl-2/bage │ 36 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 35 │ +│ http://direct.yandex │ 34 │ +│ http://sslow_13507.html?aspx?naId=3X_3bhLcs3M │ 33 │ +│ http://gotovim-doma │ 32 │ +│ http://che.ru/produkty_zarubezhei-niepochekhly │ 31 │ +│ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 30 │ +│ http://video.yandex.ru/Newsletter │ 29 │ +│ http://sslow_13507.html?aspx?naId=6D8IzMGys3M │ 29 │ +│ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ http://video.yandex.ru │ 28 │ +│ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 28 │ +│ http://notes=1/currency │ 27 │ +│ http://sslow_13507.html?aspx?naId=649&state/out-of-town=\xD0\xA5\xD0\xB0\xD0\xB... │ 27 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 26 │ +│ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 26 │ +│ http:%2F%2Fwwww.bonprix.ru/tambov │ 24 │ +│ http://kinopoisk.ru/shoppich.ru/search?clid │ 24 │ +│ http://wildberries │ 23 │ +│ http:%2F%2Fwwwwww.bonprix.ru/searchAutoSearch?text=\xD0\xB2\xD0\xB5\xD0\xBB\xD0... │ 22 │ +│ http://myloveplanet │ 20 │ +│ http://stars-visa-litraj.txt","lpu":"http://pogoda │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/secondary │ 20 │ +│ http://msuzie-shop/premiery-c-38208_2.html │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 20 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 20 │ +│ http://smeshariki │ 19 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 19 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ http://irr.ru/6323%26bn%3D27888895,96772,97436 │ 18 │ +│ http://kinopoisk.ru │ 18 │ +│ http://nepogoda.yandex.ru%2Fproducts/search?text=subscripts/busineshop │ 17 │ +│ http://wildberries.ru │ 17 │ +│ http://kinopoisk.ru/catalog/9902224 │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://direct.yandex.html │ 17 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 17 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 17 │ +│ http://irr.ru/6323%26bn%3D27888895,963095425 │ 16 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 16 │ +│ http://afisha.yandex.php?gidcar=36281664 │ 16 │ +│ http://auto.ria.ua/search │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://direct │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ http://irr.ru/index.php?showalbum/login-kupalnaya-obl │ 15 │ +│ http://kinopoisk.ru/odessya │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 15 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 14 │ +│ http://ekburg.irr.irr.ru/maker │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.yandex │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 14 │ +│ http://afisha.mail/rnd=0.9788 │ 14 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 13 │ +│ http://auto_many_to_auto.ria.ua/igrush43/ │ 13 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 13 │ +│ http://afisha.yandex.ru/cars │ 13 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 13 │ +│ http://love.ru/a-myprofi │ 13 │ +│ http: │ 13 │ +│ http:%2F%2Fwww.bonprix │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://real-estate/aparther/offiliates/corruption/russinsk │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 12 │ +│ http://on-online=on&accetti │ 12 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 12 │ +│ http://samara.irr.html5/v12/?from]= │ 12 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 12 │ +│ http://kinopoisk.ru/saledParams │ 12 │ +│ http://en.lyrsenses/zamba_zaborah_coldplay=1&gearbox │ 12 │ +│ http://zvukovo/hondar/2007&state/renlew/rigma.ru/scribed │ 12 │ +│ http://pogoda.yandex.php?SECTION │ 12 │ +│ http://msk/platia-nashing/vanny.diary.ru/moscow │ 12 │ +│ http://video.yandex.ru/GameMain.E6smreQhiu_hXR4&where=all&film │ 12 │ +│ http://news/6483731559676/Unlocknotebooks/m83/800_D_Black_list │ 11 │ +│ http://nizhnieiene/p17378705/currency=1&with_photo-ideapadeno │ 11 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 11 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty/photo-12/#imag... │ 11 │ +│ http://msk/platia-nashing/vanny.diary.ru/sale/liver │ 11 │ +│ http://video.yandex.ru/GameMain.aspx#location │ 11 │ +│ http://guid=6&pw=6&pv=13 │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 11 │ +│ http://wildberries.ru/rost.html?1 │ 11 │ +│ http://pogoda.yandex.ru/catalog/jokers │ 11 │ +│ http://smeshariki.ru/?win=82&stat=1&page/196264&pt │ 11 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 11 │ +│ http://en.lyrsenses/zamba_zabudtrimazok.html?page=12&prr=http://fap1.adrive_typ... │ 11 │ +│ http://bonprix.ru%26bid │ 11 │ +│ http://loveplanet.ru/GameMain │ 10 │ +│ http://bdsmpeople.ru │ 10 │ +│ http://video.yandex.ru&pvid │ 10 │ +│ http://liver.ru/cheboksicily/foto.aspx?sort=newly&trafkey │ 10 │ +│ http:%2F%2F%2Fwwww.bonprix │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://club.ru/spokoiteli/photo37775280000 │ 10 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 10 │ +│ http:%2F%2Fwwww.bonprix │ 10 │ +│ http://auto_id=240&n=13901038 │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 10 │ +│ http://smeshariki.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://slovariant_new3077940810/detail │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 10 │ +│ http://en.lyrsenses/zamba_zabor_id=1012_blank%26site │ 10 │ +│ http://sslow_13500000%26rnd%3D2788881.html?parts/passe │ 10 │ +│ http://pogoda.html%3Fhtml_params%3Drhost%3D43 │ 10 │ +│ http://irr.ru/index.php?showalbum/logout%26verstova.ru │ 10 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://pogoda.yandex.php │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film/6781203.html?id=242037047/detai... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://mysw.info/blog/sankt-peter%3D1216/00001216629 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 9 │ +│ http://e96.ru/albumfotok-15-fotki │ 9 │ +│ http://alpari.yandex.html?html_param=0&users/#page/Search/ab_dob%2Ffieiie-razvo... │ 9 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu │ 9 │ +│ http://bonprix.ru/catalog/8570/1006790 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http://b2b.testered/main/discuss/matched_country=-1&top=0&cityid=1024&wi=1366&o... │ 9 │ +│ http://svpressa.ru/topic=17082630 │ 9 │ +│ http://bonprix.ru │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 9 │ +│ http:%2F%2Fwwww.bonprix.ru/filmId=8j5j97LRs3M&where=all&sources │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 9 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/#win_13.html_p... │ 9 │ +│ http:%2F%2Fwwwwww.bonprix.ru/mymail/?folders/4744089758 │ 9 │ +│ http://nail=Yes&target=search │ 9 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_produkty%2F&sr=http://slovaria │ 9 │ +│ http://rlsnet.ru/vacancy/view_type_id=9677548268010367 │ 9 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/imagecache/wm/2013&where=all&filmId │ 8 │ +│ https://m.myloveplanet.ru/forum/abrika-kobelenie_nebestsenal │ 8 │ +│ http://zapchast.com/iframe-owa.html?1=1&cid=577&oki=1&op │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 8 │ +│ http://poisk.ru/price_ot=&price_ot=&price │ 8 │ +│ http://afisha.yandex.php?t=141880517 │ 8 │ +│ http://zarplata.ru/velika_all=\xD0\xBE\xD1\x82 │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http:%2F%2Fwwwwww.bonprix.ru/news/222974895&op │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://fore=3&marka=0&top=0 │ 8 │ +│ http://direct.yandex.ru/catalog │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96777&oki │ 8 │ +│ http://video.yandex.ru&xdm_p=1#item/search │ 8 │ +│ http://masterh4.adriver.yandex │ 8 │ +│ http://zarplata.ru/?p=12977-B26358/currency=RUR/page=1080&wi=1024&lo=http://rzh... │ 8 │ +│ http://en.lyrsenses/zamba_zabor/bedroomolsk │ 8 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ==&page_avtomodules.php?f=100&ref... │ 8 │ +│ http://mastered/main.aspx#location=1&bc=3&ct=1&pr=60322056107100919/page5/?_h=s... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://omsk.mlsn.ru │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://irr.ru/6323%26bn%3D27888895,96779/87 │ 8 │ +│ http://smeshariki.ru/GameMain │ 8 │ +│ http://che.ru&pvid=13733142835/100/topic,5240556895&ch=UTF-8&sF=11,7,7,0 │ 8 │ +│ http://afisha.yandex.php?gidcar=367108851%2Fr%2F1 │ 8 │ +│ http://love.ru/?p=17059 │ 8 │ +│ http://wildberries.xml?from]=&input │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 8 │ +│ http://irr.ru/index.php?showalbum/login-kupit-topy%2Fplatjie-gotovlexandex.html... │ 8 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 8 │ +│ http://auto.ria.ua/auto_id=24126629/0/index.ru/real-estate/out │ 8 │ +│ http://victor?page_type=city.stol-yar.ru/cars │ 8 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://video.yandex.ru%2F&sr=http://loveplants/65398f55 │ 7 │ +│ http://kinopoisk.ru/ch/feed/letniaiaprice/1609 │ 7 │ +│ http://real-estate/aparts/Aquarevski │ 7 │ +│ http://video.yandex.ru/a-album/login-vitiju/photo │ 7 │ +│ http://bonprix.ru/social/product_id │ 7 │ +│ http://moscow/detail/5552/0/2792834&m=111,7,7,5 │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 7 │ +│ http://irr.ru/Registered/main/topnewsru.com/page=6 │ 7 │ +│ http://irr.ru/index.php?showalbum/login-kapustics?sort=pogoda.yandex.ru%26bt%3D... │ 7 │ +│ http://bonprix.ru/catalog/8570/14139489 │ 7 │ +│ http://afisha.yandex.ru/\xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB0/\xD0\x91\xD0\xA1\xD0\x... │ 7 │ +│ http://irr.htm?from]=&int[85][from]=&input_vsegodnyie │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://love.ru/?p=1#country=&op_seo │ 7 │ +│ http://bdsmpeople.ru/niktory/shtory/308/roomed.ru/p59473682740295 │ 7 │ +│ http:%2F%2Fwwwww.bonprix │ 7 │ +│ http://spb/event=big&marka=84&model=0&auto_id=0&s_yers=0&pv=10&can_be_check_PP │ 7 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 7 │ +│ http://myloveplantrackIt?tid │ 7 │ +│ http://pogoda.yandex.ru&pvid=1 │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 7 │ +│ http://irr.ru/index.php?showalbum/login-a-5-advert27114 │ 7 │ +│ http://bdsmpeople │ 7 │ +│ http://video=0&is_hot │ 7 │ +│ http://irr.ru/index.php?showalbum/login-zk34/pages/0001216629 │ 7 │ +│ http://svpressa.ru │ 7 │ +│ http://money.yandex │ 7 │ +│ http://gotovim-doma.ru │ 7 │ +│ http://afisha │ 7 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 7 │ +│ http://omsk/evential/house.ru/catalog/kitchedule=213-606361653965283 │ 6 │ +│ │ 6 │ +│ http://video.yandex.ru%2Fkategory_id │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://afisha.yandex.ru%2F%2Fmail/169 │ 6 │ +│ http://love.ru/?p=1#country=-1&sq_liver.ru/kyrgyzstan │ 6 │ +│ http://video.yandex.ru/ekt │ 6 │ +│ http://stars-varenok.ru/16745959680706/800_0.jpeg.html%3Fhtml5/v123593 │ 6 │ +│ http://bdsmpeople.ru/film/64544.690022.rar.html_params%3Drhost%3D_black_list=0&... │ 6 │ +│ http://afisha.yandex.ru/catalog=on │ 6 │ +│ http://bdsmpeople.ru/GameMain │ 6 │ +│ http://v102.ru/investate/apartments-sale │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://omsk/evential/housession%3D0 │ 6 │ +│ http://wildberries.ru/search │ 6 │ +│ http://video.yandex.ru/GameMain.aspx#location/page_type=category │ 6 │ +│ http://direct.yandex.ru/refererprofile%2F2.10 │ 6 │ +│ http://video.yandex.ru/a-topy │ 6 │ +│ http://afisha.yandex.ru%26bt%3D43%26anbietersburg │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://rukodel=0&sort=newly&trafkey=2750 │ 6 │ +│ http://moscow/details │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://smeshariki.ru/world/photofider_credit=0&view │ 6 │ +│ http://irr.ru/index.php?showalbum/login-12.html%26custom │ 6 │ +│ http://novosibirsk.irr.ru%26bid │ 6 │ +│ http://solutions.diary.ru/realtitroenie_v_jurman.ru/albums/frame-owa.html?stric... │ 6 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 6 │ +│ http://mr7.ru/newsru.com/iframe_right%3D43 │ 6 │ +│ http://autodoc.ru/real-estate/apart │ 6 │ +│ http://smeshariki.ru/catalog │ 6 │ +│ http://povari.yandex.ru/greecondary/Products_id=&auto_vaz_2111 │ 6 │ +│ http://edp2.adriver.ru/hocketshop.ru/moscow/detailanude │ 6 │ +│ http://video.yandex.ru/catalog │ 6 │ +│ http://ereal-estate/rent │ 6 │ +│ http://msk/platia-nashing/vantralitsa_transion │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://3dnewsru.com/iframe_right.html?1=1&cid=51538 │ 6 │ +│ http://afisha.yandex.php/board,39.04839 │ 6 │ +│ http://novo/detail.aspx?group_cod_1s │ 6 │ +│ http://auto_hyundai_sarator │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://kalininmyclonus1 │ 6 │ +│ http://bdsmpeople.ru/saledParams=rhost%3D43%26bid%3D1 │ 6 │ +│ http://forum/topnews/22294&op_category │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://love.ru/?p=17055335 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://real-estate=week/page=1&expand_search?film/298677435615.html │ 6 │ +│ http://afisha.yandex.ru/mymail.php │ 6 │ +│ http://koolinar.ru/port.ru/doc │ 6 │ +│ http://video=0&with_exchangeType │ 6 │ +│ http://afisha.yandex.ru/index.ru/recipe │ 6 │ +│ http://kinel-lab.com/rus/20130709_117485994,93304&op_seo_entry=1&gearbox=0&type... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ https://slovakia-600dd903c07022,101595,91194&op_seo_entry │ 6 │ +│ http://video.yandex.php?search?text=\xD0\x9A\xD0\xBE\xD0\xBD\xD1\x8C\xD1\x8F\xD... │ 6 │ +│ http://diary.ru/exp?sid=3205 │ 6 │ +│ http://video.yandex.php?from]=&interapy-wkti/ &cd │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 6 │ +│ http://love.ru/ru/irk/event/search/ │ 6 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D8393224 │ 6 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 6 │ +│ http://kinopoisk.ru/catalog │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://auto_volkswagen/vologdano/il_dlya-dnevka.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 5 │ +│ http://barnaul/details/?cauth │ 5 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD0\xB5\xD1\x80&where=... │ 5 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 5 │ +│ http://metal-lodku-Obzor │ 5 │ +│ http://sp-mamrostova │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 5 │ +│ http://zvukovo-gorodsk │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://tp66.ru/exp?sid=3860217/rooms=2/men.aspx#location%3D0%26rnd │ 5 │ +│ http://rmnt.ru/search/offilia_Sovetov_living_chamber/?78142 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://e96.ru/movies/614418821/artir.ua/search │ 5 │ +│ http://video.yandex.by/?state_id=&auth=1..630;IC,7711588 │ 5 │ +│ http:%2F%2Fwwww.bonprix.ru/?id=2013&where=all&filmId │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://povari.yandex │ 5 │ +│ http://slovari.yandex.ru%26orderovskij-index.ru │ 5 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_seo_entry=&op_category_... │ 5 │ +│ http://tks.ru/cat/publish-cherkalnaya-ttpodporyadushek │ 5 │ +│ http://slovarenok.com │ 5 │ +│ http://video.yandex.ru/GameMain.aspx?Link │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://auto.ria.ua/auto_id=241269.html?1=1&cid=2127970 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://auto_volkswagen-Palities/horobki │ 5 │ +│ http://slovari.yandex │ 5 │ +│ http://radio&planet.ru/work.ru/catalog │ 5 │ +│ http://afisha.yandex.php?r=23436303135353.html?1 │ 5 │ +│ http://en.lyrsenses/zamba_zaborah_chamberk │ 5 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 40007&pt │ 5 │ +│ http://rustnye-sht-riemnikoi │ 5 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 5 │ +│ http://sslow_135000008&position=search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 5 │ +│ http://pogoda.yandex.php?gidcar │ 5 │ +│ http://myloveplanet.ru/v14572&lb_id=13000001216629 │ 5 │ +│ http://topnews.ru/GameMain.aspx?group_cod_1s=1983&pt=b&pd=9&pw=0 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://bibidohertki-i-OOOO_REPORT/07_2013 │ 5 │ +│ http://real-estate=week&m=Dvigenie.html?option │ 5 │ +│ http://autodoc.ru/moscow │ 5 │ +│ http://avtomobile/motory.ru/comp.ru/view.php │ 5 │ +│ http://love.ru/product_id=0&po_yers=0&po_yers=2&refererro/model=1346488078722&c... │ 5 │ +│ http://auto.ria.ua/auto │ 5 │ +│ http://loveplanet.ru/mymail/rudi │ 5 │ +│ http://video.yandex.ru/firms.turizm │ 5 │ +│ http://video.yandex.ru%2FkategoriendflowerTo=&powerTo= │ 5 │ +│ http://auto.ria.ua │ 5 │ +│ http://msk/platia-nashing/vannyie-product_id=1841&page2 │ 5 │ +│ http://nizhnieiewva88/photo/101246465376&cmd=show-to-buchaiev-pugache=51db32a68... │ 5 │ +│ http://direct.yandex.ru/index │ 5 │ +│ http://tks.ru/cat/publish-chemec.ru/search?filmId=CktclMBmUXI │ 5 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid%3D158197%26width │ 5 │ +│ http://club.ru/cinema/movies/no-pos │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://kinopoisk.ru/spb.pulscen.ru/exp?sid=3159&op_category_id=&auth=0&checked=... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://holodilnik-rp-ploschaya-obuv/?ci=1280&with_video=0&choosOyg==&op_uid=111... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://wildberries.ru/real │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://slovariant_neu%3D1%26bid%3D1216/0001216629%26bt%3Dad │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://md.mirkovskaya-obl.irr.ru/jobinmoscow │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://wildberrior/kia/ │ 5 │ +│ http://loveplanet.ru/\xD0\xB0\xD1\x80\xD0\xBE\xD0\xBC/curre-ap-i-showalbum/loui... │ 5 │ +│ http://povari.yandex.php?showalbum/login.pl?cl=all&film/497794,90458 │ 5 │ +│ http://jcmotorom-921205&bt=7 │ 5 │ +│ http://en.lyrsense.com/obshchin-idieiala │ 5 │ +│ http://smeshariki.ru/topic │ 5 │ +│ http:%2F%2Fwww.bonprix.ru │ 5 │ +│ http://gaylyU │ 5 │ +│ http://moscow/detail/Torgovuyu-organske.ru/real-estate │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://video.yandex.ru%26bt%3Dad.adriver.ru/recipe/view/10217/?from │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&w... │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 5 │ +│ http://loveplanet.ru │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://alpari.ru/gallery/pic845274 │ 5 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 5 │ +│ http://alib.mist.html%26custom%3D%26c2%3D278888592138 │ 5 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 4 │ +│ http://loveplanet │ 4 │ +│ http://video.yandex.ua │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 4 │ +│ http://video.yandex.ru/price │ 4 │ +│ http://whoyougle.ru/images/images/00000i/specifiers.ru/image=1&furniture │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://sslovarenok.ru │ 4 │ +│ http://samarskii_krai/tuapse/detail/result.aspx │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/filmId │ 4 │ +│ http://auto.ria.ua/auto_id=0 │ 4 │ +│ http://loveche.html │ 4 │ +│ http://bdsmpeople.ru/Web/Pages=1/feedsmag.ru/~\xD0\xBA\xD0\xBD\xD0\xB8\xD0\xB3\... │ 4 │ +│ http://afisha.yandex.ru/zoom.php?f=5162613838.html_partments │ 4 │ +│ http://irr.ru/index.php?showalbum/login-10618968476372773 │ 4 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://wildberries.ru/catalog │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 4 │ +│ http://radio&planet.ru/marka=62&model=1178128455&pvno=2&evlg=VC,5 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://direct.yandex.php?formsof(INFLECTION_ID=30861/14365-4b11&state/apartment... │ 4 │ +│ http://afisha.yandex.ru%252f7769%252fe │ 4 │ +│ http://love.ru/?p=1#countpage/vacancies/events/738/0/3/women.aspx │ 4 │ +│ http://echoradar-s-Levoshcha │ 4 │ +│ http://e96.ru/news/39733/page2=&input_sponsor=&o=1015219.html_partments-sale&pa... │ 4 │ +│ http://diary.ru/catalog=on&input_city[3 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://rasp.pl?cmd │ 4 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://travel.ru/state/apartments-sale/rashinitit%2F537 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://video.yandex.php?view_type=2&driveresult.ru/replies │ 4 │ +│ https://smeshariki.ru/cinema/article10363136000001216629%26site_offilia_Sovets.... │ 4 │ +│ http://auto.ria.ua/auto_id=63799.html_params │ 4 │ +│ http://kinopoisk.ru/saledParams%3Drhost%3Dad.adriver.ru/GameMain.aspx#location │ 4 │ +│ http://ssl.hurranovskaya-ul-31-foto.ria │ 4 │ +│ http://afisha.yandex.php?r=3&bs=&day │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboy07/... │ 4 │ +│ http://smeshariki.ru/search/keukeru-soft │ 4 │ +│ http://vkirovoe-tourisma │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://smeshariki.ru/domchelkakh_location=search?text=\xD0\xBC\xD0\xB8vents │ 4 │ +│ http://card/windows)&bL=ru&cE │ 4 │ +│ http://kniga.ru/view=\xD0\xA1\xD1\x82\xD0\xB0\xD0\xB2\xD1\x80\xD0\xBE\xD0\xB2&w... │ 4 │ +│ http://guid=6&pw=2&pv=0&price_do=¤cy=1 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://video.yandex.ru/real │ 4 │ +│ http://afisha.yandex.ru/search │ 4 │ +│ http://v102.ru/?s=Adaments-sale │ 4 │ +│ http://video.yandex.ru/GameMain.XYyZwYXRoPWEtbG9nb24vcG90Cw │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://matched_car=373838928155755775482794,9453.116 Safari%2F537.36&he=10&s_ye... │ 4 │ +│ http://zarplata.ru/?p=12977-B26358/hasimages=1/page │ 4 │ +│ http://tks.ru/cat/publish-chernyjbelyj-9375966238&op_categoriya │ 4 │ +│ http://video.yandex.ru/GameMain.aspx#location-4.0.html │ 4 │ +│ https:%2F%2Fwwww.yandex.ru │ 4 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 4 │ +│ http://msk/platia-nashing/vanny.diary.ru/social │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://auto.ria.ua/canel_pe_mascona Hilfigeratov/153228 │ 4 │ +│ http://video.yandex.ru/realty/leaser_map=1/hasimay-2.html │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://nizhny novgorod │ 4 │ +│ http://video.yandex.ru%26target=search/ab_area=categorija80119 │ 4 │ +│ http://kubikus.ru/search.php?r=4140211,1,7,7,7,7,0 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://e-kuzbass.ru/a-shop │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://guide.travel.ru/link │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://victorhead.php?full&dom=780067167694.0; │ 4 │ +│ http://afishi,Mudanted-belyj-974299099/guest-id=34089.html │ 4 │ +│ http://fitness/building │ 4 │ +│ http://afisha.mail.aspx#locationalOffers │ 4 │ +│ http:%2F%2Fwwww.bonprix.ru/real-estate/out-of-town/house │ 4 │ +│ http:%2F%2Fbrjuki-lic-shop.ru/cart.php/cars/papago-d-plosch │ 4 │ +│ http://svpress_up.aspx#location[propfilter_pf[PODVAL]=&arrFilter][3463351841195... │ 4 │ +│ https://produkty%2Fpulove.ru/gost/?page3 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://anketka.ru/bridget │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://video.yandex.ru/GameMain/dukhovyy │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadbor_sh... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http%3A//magnitogorod/page3/#over │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://afisha.yandex.php?action/2741920 │ 4 │ +│ http://tks.ru/cat/public/gamemain.aspx#location │ 4 │ +│ http://love.ru/image=2&marka=84&model/mihailovo │ 4 │ +│ http://nepogoda.yandex.ru/search=1&target=search=0&can_be │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://kinopoisk.ru/searchAutoSearch=0&driver.ru/catalog/1/women.aspx#locationp... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://afisha.yandex.php?show=rlv&ru=1&expand_search │ 4 │ +│ http://love.ru/?p=1705 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://ssl.hurra.com │ 4 │ +│ http://internet Explorer&aV=5.0 (Windows)&bL=en │ 4 │ +│ http://auto_volkswagen_cated_cartovskaya-obl.irr.ru/album/login │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://pogoda.yandex.ru/cooking_sm5_1148786993ab-417/photo/69363/26#formi.ru/co... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://video.yandex.ru/If yours.avtogsm.ru/animals/calculate │ 4 │ +│ http://afisha.yandex.php?p=31&input │ 4 │ +│ http://auto_s_product_name=\xD0\x9A\xD1\x80\xD1\x83\xD0\xB3\xD0\xBB\xD0\xBE\xD0... │ 4 │ +│ http://loveche.ru/job/1162323&PAGEN_1=30&state │ 4 │ +│ http://rsdn.ru/details_103514,154;IC │ 4 │ +│ http://video.yandex.ru/topnews.ru/lanas-advert2713][to]=&int │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://video.yandex.ru/filmId=Xtvman98/num-1/refresh/russia/chapter/broadboyzon... │ 4 │ +│ http://auto_volkswagen_pass_1161967 │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http%3A//edp1.adriverys/forum/view_type=city&custom=0&damages/0001216629%26bid%... │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://inspelishchin-platjie-doma.ru/irkutsk.irr.ru │ 4 │ +│ http://video.yandex.ru/index.ru/\xD0\x9F\xD0\xBE\xD0\xB2\xD1\x82\xD0\xBE\xD1\x8... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://smeshariki.ru/saint-petersburg-gorod/transfer/?id=7576149959760994861&op... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 4 │ +│ http://en.lyrsenses/zamba_zabudka/photo-1/#page=0&sale/search?text=\xD0\x9C\xD0... │ 4 │ +│ http://afisha.yandex.ru/content2.adriver │ 4 │ +│ http://arma/frl-4/transportnoy-kv-m-malchik.ru/show │ 4 │ +│ http://b.kavanga.ru/?a=inneVolumeFrom │ 4 │ +│ http://auto_id=0&with_photo │ 4 │ +│ http://tp66.ru/money.yandex.ru/albums_screenterval │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 4 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&w... │ 4 │ +│ http://irr.htm?from]=&int[1151;IC,112 │ 4 │ +│ http://yoshka.diary.ru/exp?sid=3149&op_category_id=592b9e01c48ce9403%26bn%3D0%2... │ 4 │ +│ http://bdsmpeople.ru/film/64544.690078 │ 4 │ +│ http://afisha.yandex.ru&pvid=13733424 │ 4 │ +│ http://video.yandex.ru/GameMain │ 4 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 4 │ +│ http://kinopoisk.ru/service.ru/iframe │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ https://orenburg/?arrFiltersburg │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://radiorecord.ru/login-m3w.html?1=1&cid │ 3 │ +│ http://video.yandex.ru%2Fplata.ru/ch │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://banantikov-nadushenie_orleona_server=sc.cheloveplant_11612/page │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://romar/events/audio.ru/widget[]=vacancies/99.php?gidcar │ 3 │ +│ http://afisha.yandex.php/tova.ru/uliya2076789599305953 │ 3 │ +│ http://afisha.yandex.ru/shop.ru/malta │ 3 │ +│ http://afisha.yandex.ru/kategoriya%2F5.0 (company │ 3 │ +│ http://afisha.yandex.php/topic104780204&op_uid=1954 │ 3 │ +│ http://afisha.yandex.ua/donetsk/urals │ 3 │ +│ http://afisha.yandex.ru/a-folders/misc │ 3 │ +│ http://afisha.yandex.ru/project_price=&maxprice │ 3 │ +│ http://afisha.yandex.ru/linkvac.php/board.php?topicseeng │ 3 │ +│ http://radioscannerica/filmId=Ba_id=13733568414&city=\xD0\x9C\xD0\xBE\xD1\x81\x... │ 3 │ +│ http://irr.kz/realty/lease/3516093&pvno=2&evlg │ 3 │ +│ https://produkty%2Fplatjie-kuzbass.ru/newsru.com/iframe_right=0&auto_ria=0&meta... │ 3 │ +│ http://fuckfind=rent/view/2021/3 │ 3 │ +│ http://samara.irr.ru%2Fproduct │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://auto_kia_30 │ 3 │ +│ http://sp-mamrostokonkursovet │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://astrobank.ru/image │ 3 │ +│ http://love.qip.ru │ 3 │ +│ http://direct&sortdirect.yandex.ru/imagesize%3D0%26ar │ 3 │ +│ http://kaluga/?ext=\xD0\xB3\xD0\xB5\xD1\x80\xD0\xBE\xD1\x8F\xD1\x82\xD0\xBD\xD1... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ https://slovakia-600dd903c06c999c226647639.html%3Fhtml │ 3 │ +│ https://slovakia-600dd903c07022,101595,9143531427800648_elit │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category_id=0&wi=16000&... │ 3 │ +│ http://love.ru/forum.cofe.ru/forum/view_type=city=790&Selectronics-technik │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://sp-money.yandex.ru │ 3 │ +│ http://sp-money.yandex.ru/work rushki-sien-natalog/8570/page=0&expand │ 3 │ +│ http://video.yandex.ru&pvid=13735/?_h │ 3 │ +│ http://forum/topnews/2229605699574.html?1=1 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberrior/bedroom]=&int[17][to]=&int[858 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://afisha.yandex.ru/forum.materinburg │ 3 │ +│ http://afisha.yandex.php?addriver.ru │ 3 │ +│ http://video.yandex.by/search/?target%3D43%26bid%3D2 │ 3 │ +│ http://ssl.hurral=messages │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://bdsmpeople.ru/search │ 3 │ +│ http://video.yandex.ua/auto_id │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://rmnt.ru/stars │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://rmnt.ru/film/88677/russia/rio.ru/search?filmId=NNr6aJrm4s3M │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://video.yandex.ru/circle&state/out-of-town/houses │ 3 │ +│ http://irr.ru/imagecache/wm/2013&where=all&film.ru │ 3 │ +│ http://b.kavanga.ru │ 3 │ +│ http:%2F%2Fwww.bonprix_ru}%2Fnizhniynovgorod/request-id │ 3 │ +│ http://edp2.adriver.ru/catalog/181 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://pogoda │ 3 │ +│ http://pogoda.yandex.kz/family │ 3 │ +│ http://svpress_w1t1042796786/6/?category │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://edp2.adriver.ru/jobinmoscow/detail │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://radiorecord.ru/catalog/idShare │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com/iframe-owa.html?1=1&cid=577&o... │ 3 │ +│ http://msk/planet.ru/mymail.aspx#comme_me_saydinne │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://card/windows NT 6.1) AppleWebKit%2F5 │ 3 │ +│ http://afisha.yandex.ru/forum.donfiscategory │ 3 │ +│ http://tks.ru/cat/publish-chin-play.php?categoriya%2Fzhiensmed │ 3 │ +│ http://video.yandex.php?topbloveche │ 3 │ +│ http://kazan.irr.ru/location │ 3 │ +│ https://produkty%2Fpulove.ru/voronezh-sien-zhienskaia-moda-zhienskaia-moda-zhie... │ 3 │ +│ http://nigma.ru/product&op_category_name=\xD0\x91\xD0\xB8\xD0\xBA\xD0\xB8\xD0\x... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://omsk/evential/housession%3D0%26url%3D//ad.adriver.ru/link/justic/h2.php/... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://loveche.ru/volzhskiy │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=1&s... │ 3 │ +│ http://smeshariki.ru/a-phony │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://magnitka_1_series.ru/?favorite_id=636233644&op_category_id=937514 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://ussuriysk.irr.ru/catalog/premiere/628962851d7fd0b6eb17b321d336f5bc7de189... │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountpage │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_produkty%2Ftanki │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/92054446660.ht... │ 3 │ +│ http://ekategoriya%2F9B206 Safari │ 3 │ +│ http://afisha.yandex.ru/tatatit_chto.php?industry │ 3 │ +│ http://smeshariki.ru/catalog/286/women.aspx │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://svpress/showbiz/photo.htm │ 3 │ +│ http://svpressa.ru/content/search │ 3 │ +│ http://video_dvd/game/iframe-owa.html │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://tp66.ru/search/?page=1&fuelRateTo │ 3 │ +│ http://e96.ru/real-estate │ 3 │ +│ http://lk.wildberries │ 3 │ +│ http://my.kp.ru/albumfoto-1/pol-2 │ 3 │ +│ http://holodilnik.ru/catalog │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://msk/platia%2Fzhienskaia │ 3 │ +│ http://personal/atlants/7292&xdm_c │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://povarenok.ru/files/eliteh.ru/perm.irr.ru/board,75.2013-07-09 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://brand=498&pvno │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://sp-mamrostovestory │ 3 │ +│ http://love.ru/?p=1#country=&op_seo_entry=-1&target │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://smeshariki.ru/?win=82&stat=141882,373;IC,2552f48 │ 3 │ +│ http://amobil-nye-pliazhnaia │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://irr.ru/washek-s-printom │ 3 │ +│ http://msuzie │ 3 │ +│ http://kinopoisk.ru/search │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://irr.ru/index.php?showalbum/login-kupaljinik-chere │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://smeshariki.ru/real │ 3 │ +│ http://wildberries.ru/item_no=2&evlg=VC,0;VL,205;IC,14;VL,757138/currency=RUR/h... │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostavia.travel.ru/s... │ 3 │ +│ http://3dnews.ru/?p=12636464/5#f │ 3 │ +│ http://smeshariki.ru/goodavec/photo/6936325.html?id=223978/page=102 │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic=79799398/?_h=search.htm... │ 3 │ +│ http://product_brand=RAINBOW&op_cated_content/search/keup/en-ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://love.ru/recipes/indows │ 3 │ +│ http://kaluzha-na-NovletedAutoSearch=0 │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory_id=577&search/ab_district/date_id=2271][from... │ 3 │ +│ http://afisha.yandex.php?app=membered │ 3 │ +│ http://afisha.yandex.php?ELEMENT_ID │ 3 │ +│ http://afisha.yandex.ru/lesyach-hotels │ 3 │ +│ http://afisha.yandex.ru%26bt%3D90%26nid%3D1216629 │ 3 │ +│ http://afisha.yandex.php?id=727285 │ 3 │ +│ http://love.ru/ru/irk/event=little&cated_country=-192.html?1=1&cid │ 3 │ +│ http://love.ru/?p=17057 │ 3 │ +│ http://str_ob.html?1=1&choosO8gPJSs3M&where=all&filmId=mAyiC7y6M2mGV2GoA9hFoN3q... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D1216629/0/&&puid1=m&puid2=23&pvno=2... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://you_hashkaf.ua/search │ 3 │ +│ http://auto_repairs=0&confiscategoriya │ 3 │ +│ http://wildberries.ru/GameMain │ 3 │ +│ http://povaria/chak_naytimes.ru │ 3 │ +│ http://pogoda.yandex.ru/real-estate │ 3 │ +│ http://afisha.yandex.ru/comment/search?text=\xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://kinopoisk.ru/sessulyanovka.ru/photosessid=3205&bt │ 3 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD0\xB2\... │ 3 │ +│ http://li.ru/filmId=XpzlPj8P8gE&where=all&text=\xD1\x81\xD0\xBA\xD0\xB0\xD1\x87... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://wildberries.ru/basket&ch │ 3 │ +│ http://soft.oszone.ru │ 3 │ +│ http://afisha.yandex.ru%2Fobuv-sapozhkivka=23&price │ 3 │ +│ http://afisha.yandex.ru/hotel-agen-Goluboj-9730 │ 3 │ +│ http://notebooking pressa │ 3 │ +│ http://auto_id=0&engineVolumeFrom │ 3 │ +│ http://smeshariki.ru/GameMain.aspx#location │ 3 │ +│ http://state/room=94720-recept-Salat-iz-glasya1lesyat │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://auto_repairs=0&po_yers=0&price.ru/\xD0\xB6\xD0\xB5\xD0\xBB\xD0\xB5\xD0\x... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://video_dvd/ratesTypeSearch?text=\xD1\x87\xD0\xB5\xD0\xBB\xD0\xBE\xD0\xB2\... │ 3 │ +│ http://omsk/evential/housession%3D0%26rnd%3D2%26bt%3D2%26nid%3D158197%26ad%3D21... │ 3 │ +│ http://slovari.yandex.ru │ 3 │ +│ http://kommersantamina │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://audio_video.yandex.ru/mosday.html?item=4#photo446962 │ 3 │ +│ http://afishers/story │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://video.yandex.ru/personal/offeebe34c7e12944&op_product │ 3 │ +│ http://v102.ru/investate/apartment/?id=137336IseNhcbx3J85GkHSnzgnsPdZUU&where=a... │ 3 │ +│ http://alpari.yandex.ru/saint-petersburg.irr.ru/cars/page3 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ https://slovarenok │ 3 │ +│ http://afisha.yandex.ru/real-esta.info/newsru.com.ua/kiev/detail.ru/auth=1..640... │ 3 │ +│ http://trashbox.ru/book │ 3 │ +│ http://video.yandex.ru/extra │ 3 │ +│ http://dom.net/provoe-pervouralnaya/ChildGluZ19oZXJlci1kYXRpb25zPU4mbj0zJmlkPTM... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/photo/narod.irr.ru/katering=1&pr=569&s_yers │ 3 │ +│ http://guid=6&pw=2&pv=0&with_video.yandex.ru │ 3 │ +│ http://love.ru/ru/irk/event=little&category_id=731-643736&mode=1 │ 3 │ +│ http://pogoda.yandex.ru/vlas-moskovskaya │ 3 │ +│ http://auto_ford Mix).mp3.ucoz.ru/v1430497.html%3Fhtml │ 3 │ +│ http://omsk/evential/housession%3D240%26rleurl%3D//ad.adriver.ru/marshavskaya-r... │ 3 │ +│ http://video │ 3 │ +│ http://radiorecord │ 3 │ +│ http://wildberring │ 3 │ +│ http://video.yandex.ru%2Fkategory_id=9759527418 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://smeshariki.ru/cgi-bin/click.cgi%3Fsid%3D0%26pz │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://bdsmpeople.ru/show/39932/Itemid,40.0.html_params%3DfsSaHR0cDovL2pzLnNtaT... │ 3 │ +│ http://state_shariki │ 3 │ +│ http://wildberries.ru/cgi-bin/click.cgi%3Fsize │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://balcon_caddy Club relove │ 3 │ +│ http://loveplanet.ru/Bezli-all │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://afisha.yandex.php?partments │ 3 │ +│ http://en.lyrsenses/zamba_zabor_polnitsa-s.narod.irr.ru/bank/otzyvy/12031%2F%23... │ 3 │ +│ http://video.yandex.ru/real-estate/out-of-town/house.ru&pvid=1&distreet_legkovo... │ 3 │ +│ http://auto_id=0&color=0&confiscategory_id=3205&bt=7&bn=1&bc=3&ct=1&prr=http:%2... │ 3 │ +│ http://kinopoisk.ru/registernet Explorer&aV=5.0 (Windows NT 5.1; ru-ru&cE=true&... │ 3 │ +│ http://kinopoisk.ru/spb.pulscen.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://saint-peter │ 3 │ +│ http://lazarevskoe │ 3 │ +│ http://whoyougle.com/iframe/iframe_right.ru/spb │ 3 │ +│ http:%2F%2Fwww.bonprix.ru/imagesize │ 3 │ +│ http://afisha.yandex.ru/manga.ru/?rtext=\xD0\xBF\xD1\x80\xD0\xB8\xD0\xB1\xD0\xB... │ 3 │ +│ http://smeshariki.ru/furniture.html5 │ 3 │ +│ http://cxem.net/324487194836848 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,947... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://video.yandex.ru/realty/search/main.aspx?sort=popular │ 3 │ +│ http://myloveplanet.ru/passenger/kitched_country_id=4312&input │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_product_brand=4200&lo=h... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://sunmar.ru/cart&ch=utf-8&sF=11,7,700&aN=Opera&aV=9.80 (Windows │ 3 │ +│ http://ssl.hurra.com/iframe-owa │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://saint-petersburg-gorod/goodal │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://un1.adriver.ru/page=30138117749516%252f110916%252fmedicinema/movie_ross ... │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&film/67... │ 3 │ +│ http://klubnich/zrh/ │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://wildberries.ru/comment/search │ 3 │ +│ http://wildberries.ru/comme%2F2.12.388 Version/1552/page │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://krasnodar.irr.ru/yaransferapid │ 3 │ +│ http://jobs-education │ 3 │ +│ http://gotovim-doma.ru/personal/commersant.ru/image=19&pvno=2&engineVolum │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 3 │ +│ http://irr.ru/index.php?showalbum/logizer8/num-1/refremost │ 3 │ +│ http://bdsmpeople.ru/index.by/ru/page=0&confiscategory_id │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://pogoda.yandex.ru/real-estate/apartments/73151 │ 3 │ +│ http://pogoda.yandex.ua/telefon_shtukaturkey │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://video=0&input_with_video.yandex.ru/page/10/women.aspx │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://afisha.yandex.ru/sell/resident │ 3 │ +│ http://afisha.yandex.php?p=176d43f96ef32d5bc1272 │ 3 │ +│ http://radioscannerica/film/47018.html?1=1&cid=691390&pvno │ 3 │ +│ http://auto_id=0&color=0&confiscategoriya%2Fzhienskaya-advert25593 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://forum/topics/ingradskazka-lookoformalities/poetry/events/?date&csrf-8200... │ 3 │ +│ http://video_dvd/suppoll/dleead6718.php?SECTION │ 3 │ +│ http://kinopoisk.ru/cgi-bin/click.cgi%3Fsid%3D1216 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=&is... │ 3 │ +│ http://rukodel=0&sort=newly&trafkey=27065/2/child.aspx#location │ 3 │ +│ http://zapchastny_fashing_mashes/index.ru │ 3 │ +│ http://msk/platia-nashing/vanny.diary.ru/otdam_daily │ 3 │ +│ http://smeshariki.ru/news/2013/peshnye-udivlekanka.ru/l_03_00/bodreamfood.ua │ 3 │ +│ http://myloveplanet.ru/bad_by_sidential/nizhnieiewva88 │ 3 │ +│ http://kinopoisk.ru/real-estate=2013-07-2089241607/photo=0&with_exchangeType │ 3 │ +│ http://video.yandex.ru/page=0&category&op_seo_entry=&op_category/used/KIA-Cee-d... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://direct.yandex.ru%2F&sr │ 3 │ +│ http://tyva-5/country=-1&washestvo/den_sidentialAmount │ 3 │ +│ http://mylove.ru/zoom.php?GID=2&IsOrder │ 3 │ +│ http://ssl.hurra.com/iframe/iframe-owa.html%26custom%3D%26custom │ 3 │ +│ http://en.lyrsenses/zamba_zabudka/procoolonelopitered/ministrict/3d-probeg-340-... │ 3 │ +│ http://arma/frl-4/travel.ru/moscow/details │ 3 │ +│ http://maps#ru_5_ru_1_ru_ru_ru_202_ru_1_ru_ru_ru_ru_2_ru_1743.html?oscsid=36303... │ 3 │ +│ http://rsdn.ru/info_all=yes&razdumy-i-trikshop/search&_h_page/1719920 │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://irr.ru/index.php?showalbum/login-do-500-kv-m-Maya │ 3 │ +│ http://chehod/zvenia8312&input_who2=1&input_age1=35&aN=Netscape │ 3 │ +│ http://pogoda.yandex.ru%2Fkategory │ 3 │ +│ http://kuharka=48&modeloveplanet │ 3 │ +│ http://sendflower │ 3 │ +│ http://avtoto.ashx/1001087496197797217530729; Media Centernet_mastersburg │ 3 │ +│ http://kaluga/?ext=\xD0\xB1\xD0\xB0\xD0\xB4\xD0\xBC\xD0\xB8\xD0\xBD\xD0\xBA\xD0... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://smeshariki.ru/index.ru/main.pl?cmd=show/47555 │ 3 │ +│ http://zagranimals-planet.ru/user/31059&Module │ 3 │ +│ http://afisha.mail.ru/stars/page │ 3 │ +│ http://myloveplants_list-obl.irr.ru%2Fobuv-zhienskaia-modiezhda │ 3 │ +│ http://smeshariki.ru/chipinfo │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://forum/topnews/222968695,910112_1164074834-908745 │ 3 │ +│ http://myfashihtzu.html?1=1&cid=65625f313230303&po_yers=2013/07 │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://bdsmpeople.ru/Web/price │ 3 │ +│ http://votpusk.ru/ │ 3 │ +│ http://afisha.yandex.ua/index.ru/recipe │ 3 │ +│ http://whoyougle.ru/basket&ch=utf-8&sF=11,7,7,7,700 │ 3 │ +│ http://video.yandex.ru%2F%2Fwww.bonprix │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://auto_operey-v-v-meha.ru/catalog/public │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://irr.ru/6323%26bn%3D27888895,96772&op_page47 │ 3 │ +│ http://video=0&is_hot=0&che_simeis │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D0%26ad%3D1216629/0/index.ru%26bn%3D0%26nid%3D... │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://wildberries.ru/page=0&vip │ 3 │ +│ http://kurort/SP1399&op │ 3 │ +│ http://irr.htm?from]=&int[852][to]=10&lastdiscussins/?keyworld │ 3 │ +│ http://wildberries.ru/filmId=4920/roomamountry │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 3 │ +│ http://nizhnieie-bielie-bieriends&fb_source-temno │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://forum/topnews/2229362067528195&op_categoriya │ 3 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 3 │ +│ http://afisha.yandex.php?w=3160/transports │ 3 │ +│ http://afisha.yandex.php?link=114735200&brand=23368 │ 3 │ +│ http://stories.ru/art/MACKLEMORE │ 3 │ +│ http://irr.ru/bank/otkrovnja-instvo.ru/search?text=\xD0\xBF\xD0\xB8\xD0\xBA\xD1... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 3 │ +│ http://pogoda.turizm.ru/communit=0&vip=0&order_by=2 │ 3 │ +│ http://maps#ru_5_ru_227_ru_3630&state/apartments-sale/secondary/pic/89395&op_pr... │ 3 │ +│ http://smeshariki.ru/Web/price │ 3 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 3 │ +│ http://radiorecord.ru │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 3 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 3 │ +│ http://ej.ru/muss/roll_to_audi/mode=replies │ 3 │ +│ http://zarplata.ru/?p=1290&op_product_price=990348531&schoosOSRquM8gE&where=all... │ 3 │ +│ http:%2F%2Fmuzhchine/ru-g-Chelya_v_tsentyabrskii │ 3 │ +│ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&top │ 3 │ +│ http://ur.hh.ru/file/news/2013 \xD0\xB3\xD0\xBE\xD0\xB4\xD0\xB0 │ 3 │ +│ http://my.alpari.ru/filmId=yJg89hqV8gE&where=all&film/530/?fromCityCodeForcentr... │ 3 │ +│ http://auto.ria.ua/auto_id=1&bc=3&ct=1&pr=9476648245557.html%26custom=1&damage=... │ 3 │ +│ http://bdsmpeople.ru/cgi-bin/click.cgi%3Fsid │ 3 │ +│ http://love.ru/?p=1#country=-1&sq_total=\xD0\xBE\xD1\x82 │ 3 │ +│ http://guid=6&pw=2&pv=0&po_yers=0&with_video │ 3 │ +│ http://tks.ru/filmId=rQRZO_mhUXI&where=all&filmId=z7pOMYOJ8gE&where=all&text=\x... │ 3 │ +│ http://gorbus.aspx#localiformalitic │ 3 │ +│ http://msk/events/7401438966/page_type=0&m_city.info/forum.rostov.irr.ru/msk/ev... │ 3 │ +│ http://omsk/evential/housession%3D90%26rnd%3D839322%26ntype=0&expand_search/obm... │ 2 │ +│ http://omsk/evential/housession%3D%26custom=0&damages/0000&with_photo/photo/708... │ 2 │ +│ http://kinopoisk │ 2 │ +│ http://video=0&input_state │ 2 │ +│ http://poisk.ru/news/articles │ 2 │ +│ http://forum.php?t=420 │ 2 │ +│ http://mysw.info/node/21544 │ 2 │ +│ http://smeshariki.ru/tashkinsk │ 2 │ +│ http://smeshariki.ru/product&op │ 2 │ +│ http://yaroslavl.irr │ 2 │ +│ http://board=11.ua.150.html%3Fhtml │ 2 │ +│ http://pogoda.yandex.ru/jobinmoscow │ 2 │ +│ http://afisha.mail.ru/cheva.ru/reportby │ 2 │ +│ http://3dnews.ru/msk/events │ 2 │ +│ http://slovarenok.ru/chapochki │ 2 │ +│ http://pogoda.yandex.ru/real │ 2 │ +│ https://diary/2013-07-05/101090/currency │ 2 │ +│ http://krasnyj-chastory │ 2 │ +│ http://kinopoisk.ru/saint │ 2 │ +│ http://pogoda.yandex.php?showalbum │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://rlsnet.ru/nogin.html5/v12 │ 2 │ +│ http://spb/event=big&marka=84&model=0&auto_id=0&s_yers=0&pv=10&category_name=\x... │ 2 │ +│ http://moscow/detail/Torgovljatory/storii_efferanslyatting │ 2 │ +│ http://sslow_13500000%26rnd%3D278888 │ 2 │ +│ http://kaluga/?ext=\xD1\x80\xD0\xB5\xD0\xB9 \xD0\xBD\xD0\xB0 \xD0\xB1\xD1\x80\x... │ 2 │ +│ http://auto.ria.ua/auto_auto.ria │ 2 │ +│ http://mysw.inform%26q%3Dversion.cheltyj │ 2 │ +│ http://diary.ru/search?familliklink │ 2 │ +│ http://ftp.auto.ria.ua/search?text=\xD0\xB8\xD0\xB3\xD1\x80\xD0\xB0 5 \xD1\x81\... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,940... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://ssl.hurra.com.ua/auto_repairs=0&page=10&category_id=detail │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://pogoda.yandex.ru/chat/ivan │ 2 │ +│ http://svpressages/00012166260001216629%26sliceid%3D0%26ad │ 2 │ +│ http://video.yandex.ru/rent/info/messa.ru │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?so... │ 2 │ +│ http://yartb.html?city=55&TopicID=2&IsOrderedProduct │ 2 │ +│ http://wildberries.ru/editem_no=100¤cy=1#country=&op_proizvodskaya-obuv-z... │ 2 │ +│ http://wildberries.ru/filmId=4920/room=1&lang=all&filmId=DnGbyVQVUXI&wheretomug... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D//a... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D0%26pz%3D0%26rleurl%3D%26... │ 2 │ +│ http://news/398261_enl.jpg-1 │ 2 │ +│ http://afisha.yandex.ru/?trafkey=54073799 │ 2 │ +│ http://afisha.yandex.php?id=1620_4_licanel │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://ur.hh.ru/page=10&can_be_checked_auto_region=1&rm=1&lang=all&film/18212.1... │ 2 │ +│ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 2 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 2 │ +│ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 2 │ +│ http://wildberries.aspx#location/group_cod_1s=53&butto_repairs=0&with_photo=0&i... │ 2 │ +│ http://wildberries.ru/index.ua │ 2 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.045 user 0.440000 sys 0.004000 +D 0-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +┌────────────────┬────────────────┬─────────────┬────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────────┐ +│ TraficSourceID │ SearchEngineID │ AdvEngineID │ src │ dst │ pageviews │ +├────────────────┼────────────────┼─────────────┼────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────────┤ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33069 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 24703 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 15817 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 14233 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 │ 6549 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 │ 5257 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 5257 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 3547 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login │ 3538 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik │ 3371 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php │ 3333 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 3309 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 2923 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 2616 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 2441 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php │ 2418 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 2390 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari │ 2367 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 2349 │ +│ 1 │ 0 │ 0 │ https://google.com.ua/url?sa=t&rct │ http://komme%2F27.0.1453.116 │ 2228 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 1920 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://komme%2F27.0.1453.116 │ 1679 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ekburg.irr.ru%2Fpuloveplanet │ 1340 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://aliningrad │ 1270 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1254 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1213 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1193 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1186 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 1142 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F27.0.1453.116 │ 1007 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 954 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://aliningrad │ 859 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login │ 821 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 791 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555419/page=show_photo/70946/detail/55212.15&he │ 777 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 757 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 722 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://video.yandex.php │ 702 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 691 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/obucheyelants │ 684 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 632 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 593 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 577 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://smeshariki.ru/obucheyelants │ 566 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.php │ 452 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 445 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBA\xD0\xBE\xD0\xBD\xD1\x82\xD1\x80\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 422 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 421 │ +│ 0 │ 0 │ 0 │ │ http://obninsk/detail │ 407 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 386 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug.ru │ http://irr.ru/index.php │ 374 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru/index │ 360 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 348 │ +│ 2 │ 0 │ 13 │ │ http://komme%2F27.0.1453.116 │ 347 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-2011/43597 │ 293 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 293 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6HS │ 282 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 268 │ +│ 3 │ 72 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 267 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 259 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 257 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari │ 256 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 │ 241 │ +│ 1 │ 0 │ 0 │ http://google.ru/realty │ http://irr.ru/index.php?showalbum/login │ 237 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 │ 236 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/28435&lr=157 │ http://komme%2F27.0.1453.116 │ 233 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/ru/photo/6936313555&text=\xD1\x85\xD0\xBA \xD0\xBB\xD0\xBE\xD... │ http://komme%2F27.0.1453.116 │ 224 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php │ 223 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cat/dushkirillovyj │ http://komme%2F27.0.1453.116 │ 222 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=359&op_page2/... │ 218 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kriminally-bezhevsk │ 217 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0 │ 212 │ +│ 3 │ 1 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 207 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 202 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 199 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://ekburg.irr.ru%2Fpuloveplanet │ 199 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 198 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 197 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 195 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/414526863.xlsx │ 191 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CDMQFjAJ │ http://irr.ru/index.php?showalbum/login-kiriskaya-obl.irr.ru/index.ru/GameMain.... │ 190 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=0&with_photo.ashx/101/4/?cat=6257271 │ 188 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=partments-sale/search?text=\xD1\x81\xD0... │ 187 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://afisha.yandex.ru/index │ 183 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://ekburg.irr.ru%2Fpuloveplanet │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 178 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://ekburg.irr.ru%2Fpuloveplanet │ 171 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 168 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 164 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 163 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://ekburg.irr.ru%2Fpuloveplanet │ 160 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 160 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/life.ru/cars/misc/travel.ru/?trafkey=058143&p... │ 155 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 │ 154 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=577&oki=1&oby=&op_s... │ 152 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://wildberrior/uphold │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6HS │ 150 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 149 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login │ 146 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustic/meterburg │ 144 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 144 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 144 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php │ 143 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E │ 141 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 140 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://kinopoisk.ru/news/2146555f3530316995264from]=&int[27][]=&selection/01a54... │ 136 │ +│ 1 │ 0 │ 0 │ http://kombardighantnie │ http://komme%2F27.0.1453.116 │ 136 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login │ 135 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kysjacevtika │ 132 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://komme%2F27.0.1453.116 Safari │ 124 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 121 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category/stroy/dachines... │ 114 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/?state │ http://komme%2F27.0.1453.116 │ 113 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/GameMain │ http://komme%2F27.0.1453.116 │ 113 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 111 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login │ 110 │ +│ 3 │ 85 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 110 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kardigan │ 109 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 107 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosoftwarenok.ru/projects/zhbi.po... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 105 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268143.html?1=1&cid=577&o... │ 104 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 104 │ +│ 0 │ 0 │ 0 │ │ http://tvidi.ru/photo=0&confiscategory_id=0&engineVolumeFrom=&fuelRateFrom=type... │ 103 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 102 │ +│ 3 │ 14 │ 0 │ │ http://komme%2F27.0.1453.116 │ 102 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 100 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 98 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://video.yandex.php │ 97 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId=GVlrcUaGUXI&wher... │ 96 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.21150895 │ 96 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?sort=price │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 95 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login │ 95 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.12.388 │ 93 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 93 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 92 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberrior/uphold │ 92 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 91 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-tanks/search=1&ady=62&modeloveplanet.ru │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 90 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.145332.15&he=10&category_id=2740387993 │ 89 │ +│ 1 │ 0 │ 0 │ http://in-the-weightEnd=2351&numphoto=&isExclusiver.ru/alertljus │ http://komme%2F27.0.1453.116 │ 88 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fprodazha_Italja_unit=1&av=1&nm=1&lang=ru │ http://irr.ru/index.ru/show/414526863.xlsx │ 87 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 86 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb1.html?item_no=386703/?bundle=7172&msid=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 86 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 │ 85 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 84 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733582852/ │ 84 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupit/action │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 83 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 82 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 82 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?bodystyle │ http://komme%2F27.0.1453.116 │ 81 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F22.14&he=768486 │ 81 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusk.ru/ru/lookaginitial/Prodayu-Dach... │ 80 │ +│ 3 │ 4 │ 0 │ │ http://komme%2F27.0.1453.116 │ 80 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 79 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://aliningrad │ 78 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 78 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login │ 76 │ +│ 1 │ 0 │ 0 │ https://go.1ps.ru/show&showforum │ http://komme%2F27.0.1453.116 │ 76 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandex.ru │ http://komme%2F27.0.1453.116 │ 76 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26221/detail.ru/v1496366&... │ 75 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php │ 75 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 74 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%2F&sr=http://bonprix.ru... │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len80/page/product │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filtr/all/perm.pulscen... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 74 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://irr.ru/introlux_page5/2/pageType=product_name=1&menu_7 │ 73 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 73 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F1.7.1364.172 │ 72 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://diary.ru/forum/intries │ 72 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/show/414526863_112 │ 72 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2618561&pp=1059&op_produc... │ 72 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://video.yandex.php │ 72 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 71 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 71 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari │ 71 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://aliningrad │ 71 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=product_id=42&Selection.chelov.ru/searc... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/yandsearch?te... │ http://irr.ru/index.php │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/server=sc.chel.ru/main... │ http://irr.ru/index.php │ 70 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification/?year=\xD0\xB1\... │ 70 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2791954~43.87725656132&op... │ 69 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://komme%2F27.0.1453.116 │ 69 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/produkty/bleacs/udilis... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 69 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&wi=1366&br... │ 68 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 67 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731&CgID=124jc&where=all... │ 66 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/Yozh/Goodda │ http://komme%2F27.0.1453.116 │ 66 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2725215195&ti=\xD0\x9F\xD... │ 66 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://ekburg.irr.ru%2Fpuloveplanet │ 65 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru/index │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 65 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 64 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://afisha.yandex.ru/index │ 64 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 63 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nmg.com%2F4.0 Safari%26clients-sale/search&e... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 63 │ +│ 2 │ 13 │ 13 │ │ http://komme%2F27.0.1453.116 │ 62 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 62 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://irr.ru/index.php?showalbum/login │ 62 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://ekburg.irr.ru%2Fpuloveplanet │ 61 │ +│ 1 │ 0 │ 0 │ https://gotovka/hotels.turizm │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 61 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia │ 61 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 61 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26092.html?s_text=\x5C\x5... │ 59 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/thenon-houses/public/g... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27755f32316.30; .NET CLR ... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742/details/?cauth=0&dam... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fautoad/kniga.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26004/?_h=galle/\xD0\xBF\... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert27930555&sob=1&p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2692.html%3Fhtml?period=3... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/world/photo31469:Album... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=leting "HalUXI&where=\xD0\x9F\xD0\xB5\xD1\x8... │ http://irr.ru/index.php?showalbum/lofiver.ru/articles/86121%26uid%3D139750%26ad... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27000,224648804-recept-so... │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/koshka.com/ig/iframe-o... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 58 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory=cinema.perm.p... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/realty/suntime-5/extre... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742357/detskii_gosts.xml... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2742304][from]=&int[14670... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694336/photo/suzannason/... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Forum25/top... │ 57 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268320995,968650f45491882... │ 57 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupit/action │ 57 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1375605&ga... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 57 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://video.yandex.php │ 56 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga/choice/... │ http://nizhnieie/novo/a78920&lo=http://sravni.ru/reposition/vacancies/eduard_32... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 56 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_product_... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?showtopic,5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26017/quarius_Moscow/cavi... │ 55 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2726125413975d77cf&search... │ 55 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 54 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266848223/review_type=pro... │ 53 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://obninsk/detail │ 53 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26989%26bt%3Dad.adriver.r... │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/metro=144&ved=0CEUQFjAB&url=http://bonp... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 52 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/album/login-1800002&pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 52 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0 │ 51 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2698172,93932353064614618... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605085268a9c4d61-9862.49... │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19&numphoto/login=A-CL-MS-36575c72937][to]=&int[12822304 │ http://irr.ru/index.ru/widgetchrome%2F&ti=no&dom_v_bordovye-printime.ru │ 51 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/investate/comple/make/?page5/&docid=jlMNIrXw... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 50 │ +│ 0 │ 0 │ 0 │ │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 50 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F11.7.1364 │ 50 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http:%2F%2Fwwwwww.bonprix.ru/GameMain.aspx │ 50 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://kurort/SINA, ADRIAN - Foreversant.ru/busineshevsk │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26051.htBeg=6&NightRegist... │ 50 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xBE\xD1\x81\xD0\xB8\xD0\xB1... │ 49 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 49 │ +│ 5 │ 0 │ 0 │ http://state=19&text=\xD0\xB4\xD0\xB0\xD1\x91\xD1\x88\xD1\x8C │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 49 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?group=days=3&text=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27410/photo-2.xhtml&serve... │ 48 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect.yandsearch │ http://komme%2F27.0.1453.116 │ 48 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http:%2F%2Fwwwwww.bonprix.ru/voskres.php?gr=1665773aad1900%26ntype │ 48 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusty-i-vkont.at.ua/search=0&userId=0... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266128182&op_seo_entry/de... │ 47 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?sort=&br... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/intrumen │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://afisha.yandex.ru/index │ 46 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupalnik │ 46 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumanegenre=33155?analog/kitchen_mini... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 46 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://irr.ru/index.php?showalbum/login │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login%2Flick.g.doubleclick.diary.ru/car/kw/3061/us... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734.html_params%3Dfh_loc... │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://afisha.yandex.ru/index │ 45 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/GameMain.p1Yo4A │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ua/searchads/jo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 45 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605906/frl-2/sportal.ru/... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fshow/lpp/cre.ru/pers... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostovskiy-kray.irr.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/login │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.asp?search&ev... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 44 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logize.ru/msk/events_liver.ru/russert-plies.r... │ 44 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26099486633033&countpage=... │ 44 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://sslow_135000008&position=search │ 43 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 43 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischet-solik/odezhda-plos... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert277553/38021/66936575776/... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271050&with_photo.kurortm... │ 43 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 43 │ +│ 1 │ 0 │ 0 │ http://forums/liii-kuler S22oHgBJTngegotavgorod55.ru/filtr[2]=42 │ http://komme%2F27.0.1453.116 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 42 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-folders/?end=9a08488... │ http://irr.ru/index.php?showalbum/litamak.irr.ru/catalog/8570/travel.ru/cgi-bin... │ 41 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 41 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 Safari │ 41 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/0001216629/#top_by │ 41 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26040931&s_yers=0&with_vi... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://ekburg.irr.ru%2Fpuloveplanet │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.137508&s_yers=200... │ 40 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://aliningrad │ 40 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logito8ergo_6470/page_type_id=20872/0/001:12:... │ 40 │ +│ 0 │ 0 │ 0 │ │ http://afisha.mail.ru/dmitrij │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/readar-nashi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 40 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27924563724&key=46960/med... │ 40 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://lib.ru/exp?sid=3205&bt=7&bn │ 40 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 39 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credit │ http://komme%2F27.0.1453.116 │ 38 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=8570/page=5&s_yers=2006 │ 38 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2679/detail/5482,935033/2... │ 38 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 38 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://irr.ru/index.php?showalbum/login │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dnevnoy-kv-Samara.irr.ru/searchAutos&marka=4... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 37 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://komme%2F27.0.1453.116 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=1 │ 37 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=theating&page=... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?group │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2784389/room=39695,966681... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/forum/topicID=269&stat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/votkim-rukav-i-kova-ul-adve... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wolf-club478561/OPEL | \xD0\xB0\xD0\xB2\xD1\... │ http://irr.ru/index.php?showalbum/login-marka=13&city&custom=0&damages/0001216 │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/filmId=xFX1UbTNJjxe4yF... │ http://irr.ru/index.php?showalbum/login.asp?razdel7/test/matched=115909d9_dsc07... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27553&s_yers=0&po_yers/46... │ 37 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert275226607660?design=6efxq... │ 36 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http:%2F%2Fbrjuki-lic-shop.ru/ch/metersburg/contertype%3D158197%26ad%3D1216629/... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=show=&fgroup-tab-mara.irinables/yearT... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278171&size=52094&op_seo_... │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27330528/photo/6223799%26... │ 36 │ +│ 5 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 36 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36&he │ 36 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://smeshariki.ru/obucheyelants │ 36 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=post_neu%3D22%26pz%3D0%26rleurl%3D%26xp... │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vip.ru/book.com/photo/7086/page=0&state=mont... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 35 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/catalog/8569 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/index.ru/katego... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-cukickdrops_bak_yant4tlGtZgy3BQ&bvm=bv.49478... │ http://irr.ru/index.php?showalbum/login-501-98552&op_uid=1060948/6#f │ 35 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (Windows │ 35 │ +│ -1 │ 0 │ 0 │ http://state=19&m_staraya-obl │ http://irr.ru/index.ru/show/414526863_112 │ 34 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.12.388 │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 34 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/promo=C-Tease/rent/dat... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 34 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_uid=1... │ 34 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/list │ http://lib.ru/exp?sid=3205&bt=7&bn=1&gearbox=0&type_id=0&last_auto_ria=0&type=0... │ 34 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/directadvert/kavanga_728x90.html │ http://komme%2F27.0.1453.116 │ 34 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshops.xml?typ │ http://komme%2F27.0.1453.116 │ 33 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/exp?sid=3205 │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?cPath=default.ru/yandex.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 33 │ +│ 1 │ 0 │ 0 │ http://auto.ria.ua/\xD0\x9A\xD0\xBB\xD0\xB8\xD0\xBC\xD0\xB0\xD1\x82\xD1\x8C\xD1... │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 33 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate/apartner │ http://video.yandex.php │ 33 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 33 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 33 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser │ 33 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga_728x90 │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265748ba3f755671_1162684&... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertif?sle=85000 \xD0\xB4\xD0... │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 32 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F27.0.1364 │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/pub │ 32 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zxcvbnm1990&search/jobinmoscow.ru/yandex.by/... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 32 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements-obschaya │ 32 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru%2Fproduct/foto-4/login... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&op_category_id=1174]... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniturers_id=575386110 │ http://irr.ru/index.php?showalbum/login.exit/rem/php/board/10_kruizer_8267049&o... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiepochto_id=93231238][to... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://afisha.yandex.ru/index │ 31 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://ssl.hurra.com/iframe │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertischuk_Kerasivye-klavik/?... │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/jobs-education/m_acces... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26791e3a7c543c9bf9ef5c0-9... │ 31 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 31 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt │ http://komme%2F27.0.1453.116 │ 31 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_api.php?cid=41389/rooms/perm.pulscen.ru/sear... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertificia/?letteo_985428161/... │ 30 │ +│ 1 │ 0 │ 0 │ http://domchelov.html&lr=55&text=\xD0\xB4\xD1\x80\xD1\x83\xD0\xB3\xD0\xB8\xD0\x... │ http://komme%2F27.0.1453.116 │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoryID=12452929587/... │ 30 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 30 │ +│ 1 │ 0 │ 0 │ http://video.yandsearch │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 30 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6DQgE4LmUXI&where=all&filmId │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert268630533&site_ot=&price_... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-k608i.trashbox.ru/cars/page5/&docid=577&lr=2... │ http://irr.ru/index.php?showalbum/logii_58247.php?forum.borovichy77/page5 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2716/~3/150160947694,9745... │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/products/?category_id=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2696374/#page/tab=com_avt... │ 30 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru/topic │ 30 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26979553039353936694&ch=u... │ 30 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.14&he=768&wi=1920 │ 30 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605446518%2F&sr=http://e... │ 30 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://smeshariki.ru/obucheyelants │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-carava/fotok-8-steklove.ru │ http://irr.ru/index.php?showalbum/login-yuoocor.ua/user │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26928142&op_products/view... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kupibatikov/?recrete/personal/klimat.ru/work... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 29 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x9A\xD0\xBE\xD1\x80\xD0\xBE\xD1\... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertifications[0][150]=60&inp... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/wedditeli_foto-2/__48/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_countpage/1 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/click.net/paged=696&lo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274229696.0 (Windows)&bL=... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-14132&with_photo=1&srtime-zone.net/catalog/t... │ http://irr.ru/index.php?showalbum/login-sierra%2Fdlia-zhienskaia-moda-zhiensmed │ 29 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2664952&xdm_p=1#country=-... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704.html%3Fhtml5/v12/?fr... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2734/fotographic_2017666&... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategoriya/zhienskaya-... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9649.html%3... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/small_mercial-shoppicc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27350350394&ch=UTF-8&sF=1... │ 29 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-baza/gadge... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_seo_entr... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27425.3120%26ntype_id=2&r... │ 28 │ +│ 1 │ 0 │ 0 │ https://directions[0][1541769377921968 │ http://komme%2F1.7.1364.172 │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13733097&op_categ... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert272291684/hasimage=0&view... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makuma.html?category_id=1017&lr=213&tex... │ http://irr.ru/index.php │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/mann japanel/?text=\xD1\x81\xD0\xBC\xD0... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269500469412216388/detail... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-my-sovies/bebybum.homestion bonprix.ru/... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikarbox=2&tz=9b81998&po_y... │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://video.yandex │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F8536.26 (KHTML │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-176-kakaya-obl.irr.ru/search?lr=191&ei=N6rrg... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?lang=all&fi... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\xA4\... │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/anime-2/#album/l... │ 28 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML, like Gecko │ 28 │ +│ 3 │ 95 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-eve-nn.ru/cars/passenger/\xD0\x92\xD0\x90\xD... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274236&pv=15&prr=8&sid=35... │ 28 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 28 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/poned │ http://irr.ru/img/catalog/53485785/topic/8939858-59929477/detailshop │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19&m_static.diary.ru%2Fpugache=51dba668ea2feb2Xw │ http://irr.ru/index.ru/show/41452626u1zIq0SGLXCI │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=Mitsundai/malitics/katersburg.irr.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 28 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/gold │ http://ekburg.irr.ru/#lingvo │ 28 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F22.14&he=768486 │ 28 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login.html?1=1&cid │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678/page=2&marka=84&mode... │ 27 │ +│ 3 │ 2 │ 0 │ │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/search?cl4url=http://yandex.ru/online... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27013.ya.ru/sportalznakom... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert24061.jpg.html%3Fhtml?1=1... │ 27 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031343-sh-898675/sort=pri... │ http://irr.ru/index.php?showalbum/login-5158&jenre/slyudya_metroman.ru/GameMain... │ 27 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19195/offset=101&district=&city&with_photo=¤cy │ http://irr.ru/img/catalog/53485785/topic/8939850.php?page=3&marka=84&mm │ 27 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://auto_map6%26pz%3D0%26geozone.net/201597547,8.0.146/imagecachel │ 27 │ +│ 1 │ 0 │ 0 │ http://forums/liiie/?target │ http://obninsk/detail │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fhit_list.html?s... │ http://irr.ru/index.php?showalbum/login-irake-myservierk-supierts%2F&ti=\xD0\x9... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-oleginnesujeli-i-centum=etarget=search?clid=... │ http://irr.ru/index.php?showalbum/login-kupe.html_params%3Drhost%3Dad.adriver.r... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27928092_price=\xD0\xBC\x... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/mazda-dievochnye_avari... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-kupalnik.10065%26bn%3D0%26ad%3D158197%2... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-19.xhtml?city_to_one=All&film]/on/orders/810... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/1.19.mobile_photo=6001... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27630/?item_id=0&bodystyl... │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId │ 27 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/poned#pa\xD0\xBE\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 27 │ +│ 1 │ 0 │ 0 │ http://bonprix_ru_11559&lr=12&usln │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lizova_ii_1112_1150&option[price_do=300... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search=0&choosO7a_rEk3E&wher... │ 26 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detall/seconomicsmovinki │ http://komme%2F27.0.1453.116 │ 26 │ +│ 1 │ 0 │ 0 │ http://yandex.ua/?target=search/tab=user │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 26 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 26 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://obninsk/detail │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 26 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/loginsk.irr.ru%2Fkategory_id=9204471-650/?_h=... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login-jjjekrju-s-pring=1&price[price=\xD0\xBC... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification.ru/messa.ru/rea... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lejandsearch?text=\xD1\x82\xD0\xB8\xD1\x85\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert21124631/?Search.php │ 26 │ +│ -1 │ 0 │ 0 │ http:%2F%2FwebcamMax │ http://afisha.yandex.ua/auto_id=1430][to]=&int[260][20][to] │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_category... │ 26 │ +│ 3 │ 197 │ 0 │ │ http://komme%2F27.0.1453.116 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?messa.ru/worlds/page2/7277932582&text=\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 26 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/openson XA2oYUXI │ http://irr.ru/index.php?showalbum/login-kupe-20010120652838799.html?n=7148.html... │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemey-volvom80Cw&where=a... │ 26 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://afisha.yandex.ru │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandsearch?text=\xD0\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 26 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_category │ 26 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=607&state=4... │ 26 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.22 (KHTML, like Gecko) │ 25 │ +│ 1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http:%2F%2Fwwwwww.bonprix.ru%2Fkategoriya │ 25 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978184 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=1&state │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/people.ru/cars/passets... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2731/?city=0&pvno=2&evlg=... │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-vivarki/redki_sdelaet-law.ru/produkty/kartgo... │ http://irr.ru/index.php?showalbum/login=driff/en-ru/?p=2#messages/00001216629 │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/offection │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.html&ei=GcXrUYe8F2DAU-RbuRlLMczoJ--5uDCx8 │ http://irr.ru/index.php?showalbum/login-132/#images/0000.h95/\xD1\x82\xD1\x8E\x... │ 25 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert264314953); ru) AppleWebK... │ 25 │ +│ 1 │ 0 │ 0 │ http://auto/auto.ria.ua/search/tab │ http://obninsk/detail │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search?text=myaccountry │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 25 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguard-payments-sale/se... │ http://irr.ru/index.php?showalbum/login-88i8LaDyEkCVv6-DhRfEDcw==&action │ 25 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/yandex.ru/?f... │ http://video.yandex.ru/page=0&category&op_seo_entry=&op_categoriya │ 25 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F537.36 (KHTML │ 25 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://video.yandex.ru/film/46351/frl-2/bage │ 25 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=7329 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2605838.html5/v12/?from=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694589/detail/555-javata... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741559&t=5204/make=Chrys... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-link=1147373-1&p=1&p=2&text=\xD0\xBC\xD0\xBE... │ http://irr.ru/index.php?showalbum/logisterlingvo/#! │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?cmd=shops.html?id=1&body_type=\xD0\xBF\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://irr.ru/index.php?showalbum/login-kupaljiteraturka │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781472265&op_seo_entry=&... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626rleurl%3D//ad.adriver... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685/price_ot=&price=\xD0... │ 24 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://diary.ru/forum/intries │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27399992.php/board,13.0) ... │ 24 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/login-117031&op_category&op_seo_entry=&op_uid │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671291&fridgets/2012&pri... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26685857947301_Zoryatiya/... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-annative-expressageId=0oVXx21hUXI&where=all&... │ http://irr.ru/index.php?showalbum/login-rybnovlevojj_mamountry=-1&type%3D0 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo/7... │ http://irr.ru/index.php?showalbum/login-kupit-plitka-s-korsiety/art/151/n4p/160... │ 24 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://video.yandex.php │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumyi-dachat/jaguar.ru/page4/?emain.a... │ http://irr.ru/index.php?showalbum/login=ogabass.ru/filmId=9WOqzzitive&view │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/intrumen │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kupalnaya_elit=&id=3&clid=9403&lr=1913849 │ http://irr.ru/index.php?showalbum/login-gallebia_zhurnalCall D.R.E.mp3ex.net/ph... │ 24 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-lolacake/tatyaka.html?1=1&cid=577&oki=1 │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinglish.rus-l7-p70505-1... │ 24 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/yandsearch?lr=1... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-yvaken/topic=7702.jpg.html?1=1&cid=577&... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=1&bc=3&ct=1&pr │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-547552/1/?sma=RAINBOW&op_uid=fdd1b9d2721728&... │ http://irr.ru/index.php?showalbum/login-kapusta-advertika/search/room=1&damage=... │ 23 │ +│ 1 │ 0 │ 0 │ http://auto_volkswagency=1&text │ http://komme%2F27.0.1453.116 │ 23 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgarials/commend/searchvage-2.html&dt=13734... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-tuniki_510... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263090024189-528619c2077/... │ 23 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://smeshariki.ru/ru/index.ru%26bid │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333572620201709/page/10... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news/radio&clid=198555... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26939.html?page/3/#count=... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2740974%26pz%3D0%26ar_sli... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/index.ru/kategory_id=5... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 23 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo │ 23 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://liver.ru/a/far_applunzsxi.cmle.ru/search?text │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/resultatya9176da22f1a521a5853.html&... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 23 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapustom%3D%26xpid%3DBBn-investate=toda... │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26600721376439322%26pz%3D... │ 23 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page │ 23 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://stalker-pub-20087898675494,960948/#page_type%3D260117152337&spn=1395,945... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/advert/kavanga_728x90.... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://afisha.yandex.ru │ 22 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=2512592 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisemennoke0070553995f27d6... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2697574697.html_param=0&u... │ 22 │ +│ 5 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-105vr/ │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=search.tutung/s... │ 22 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/wheel.ceratornaya_solnechka │ http://komme%2F27.0.1453.116 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2091&local=1&TypeSearch?mail.ru/yandsearch&c... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26058&nnum=s4746835895&op... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-10760b31b65633eZateq eb806e887d9f15ccf593280... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-the-ili-tempera-minsk.irr.ru/produkty/bluzki... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739693071/pomer... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodny │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2649.html?pg=menu_29.jpg&... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnik.ru/v1465][from]=&int[157281 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267830840994,95688781470%... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-business/sale/ru/search?mail.ru/film%2Fbarna... │ http://irr.ru/index.php?showalbum/login-zakon_type=1&fuelRatesTypeSearch │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 22 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27200,55.7654.html_parat-... │ 22 │ +│ 1 │ 0 │ 0 │ http://radioscannetcat=threadreplies │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&l... │ http://irr.ru/introlux_page5/2/page/Renaul.irr.ru/start=1500-rublic/gamemain/Tu... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26601629][from=&fuelRateT... │ 22 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://ekburg.irr.ru%2Fpuloveplanet │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-natashkarola.irr.ru%2Fviewforum/MsgList.html... │ http://irr.ru/index.php?showalbum/login-kapusta-advert26900/technics-technics-t... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liliate_id=24145602&with_phoney.yandex.ru;ya... │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 22 │ +│ -1 │ 0 │ 0 │ http://state=19&num=5&s_yers │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&city[7]=23239330794,25826044_Black_lis... │ 21 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?price_till beli.php?cx=015216684_36 │ http://komme%2F27.0.1453.116 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691_ru_17832523.html_par... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694,978825315f373400/det... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1) AppleWebKit%2F537 │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/world/photo/41/62b1dfa450/3/women-clother%26tms%3D%26ev_ltx%3D... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachka/saledParam │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomaha.diary.ru/forum%2Fukhov/l... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27025&Select[4][]=32598.h... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/basketshop.ru/yandsear... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert265228.html?1=1&cid=577&o... │ 21 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://wildberrior/uphold │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo44953.116.php?t=4... │ http://irr.ru/index.php?showalbum/login=ko&page=0&view.aspx?group_cod_1s=85&key... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/?from │ http://en.lyrsense.com.ua/?tag=type=category_id=1555768&wi=136225..87245-937559... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/houses/passenge... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-dance/index.ru/?favorite_off=1&encoding&hl=\... │ http://maps#ru_5_ru_22106.37766/men.aspx#location/topic.php?razdnuyu-komnatalog... │ 21 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F5.0 (Windo... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logino-s-grigerator/page1=&input_age1 │ 21 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 21 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/cars/commeddesk.ru/google_s&12.5.746.59954.30 (KHTML, like/\xD... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ramblery/pic/893985650697... │ http://smeshariki.ru/obucheyelants │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26737865/?page/12186/#/ec... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=199450984062 │ http://irr.ru/index.php?showalbum/logii-bin/click.cgi%3Fsid%3D158195,97987231-9... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/histofelny.i... │ http://irr.ru/index.php?showalbum/login.html?1=1&input_who1=2&input_who2=1&inpu... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/img/catalog/53485785/topic,806;IC,33;VL,1430/photo │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-brie... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-dietsik.ru/razdel_id=111,7,700&w=728x90.html... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929&from%3D%26custom=0&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/club.ru/anime-zone.ru/... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2186/detail.aspx#location... │ 21 │ +│ 1 │ 0 │ 0 │ https://google.com/fee=\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x8C\xD1\x88\xD0\xB5 │ http://irr.ru/index.php?showalbum/login-kapusta-advert2686305895&op_seo_entry=&... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098-1.13739353/details.... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kupalnik │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification%2F4.0; XBLWP7; ... │ 21 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/9-0--navam-zhien... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2741465][from]=&input_wit... │ 21 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapustom=0&Itemid=577&oki=1&op_uid=1147... │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login=uzpp2XnEw&bvm=bv.49784469][from │ http://auto_s_product_id=25292.1406.798352/women.aspx?group_cod │ 20 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&sr=http://afisha │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-Larki-i-korobeg-1124-95367/guestblowinp... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26219&wi=1280&lo=http://w... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/yandex.ru/real... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estatic.diary.ru/... │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=58&Selectronics-technics/k... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?er=2&text=\xD0\xBA\xD1\x83\xD0\xBF\xD0\xB8\... │ http://irr.ru/index.php?showalbum/login=razer2.moikrug.ru/recipes/shop.spb │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b706234651&op_uid=1&b... │ 20 │ +│ 1 │ 0 │ 0 │ https://mysw.info=sw-131726275 │ http://komme%2F27.0.1453.116 Safari │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estate=yestered │ http://video.yandex.php │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&price │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=NeIdeaCenternet Explorer&aV=5.0 │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertificirovka.ru/noteating-i... │ 20 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 20 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313163307/?from]=&int[15... │ http://che.ru/produkty_zarubezhei-niepochekhly │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate=0&ReturnUr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271161076&st=261&t=170977... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604370757034dea482207549... │ 20 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_api.php?id=7262882,9454472&op_product_n... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert27419&z=9&l=map&id=2211-9... │ 20 │ +│ 1 │ 0 │ 0 │ http://video.yandex.ru/cars │ http://komme%2F27.0.1453.116 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26637&model=1705.html?1=1... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-karbox=0&top=0&category/1961/#images/00... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumilora481 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-iulyanovskaya-obl/lyubvi?page=166733&eid=485... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27502/detail/?folders/#pa... │ 20 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credircnt=13733129/room │ http://komme%2F27.0.1453.116 │ 20 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://video.yandex.php │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626u1zIq0SGLXCI&where=al... │ 20 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=240&u_cd=242035165&input_who2=1... │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien%26ar_slice-russic.ru... │ 19 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state/apartments/parts.ru/GameMain.aspx?sort=popup/casualg... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/news_id_72387877055/nu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikulina.ru/real-estate/ou... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=HOtbySdOiUw │ 19 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/filmId=eRaB4pYAXCI │ http://komme%2F27.0.1453.116 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login=perfect.yandex.ru%2Fkategoriya%2F537 │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.ru/daily │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text=\xD0\xBB\xD0\xB8\xD0\xBA\xD0\xBE\xD0\xBB\xD0\... │ http://irr.ru/index.php │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260540718534/?dateOn=1&bo... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261921&pr=2441185112.html... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26672655462.html?city.ru/... │ 19 │ +│ 1 │ 0 │ 0 │ http://sp-mamrostok.ru/cars │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27252/women.aspx?group_co... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2671&Destige-all.html_par... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/check=1&redir=1&lang=a... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27404895,95923.html%26cus... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006&po_yers=20078816 │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 19 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2638/?from=&raceTo=&power... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313437&pvno=2&evlg=VC,2;... │ http://irr.ru/index.php?showalbum/login-rizova.ru/look/timashirtsevm.cofe │ 19 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-estation/vacancing │ http://sslow_13507.html?aspx?naId=6HS │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=487930 │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27355f3132366336601&uuid=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.php?f=11340.1j1j2.12...5998-103358071/8/page... │ http://irr.ru/index.php?showalbum/login/?ReturnUrl=%23images/00007/10/1320006&p... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166333/price[price_till]=&pri... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2F_liveresum... │ 19 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=&auto_repai... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://smeshariki.ru/obucheyelants │ 19 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.15751 Safari%2F5.0 (Windows │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2675406828ac956028692581/... │ 19 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://obninsk/detail │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26968794618/irr.ru/real-e... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2629&lr=65&rstr=-213&text=back=False&withmos... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27423026517034&pvno=2&evl... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2702483,631;IC,444041%2F&... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=9.80 (W... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26669E116-1-1550046560013... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=http://video.yandex.ru/real-estate │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?search?text=\xD1\x80\xD1\x83\xD1\x81\xD0\xB... │ http://irr.ru/index.php?showalbum/login-inadlinny-sched_car=0&city=0&price=18&p... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274026181891&rn=52&brand=... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/referery_besplay/4972&bL=ru-ru&xdm_... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/dlia-zhiensk... │ 19 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login.html?1=1&cid=577&oki=1&op_product │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list=0&checked=0&state/room=10002-g-v-program... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-165&jenre]/49047&lr=163&text=samsung ga-moda... │ http://irr.ru/index.php?showalbum/login-2-komn-v-na-92f5-6ccf-fef3-013f9f926a21... │ 18 │ +│ 5 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://afisha.yandex.ru/index │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5 │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login/?elmt=popular&where=all&film/723/num │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/man/restate/out-of-town-resh=1&cnt=1373... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2012-recept-Ragu-iz-2-x │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupaljinik-slidi/places/?PAGEN_1=2 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main/erle.com.ua/yandex.php?app=my&name │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 18 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://wildberries.aspx#location/group_cod_1s=53&butto_638_1360/3/women.aspx?na... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=deltec&type=citymo=&version%2F4.0 (Linu... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27534.30 (KHTML, like Gec... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-kochtinsk.pulscendinskiy-krasnodar.irr.ru │ http://irr.ru/index.php?showalbum/login-kuplyuskij/zapchastorii_state/out │ 18 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login.moikrug.ru/catalog/otchenko-ul-advert27... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-zzzi.ru/a-shop and blademas/?id=1&marka=0&ma... │ http://irr.ru/index.php?showalbum/login-2003prev=/search/index.ru/meteor.html%3... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F&ti=\xD0\x91\xD1\x80\xD1\x8E\xD0\xBA\xD0\... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=367132&pv=2... │ 18 │ +│ 1 │ 0 │ 0 │ http://radiorecord.ru/real-estatic.diary │ http://irr.ru/index.php │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert278453&with_exchange=0&ex... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27132069304;IC,1511e8d158... │ 18 │ +│ -1 │ 0 │ 0 │ http://go.mail.ru/yandsearch?lr │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27071038_114736895,923401... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estat_type-5/exte... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x9A\... │ 18 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=978152&ch=U... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-natura.ru/jobs-education=post_137336ID0... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/8018&l=malkogo... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=kanza_tab_2499472&lr=1074&sort=popular │ http://irr.ru/index.php?showalbum/login-kupaljinik-Internet Explorer&aV=5.0 (Wi... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/search/?target=search?... │ http://irr.ru/index.php?showalbum/login-bigutensiysk.irr.ru/regular&bid=3205&bt... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27420780790931.html5/v12/... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya/obuv%2F │ 18 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-21102&text=\xD0\xB1\xD0\xB0\xD0\xB1\xD0\xBA\... │ http://irr.ru/index.php?showalbum/login.mospsy.ru/super-na-kostronics/tv-audio.... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2685&numphoto=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626p/ │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertimeshariki.ru/cgi-bin/cli... │ 18 │ +│ 1 │ 0 │ 0 │ https://diary.ru/magnitogorsk │ http://komme%2F27.0.1453.116 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sien-zhienskaya-i-kvartir.html?id=1955451-01... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260908861%26point-peter=&... │ 18 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1453.116 Safari%2F8536 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=yators/?jumping.ru/series.ru/priceup&page=3&... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C \... │ http://irr.ru/introlux_page5/2/pageTypeSearch?text=\xD0\xB2\xD0\xBA\xD1\x83\xD1... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisinger/\xD0\x93\xD0\x90\... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olga1788778.137329TVmbFNmbVNaR0YwW$UyNDg4fxS... │ http://irr.ru/index.php?showalbum/login-sienskaia-moda-zhienskikh_rabotjaga.ru/... │ 18 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_car=36427929&stat... │ 18 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26929750%26ar_sliceid%3D2... │ 18 │ +│ 4 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691c352005&pvno=2&evlg=V... │ 17 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru%2Ffilm/4858?pa... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert271527091/frl-2/bage-2.ht... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27422544/3/womens.ru/ufa.... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/cars/communalux.ru/dos... │ http://irr.ru/index.php?showalbum/loshaya-obl.irr.ru/film/35562C?analytics/kto-... │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#7878... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser%2F12.103402.html%3Fhtml │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=artira-Lyubyat │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x92\xD0\x90\xD0\x97 │ http://irr.ru/index.php?showalbum/login.aspx#location │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://myloveplanet.ru/index.ru/registrict=3219&st=10# │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=yes&y1=2013-07-07.ya.ru/5_search?text=\... │ 17 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://aliningrad │ 17 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1453.116 Safari%2F5.15.html?1=1 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266149_51928/detail.ru/ka... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-adverts%26rleurl%3D%26CompPath%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2670308&po_yers=0&price_o... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2613168312.71 Safari%2F__... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?Returniture=8&ch=UTF-8&ifr=1&av=1&nm=1&ved=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login_Bolers-device.aspx#commersanta_premiery... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 17 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http://sslow_13507.html?aspx?naId=6HS │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginyazevskaya%2F5.0 (Windows NT 5.1) Prestorygoo... │ http://irr.ru/index.php?showalbum/login-kupilomatic.aspx#location=rr&days&city&... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-dlia-zhiensmed.ru/el... │ 17 │ +│ 1 │ 0 │ 0 │ http://bdsmpeople.ru/register2123 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/logistereda.ru/photo/70861/6#f │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert263161366&bid=2823&numpho... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=ForeightEnd │ http://irr.ru/index.php │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowthreadreplies=24&ids=74&cu... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27595,9305f3931339322%26n... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26041.htm%3Fsid%3D0%26pz%... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313&ussp=mstp&usln=1&inp... │ http://irr.ru/index.php?showalbum/login-3767436/roomootofile/obzor.com/iframe │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273363331251798796&op_seo... │ 17 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/stan/index.kz/yandex │ http://komme%2F27.0.1453.116 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertistia.html?partment/searc... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-search%3Futm_source=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2046097563356531663031323532363&win=70&mode=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 3 │ 22 │ 0 │ │ http://komme%2F27.0.1453.116 │ 17 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://diary.ru/forum/intries │ 17 │ +│ 1 │ 0 │ 0 │ http://bibieters_sig=5ea8QizwGSPy0yGcm14ATH74D4Bw&usg=AFQjCNHxMZlonova.ru/p1847... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_len40/page3/#57366/?date_i... │ 17 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=&op_style... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-lenfiki-zhienskaia-moda-muzhchin-sitafa ishq... │ http://irr.ru/index.php?showalbum/logical.ru/link=11485-9065383235348%2F&sr=htt... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienskaia-moda-futbolki-k... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert261636/detail/odnoklassim... │ 17 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/messar.ru/professig │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 17 │ +│ 1 │ 0 │ 0 │ http://acase.php?input_who1=2&input_who2=1 │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 17 │ +│ 3 │ 3 │ 0 │ │ http://komme%2F2.10 │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2694&option%2F12.14&he=76... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26618531&t=111246.html?p=... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_uid=13733145625/details... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-irina19910735%2F27.0.1453.116 Safari │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert268814453957595,94406/det... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=Like Gecko) Chrome%2Fpotnik=1&price_do=&curr... │ http://irr.ru/index.php?showalbum/login-the-poxudet_sponsor=&o=6000708498/?caut... │ 17 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/login-53584715,1327288/belgium/arch=1&themec.... │ 17 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login=bestwo.diary/details&id=9160/0/posti.ri... │ 17 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2626b76faact/less=1&ru=1&... │ 17 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/category=cinem rasmusic │ http://komme%2F27.0.1453.116 │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-herokee_tatus=1&rm=18606bAxFEcQT6smBB4W... │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-zhien... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-olgas.rQRAX2Ua3IF1iHJcaz4ATv34DABw │ http://irr.ru/index.php?showalbum/login/?page=1024&wi=144438-88-3906740/currenc... │ 16 │ +│ 1 │ 0 │ 0 │ http://autodoc.ru/a-search/?target=search?clid=19554786.0.8.0.2.2003558_3497926... │ http://irr.ru/index.php?showalbum/logie-niz-doktops/electronics/4185570c72 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26098707209463401090/deta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert267044005320AA76)&vendor_... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27034195,9520160173/5/wom... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19&text=\xD1\x81\xD0\xBB\xD1\x83\xD1\x88\xD0\xB0\xD1\x82\xD1\x8C&s... │ http://irr.ru/introlux_page5/2/pageTypeId=0&expand_search/cuZXdzJTJGJmxyPTI4fQ,... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsien-zhienskaia-moda-plan... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26396284046.xhtml%3Fhtml%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2660&pt=b&pd=7&pw=2&page5... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/real-estate/out-of-tow... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert260612d7cf.4082813,74,756... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=&esrc... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ 1 │ 0 │ 0 │ http://kipirog-s-krug │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/movinki... │ 16 │ +│ 5 │ 0 │ 0 │ http://state=199450984062 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-kupalnaja-prost-petersburg/detail/?fold... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.rambler.ru/page=91552&q=\... │ http://irr.ru/index.php │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.pl?&clients-sale&siteurl%3D//ads/search?text... │ http://irr.ru/index.php?showalbum/login-kapusta-advert273786/foto-5/#photo=2817... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-krasok.html_params%3Drhost%3Dad.adriver │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9C\xD0\x90\xD0\x97/page4/?_r... │ http://irr.ru/index.php?showalbum/login.aspx?sle=13&s_yers=0&page_type=0&door=0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertsiensmed.ru/dl/\xD0\xB7\x... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti/redmonds %2F offset=403134333.2201560&c... │ http://irr.ru/index.php?showalbum/login-v40-velopiter.feriod=0&scroll_to_auto.r... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661232&streamfood.com/if... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login-kupalnyj-bandom.ua/a-foldersSubCliensme... │ 16 │ +│ 1 │ 0 │ 0 │ http://google.ru/forum │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo/70948/35.htm?id=... │ http://irr.ru/index.php?showalbum/logiy-luchaiev%2F&sr=http:%2F%2Fwww.bonprix c... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-57548811426&text=\xD0\xBB\xD1\x83\xD1\x87\xD... │ http://irr.ru/index.php?showalbum/login-coolonellana-Molodilnik.ru/index.php?vi... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-204609756335653166303133334%2F&ei=horia+iudi... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert26765.html_params%3Drhost... │ 16 │ +│ 1 │ 0 │ 0 │ http://histore/profile;u= │ http://irr.ru/index.php?showalbum/login-kupe-20013&uuid=1373356164564_1sort/sta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2755597.html%3Fhtml?1=1&c... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login=findjob.ru/planet.ru/index.ru/carinov.h... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/showtopic,803813.html&... │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_catalog/1250/?itemsg/cd... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/manga │ http://irr.ru/index.php?showalbum/login │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert260477/cities/visas/exp?s... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirosomahachkakh-2/?type=0&choos&lr... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0 │ 16 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/real-esta.ru/election │ http://video.yandex.php │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27429&input_bdsm_position... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2728024/detail/508/?instv... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26887301/Zona/simferopol.... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-153-4b9c4.4331626.htm?size%3D0%26rleurl │ 16 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credirect │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http://komme%2F27.0.1364.172 YaBrowser%2F10B350 Safari%2F537 │ 16 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://msuzie-shop/premiery-c-38208_2.html │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/posts&q=\xD0\xB2\xD0\xB5\xD0\xB4\xD1\x83\xD1... │ http://irr.ru/index.php?showalbum/login-mistore/#CATALOG_LIST-s-ovosibirsk/deta... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-marka=23&model&desting?field_town/search/pri... │ http://irr.ru/index.php?showalbum/login-492ea9&show/417582,9626512874":10157628... │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_country=-1 │ 16 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_name=\xD0\x91\... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/sch/price][min]=41&lr=... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27364229586121%26url%3D%2... │ 16 │ +│ 1 │ 0 │ 0 │ http://volgografiyah_27_iyunya_50_let%2FgetId │ http://komme%2F27.0.1453.116 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-sovies/tv-audi/a7-spec=9894797179698712/p1/8... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27333%26bid%3D1%26rleurl%... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new=127201148][fr... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-maritkiN │ http://irr.ru/index.php?showalbum/login-ladimir.irr.ru/remiery-telefon.ru │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2661251-6efa-d61f-fef3-01... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert269899458/price/3815&pvno... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/7427510/detail/5... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login-7205011,1,7,700&aN=Netscape&aV=5.0 (Win... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-wkti%2F%3Ff%3D100%&http://afisha.yandsearch&... │ http://irr.ru/index.php?showalbum/login-6030d.html_params%3Drhost%3D90%26height │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertification=view/5/item3963... │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logiste's a di galaxy-s4-story1.aspx#location... │ 16 │ +│ 1 │ 0 │ 0 │ http://yandsearch?lr=2&color │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2753][from]=&pricedownloa... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-gorod/search?p=7&oprnd=9902.jpg&img_url=http... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27222.vk.me/u3166 │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2735030373434-152495.php?... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_cated_new10152954vac │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2691.html?1=1&input_age2/... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-irinakai/page_num_read2306e4574&ei=Ot_rUfjPG... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/page5/#over/190008/0... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makeevka.ru/perm.irr.ru/slingvo/#1\xD0\... │ http://irr.ru/index.php?showalbum/login-kapustic/product_name │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26708662307][]=&selection... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-20460975633565316630313033393633310,932803][... │ http://irr.ru/index.php?showalbum/login-kapusta-advert27256.html_params │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2010000087378687/pic/8939375f303839303935373... │ http://irr.ru/index.php?showalbum/login-souse=2/path=39_1.html?1=1&cid=577&oki=... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumy.ua/search?text=\xD1\x81\xD0\xB5\... │ http://irr.ru/index.php?showalbum/login-kapustya88/?sob │ 16 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.ru/widgetchrome%2F201001556&op_seo_entry │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/?strict=5710... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category=cinema/artira │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertists/736850/?item_no=737&... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertikal.ru/search/room=1&dam... │ 16 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2695/19545602cf94d77/repl... │ 16 │ +│ 1 │ 0 │ 0 │ http://forums/liiiervierk-suppohudeemvmesting/294465&op_categoriya │ http://komme%2F27.0.1453.116 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_product_id=0&model=1173... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login=new&cad=rjt&fu=0&input_country_id=228&lr=961... │ http://irr.ru/index.php?showalbum/login-cam.shtml#objdesc=true&uA=Mozilla │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-verb=1&prepairs=0&city[1 │ http://irr.ru/index.php?showalbum/lounona-muzhchin-kupaljinik-chernyj-odnoe/san... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makum │ http://irr.ru/index.php?showalbum/login/?do=ready-mansion%3D0%26url%3D%26bn%3D0... │ 15 │ +│ 1 │ 0 │ 0 │ http://launcher-searchads/search │ http://komme%2F27.0.1453.116 Safari%2F5.0 (compatible; MSIE 9.0; │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_produkty/kiev.org/forum... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/a-album/login.2/second... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2781308;IC,238208836746/0... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-4433140796851/detail/536180&all=False&i... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginsk.eu/ru/Pagesize=13&m1=07 │ http://irr.ru/index.php?showalbum/login-3muda/truction/vacancies/750207190765.h... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26981583/page=1089592445/... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945HPS?analog/r10418/sort=price_do=200&site_off=1 │ http://irr.ru/index.ru/\xD0\x9D\xD0\xBE\xD0\xB2\xD0\xB3\xD0\xBE\xD1\x80\xD0\xBE... │ 15 │ +│ 1 │ 0 │ 0 │ http://wildberrifiers?year_detailshop/id_art_type=7&s_yers │ http://irr.ru/index.php?showalbum/login │ 15 │ +│ 3 │ 2 │ 0 │ │ http://komme%2F1.7.1364.172 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-goluboj-podserial&dfs=13 │ http://irr.ru/index.php?showalbum/login-haus.html#news/228670,257&pci=3012/frl │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273389; U; Android 4.0.14... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert273631253711/foto-6320166... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2724/?_h=search?text=\xD0... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category&op_page4/#67 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-ona.ru/name=yandex.ru/busineshematov/offers=... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price_... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26605566254/room=1.6&wher... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert266356163f39ea6f8/7a8745&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/washes/built-in_two_ch... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http:%2F%2Fwebbootate/aparts/state=1909644 │ http://afisha.yandex.ua/auto_id=0&with_photo.kurortmag.ru/razdnitsya-vishnury │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginskikh-viana.irr.ru/GameMain.aspx?sle=1/house.... │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/?act=full&Form.aspx?g... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/main.aspx?Topic │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/rative │ http://irr.ru/index.ru/show/414526863_112 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/list.html?typ=SMA&anbieter=aleks_evilkos.com │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertisements/produkty%2Fplatj... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-land_search?text=\xD0\xB0\xD0\xBC\xD0\xB1\xD... │ http://irr.ru/6323%26bn%3D27888895,963095425 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/index.ru/ange=0&s_yers=(3000&static.diary.ru... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/GameMain.aspx?transk.i... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.php?page37/?sta... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2678&op_page=60000/curren... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F27.0.1364.172 YaBrowser │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login.1Uv1UfqCA8SonYC4BQ&usg=AFQjCNGB3pBUuKY1jJPP3... │ http://irr.ru/index.php?showalbum/login-tank-sale/search%3Fmode=&page_type │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/yandex.php?Id=9582 │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-liloveplanet.ru/futurer533/women.aspx?group-... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2631920&lo=http://person_... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advert2718599/photo=0&is_hot=0&... │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/url?sa=t&rct=j&q=alini... │ http://radio&planet.ru/moscow.ru/\xD0\xB8\xD0\xBB\xD0\xBB\xD1\x8E\xD0\xB7\xD0\x... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-tumbov.irr.ru/page1=&input_who1=2&id=29... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert26761,55.654289600/detail... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.php?city[1]=700003 │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2699364224073532663835386... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27515/418695&st=327-B110Q │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login=vladimir/page_type=0&expand_search?text... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login/?dok=001&rightbox/week&From=0&user │ http://irr.ru/index.php?showalbum/login-kapusta-advert2604/frl-4/trailer/view/3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=450&with_photo=7... │ http://irr.ru/index.php?showalbum/login-lential/secondary/details9.html_params%... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x95\x... │ http://irr.ru/index.php?showalbum/login-676216b8af/4fd00fa61b3185631821/page_ty... │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=0&page9/#14... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2730675595,9292fa-d61f-fe... │ 15 │ +│ -1 │ 0 │ 0 │ http://kinopoisk.ru/?state │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=25127691%2F... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27265484158197%26width%3D... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login_appliazh-pliance/mista-bez-uchaiev/000202&cl... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2668]=0&order_by=0&price │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/ch/floore troubleclick... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/yandex.ru/gamemain.asp... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/kategory_id=1955451&lr... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 0 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-kapusta-advertsienshchin-planet.ru/myma... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert27877437494,943082&stat_t... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiruiushching │ http://irr.ru/index.php?showalbum/login-kapusta-advert2704&prr=http:/ │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Ford-antent... │ 15 │ +│ 3 │ 123 │ 0 │ │ http://komme%2F27.0.1453.116 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_categoriya%2Fdlia-doma.... │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/url?sa │ http://sslow_13507.html?aspx?naId=6r7RoWvxU9qQ= │ 15 │ +│ 4 │ 0 │ 0 │ │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-nashinger/users/search?textilead&353%26ev_pl... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-102-821922237&arrFilter2013/08-iH4AT5zIGQDA │ http://irr.ru/index.php?showalbum/login-kupe-2/#page_type=&freetao.diary.ru/sea... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/loginy_name/3196906481/currency=6465373200&price=\... │ http://irr.ru/index.php?showalbum/login-kapusta-advert2776/?date=0&doorov.irr.r... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2693_763613.html_params%3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert262997385f32313335781094&... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert274298799461981/?date=129... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert276278-ploschaya_checked_... │ 15 │ +│ 1 │ 0 │ 0 │ http://mysw.info/node/215455&text │ http://irr.ru/index.php?showalbum/logabass.ru/cation&op_category_id=9584%26pz%3... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/catalog/877/ru/buildin... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ 5 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/make=\xD0\x9A\xD0\x90\xD0\x9C\xD0\x90\x... │ http://ekburg.irr.ru%2Fpuloveplanet │ 15 │ +│ 1 │ 0 │ 0 │ http://smeshariki.ru/diary.ru/yandex.ru/credir=1 │ http://komme%2F27.0.1453.116 │ 15 │ +│ 5 │ 0 │ 0 │ http://kinopoisk.ru/yandex.ru/auto/69363 │ http:%2F%2Fwwwwww.bonprix.ru/myAccountry │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/photo=on&input_onliner... │ http://irr.ru/index.php?showalbum/login.html%26custom%3D%26CompPath.2; WOW64; r... │ 15 │ +│ 0 │ 0 │ 0 │ │ http://komme%2F2.10 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advertist/gosthelp.ru/auto.ria.... │ 15 │ +│ 1 │ 0 │ 0 │ http://yandex.ru/search?q=\xD0\xBB\xD0\xB0\xD0\xB2\xD0\xBF\xD0\xBB\xD0\xB0\xD0\... │ http://irr.ru/index.php?showalbum/login-kupaljinik-2008-g-v-stroika/photo=on&in... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumirostova.ru/doc.ru/belgorod.irr.ru... │ http://irr.ru/index.php?showalbum/login-leniya7777294,938303130 │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert269257798044.html_partmen... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2006/makumiroshoowbiz/down%2Fholodilnik.ru/7... │ http://irr.ru/index.php?showalbum/litlip/saint-peter557932E-8C62-4917%26ad%3D64... │ 15 │ +│ -1 │ 0 │ 0 │ http://state=19945206/foto-4/login-2491724/?bundlers/search?text │ http://irr.ru/index.php?showalbum/login-kapusta-advert2651734&pt=b&pd=7&pw=1&pr... │ 15 │ +└────────────────┴────────────────┴─────────────┴────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────────┘ +Run Time: real 0.137 user 1.400000 sys 0.004000 +D 07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +Run Time: real 0.016 user 0.220000 sys 0.000000 +D D (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +Run Time: real 0.022 user 0.312000 sys 0.000000 +D " = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) ORDER BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))); +Run Time: real 0.015 user 0.196000 sys 0.000000 diff --git a/benchmark/duckdb/queries.sql b/benchmark/duckdb/queries.sql new file mode 100644 index 00000000000..6089b47ea7c --- /dev/null +++ b/benchmark/duckdb/queries.sql @@ -0,0 +1,43 @@ +SELECT count(*) FROM hits; +SELECT count(*) FROM hits WHERE AdvEngineID != 0; +SELECT sum(AdvEngineID), count(*), avg(ResolutionWidth) FROM hits; +SELECT sum(UserID) FROM hits; +SELECT COUNT(DISTINCT UserID) FROM hits; +SELECT COUNT(DISTINCT SearchPhrase) FROM hits; +SELECT min(EventDate), max(EventDate) FROM hits; +SELECT AdvEngineID, count(*) FROM hits WHERE AdvEngineID != 0 GROUP BY AdvEngineID ORDER BY count(*) DESC; +SELECT RegionID, COUNT(DISTINCT UserID) AS u FROM hits GROUP BY RegionID ORDER BY u DESC LIMIT 10; +SELECT RegionID, sum(AdvEngineID), count(*) AS c, avg(ResolutionWidth), COUNT(DISTINCT UserID) FROM hits GROUP BY RegionID ORDER BY c DESC LIMIT 10; +SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(MobilePhoneModel) > 0 GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10; +SELECT MobilePhone, MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(MobilePhoneModel) > 0 GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10; +SELECT SearchPhrase, count(*) AS c FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10; +SELECT SearchEngineID, SearchPhrase, count(*) AS c FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT UserID, count(*) FROM hits GROUP BY UserID ORDER BY count(*) DESC LIMIT 10; +SELECT UserID, SearchPhrase, count(*) FROM hits GROUP BY UserID, SearchPhrase ORDER BY count(*) DESC LIMIT 10; +SELECT UserID, SearchPhrase, count(*) FROM hits GROUP BY UserID, SearchPhrase LIMIT 10; +SELECT UserID, extract(minute FROM (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) AS m, SearchPhrase, count(*) FROM hits GROUP BY UserID, m, SearchPhrase ORDER BY count(*) DESC LIMIT 10; +SELECT UserID FROM hits WHERE UserID = 12345678901234567890; +SELECT count(*) FROM hits WHERE URL::TEXT LIKE '%metrika%'; +SELECT SearchPhrase, min(URL), count(*) AS c FROM hits WHERE URL::TEXT LIKE '%metrika%' AND octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT SearchPhrase, min(URL), min(Title), count(*) AS c, COUNT(DISTINCT UserID) FROM hits WHERE Title::TEXT LIKE '%Яндекс%' AND URL::TEXT NOT LIKE '%.yandex.%' AND octet_length(SearchPhrase) > 0 GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT * FROM hits WHERE URL::TEXT LIKE '%metrika%' ORDER BY EventTime LIMIT 10; +SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY EventTime LIMIT 10; +SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY SearchPhrase LIMIT 10; +SELECT SearchPhrase FROM hits WHERE octet_length(SearchPhrase) > 0 ORDER BY EventTime, SearchPhrase LIMIT 10; +SELECT CounterID, avg(octet_length(URL)) AS l, count(*) AS c FROM hits WHERE octet_length(URL) > 0 GROUP BY CounterID HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25; +SELECT regexp_replace(Referer::TEXT, '^https?://(?:www\.)?([^/]+)/.*$', '\1') AS key, avg(octet_length(Referer)) AS l, count(*) AS c, min(Referer) FROM hits WHERE octet_length(Referer) > 0 GROUP BY key HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25; +SELECT sum(ResolutionWidth), sum(ResolutionWidth + 1), sum(ResolutionWidth + 2), sum(ResolutionWidth + 3), sum(ResolutionWidth + 4), sum(ResolutionWidth + 5), sum(ResolutionWidth + 6), sum(ResolutionWidth + 7), sum(ResolutionWidth + 8), sum(ResolutionWidth + 9), sum(ResolutionWidth + 10), sum(ResolutionWidth + 11), sum(ResolutionWidth + 12), sum(ResolutionWidth + 13), sum(ResolutionWidth + 14), sum(ResolutionWidth + 15), sum(ResolutionWidth + 16), sum(ResolutionWidth + 17), sum(ResolutionWidth + 18), sum(ResolutionWidth + 19), sum(ResolutionWidth + 20), sum(ResolutionWidth + 21), sum(ResolutionWidth + 22), sum(ResolutionWidth + 23), sum(ResolutionWidth + 24), sum(ResolutionWidth + 25), sum(ResolutionWidth + 26), sum(ResolutionWidth + 27), sum(ResolutionWidth + 28), sum(ResolutionWidth + 29), sum(ResolutionWidth + 30), sum(ResolutionWidth + 31), sum(ResolutionWidth + 32), sum(ResolutionWidth + 33), sum(ResolutionWidth + 34), sum(ResolutionWidth + 35), sum(ResolutionWidth + 36), sum(ResolutionWidth + 37), sum(ResolutionWidth + 38), sum(ResolutionWidth + 39), sum(ResolutionWidth + 40), sum(ResolutionWidth + 41), sum(ResolutionWidth + 42), sum(ResolutionWidth + 43), sum(ResolutionWidth + 44), sum(ResolutionWidth + 45), sum(ResolutionWidth + 46), sum(ResolutionWidth + 47), sum(ResolutionWidth + 48), sum(ResolutionWidth + 49), sum(ResolutionWidth + 50), sum(ResolutionWidth + 51), sum(ResolutionWidth + 52), sum(ResolutionWidth + 53), sum(ResolutionWidth + 54), sum(ResolutionWidth + 55), sum(ResolutionWidth + 56), sum(ResolutionWidth + 57), sum(ResolutionWidth + 58), sum(ResolutionWidth + 59), sum(ResolutionWidth + 60), sum(ResolutionWidth + 61), sum(ResolutionWidth + 62), sum(ResolutionWidth + 63), sum(ResolutionWidth + 64), sum(ResolutionWidth + 65), sum(ResolutionWidth + 66), sum(ResolutionWidth + 67), sum(ResolutionWidth + 68), sum(ResolutionWidth + 69), sum(ResolutionWidth + 70), sum(ResolutionWidth + 71), sum(ResolutionWidth + 72), sum(ResolutionWidth + 73), sum(ResolutionWidth + 74), sum(ResolutionWidth + 75), sum(ResolutionWidth + 76), sum(ResolutionWidth + 77), sum(ResolutionWidth + 78), sum(ResolutionWidth + 79), sum(ResolutionWidth + 80), sum(ResolutionWidth + 81), sum(ResolutionWidth + 82), sum(ResolutionWidth + 83), sum(ResolutionWidth + 84), sum(ResolutionWidth + 85), sum(ResolutionWidth + 86), sum(ResolutionWidth + 87), sum(ResolutionWidth + 88), sum(ResolutionWidth + 89) FROM hits; +SELECT SearchEngineID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10; +SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits WHERE octet_length(SearchPhrase) > 0 GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +SELECT URL, count(*) AS c FROM hits GROUP BY URL ORDER BY c DESC LIMIT 10; +SELECT 1, URL, count(*) AS c FROM hits GROUP BY 1, URL ORDER BY c DESC LIMIT 10; +SELECT ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3, count(*) AS c FROM hits GROUP BY ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3 ORDER BY c DESC LIMIT 10; +SELECT URL, count(*) AS PageViews FROM hits WHERE CounterID = 62 AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(URL) > 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +SELECT Title, count(*) AS PageViews FROM hits WHERE CounterID = 62 AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND octet_length(Title) > 0 GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +SELECT URL, count(*) AS PageViews FROM hits WHERE CounterID = 62 AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +SELECT TraficSourceID, SearchEngineID, AdvEngineID, CASE WHEN (SearchEngineID = 0 AND AdvEngineID = 0) THEN Referer ELSE '' END AS Src, URL AS Dst, count(*) AS PageViews FROM hits WHERE CounterID = 62 AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +SELECT URLHash, EventDate, count(*) AS PageViews FROM hits WHERE CounterID = 62 AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +SELECT WindowClientWidth, WindowClientHeight, count(*) AS PageViews FROM hits WHERE CounterID = 62 AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +SELECT DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) AS "Minute", count(*) AS PageViews FROM hits WHERE CounterID = 62 AND (DATE '1970-01-01' + EventDate) >= '2013-07-01' AND (DATE '1970-01-01' + EventDate) <= '2013-07-02' AND "refresh" = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))) ORDER BY DATE_TRUNC('minute', (TIMESTAMP '1970-01-01 00:00:00' + to_seconds(EventTime))); diff --git a/benchmark/duckdb/usability.md b/benchmark/duckdb/usability.md new file mode 100644 index 00000000000..a032f68986a --- /dev/null +++ b/benchmark/duckdb/usability.md @@ -0,0 +1,762 @@ +Export data from ClickHouse: + +``` +SELECT * FROM hits_100m_obfuscated INTO OUTFILE 'hits.parquet' FORMAT Parquet + +$ wc -c hits.parquet +17193559098 hits.parquet +``` + +Install DuckDB: + +``` +wget https://github.com/duckdb/duckdb/releases/download/v0.3.0/duckdb_cli-linux-amd64.zip +unzip duckdb_cli-linux-amd64.zip +``` + +Try DuckDB: + +``` +milovidov@mtlog-perftest03j:~$ ./duckdb +v0.3.0 46a0fc50a +Enter ".help" for usage hints. +Connected to a transient in-memory database. +Use ".open FILENAME" to reopen on a persistent database. +D ? +> +> ; +Error: Parser Error: syntax error at or near "?" +LINE 1: ? + ^ +D help; +Error: Parser Error: syntax error at or near "help" +LINE 1: help; + ^ +D h; +Error: Parser Error: syntax error at or near "h" +LINE 1: h; + ^ +D .? +Error: unknown command or invalid arguments: "?". Enter ".help" for help +D .help +.auth ON|OFF Show authorizer callbacks +.backup ?DB? FILE Backup DB (default "main") to FILE +.bail on|off Stop after hitting an error. Default OFF +.binary on|off Turn binary output on or off. Default OFF +.cd DIRECTORY Change the working directory to DIRECTORY +.changes on|off Show number of rows changed by SQL +.check GLOB Fail if output since .testcase does not match +.clone NEWDB Clone data into NEWDB from the existing database +.databases List names and files of attached databases +.dbconfig ?op? ?val? List or change sqlite3_db_config() options +.dbinfo ?DB? Show status information about the database +.dump ?TABLE? Render database content as SQL +.echo on|off Turn command echo on or off +.eqp on|off|full|... Enable or disable automatic EXPLAIN QUERY PLAN +.excel Display the output of next command in spreadsheet +.exit ?CODE? Exit this program with return-code CODE +.expert EXPERIMENTAL. Suggest indexes for queries +.explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto +.filectrl CMD ... Run various sqlite3_file_control() operations +.fullschema ?--indent? Show schema and the content of sqlite_stat tables +.headers on|off Turn display of headers on or off +.help ?-all? ?PATTERN? Show help text for PATTERN +.import FILE TABLE Import data from FILE into TABLE +.imposter INDEX TABLE Create imposter table TABLE on index INDEX +.indexes ?TABLE? Show names of indexes +.limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT +.lint OPTIONS Report potential schema issues. +.log FILE|off Turn logging on or off. FILE can be stderr/stdout +.mode MODE ?TABLE? Set output mode +.nullvalue STRING Use STRING in place of NULL values +.once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE +.open ?OPTIONS? ?FILE? Close existing database and reopen FILE +.output ?FILE? Send output to FILE or stdout if FILE is omitted +.parameter CMD ... Manage SQL parameter bindings +.print STRING... Print literal STRING +.progress N Invoke progress handler after every N opcodes +.prompt MAIN CONTINUE Replace the standard prompts +.quit Exit this program +.read FILE Read input from FILE +.restore ?DB? FILE Restore content of DB (default "main") from FILE +.save FILE Write in-memory database into FILE +.scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off +.schema ?PATTERN? Show the CREATE statements matching PATTERN +.selftest ?OPTIONS? Run tests defined in the SELFTEST table +.separator COL ?ROW? Change the column and row separators +.sha3sum ... Compute a SHA3 hash of database content +.shell CMD ARGS... Run CMD ARGS... in a system shell +.show Show the current values for various settings +.stats ?on|off? Show stats or turn stats on or off +.system CMD ARGS... Run CMD ARGS... in a system shell +.tables ?TABLE? List names of tables matching LIKE pattern TABLE +.testcase NAME Begin redirecting output to 'testcase-out.txt' +.testctrl CMD ... Run various sqlite3_test_control() operations +.timeout MS Try opening locked tables for MS milliseconds +.timer on|off Turn SQL timer on or off +.trace ?OPTIONS? Output each SQL statement as it is run +.vfsinfo ?AUX? Information about the top-level VFS +.vfslist List all available VFSes +.vfsname ?AUX? Print the name of the VFS stack +.width NUM1 NUM2 ... Set minimum column widths for columnar output +D q +> .q +> ; +Error: Parser Error: syntax error at or near "q" +LINE 1: q + ^ +D .q +``` + +Let's load the data: + +``` +D CREATE TABLE hits AS SELECT * FROM parquet_scan('hits.parquet') +> ; +``` + +It is using single CPU core and accumulating data in memory. + +``` +Killed +``` + +As expected. My server has "only" 128 GiB RAM. + +Let's free some memory and run again: + +``` +Error: Out of Memory Error: could not allocate block of 262144 bytes +Database is launched in in-memory mode and no temporary directory is specified. +Unused blocks cannot be offloaded to disk. + +Launch the database with a persistent storage back-end +Or set PRAGMA temp_directory='/path/to/tmp.tmp' +``` + +Now it works: + +``` +D PRAGMA temp_directory='duckdb.tmp' +> ; +D CREATE TABLE hits AS SELECT * FROM parquet_scan('hits.parquet'); +D SELECT count(*) FROM hits; +┌──────────────┐ +│ count_star() │ +├──────────────┤ +│ 100000000 │ +└──────────────┘ +D SELECT AdvEngineID, count(*) FROM hits WHERE AdvEngineID != 0 GROUP BY AdvEngineID ORDER BY count(*) DESC; +┌─────────────┬──────────────┐ +│ AdvEngineID │ count_star() │ +├─────────────┼──────────────┤ +│ 2 │ 404620 │ +│ 27 │ 113167 │ +│ 13 │ 45633 │ +│ 45 │ 38974 │ +│ 44 │ 9731 │ +│ 3 │ 6896 │ +│ 62 │ 5266 │ +│ 52 │ 3554 │ +│ 50 │ 938 │ +│ 28 │ 836 │ +│ 53 │ 350 │ +│ 25 │ 343 │ +│ 61 │ 158 │ +│ 21 │ 38 │ +│ 42 │ 20 │ +│ 16 │ 7 │ +│ 7 │ 3 │ +│ 22 │ 1 │ +└─────────────┴──────────────┘ +``` + +But saving the database does not work: + +``` +D .save 'duckdb.data' +sqlite3_backup_init: unsupported. +Error: +``` + +Let's simply paste queries into CLI. + +``` +D SELECT count(*) FROM hits WHERE AdvEngineID != 0; +┌──────────────┐ +│ count_star() │ +├──────────────┤ +│ 630535 │ +└──────────────┘ +Run Time: real 0.227 user 0.228000 sys 0.000000 +D SELECT sum(AdvEngineID), count(*), avg(ResolutionWidth) FROM hits; +┌──────────────────┬──────────────┬──────────────────────┐ +│ sum(advengineid) │ count_star() │ avg(resolutionwidth) │ +├──────────────────┼──────────────┼──────────────────────┤ +│ 7280824 │ 100000000 │ 1513.48908394 │ +└──────────────────┴──────────────┴──────────────────────┘ +Run Time: real 0.678 user 0.508000 sys 0.008000 +D SELECT sum(UserID) FROM hits; +┌────────────────────────┐ +│ sum(userid) │ +├────────────────────────┤ +│ 3.2306058693988996e+26 │ +└────────────────────────┘ +Run Time: real 0.697 user 0.448000 sys 0.020000 +D SELECT COUNT(DISTINCT UserID) FROM hits; +┌───────────────┐ +│ count(userid) │ +├───────────────┤ +│ 17630976 │ +└───────────────┘ +Run Time: real 7.928 user 7.164000 sys 0.660000 +D SELECT COUNT(DISTINCT SearchPhrase) FROM hits;u +┌─────────────────────┐ +│ count(searchphrase) │ +├─────────────────────┤ +│ 6019589 │ +└─────────────────────┘ +Run Time: real 12.403 user 10.820000 sys 0.208000 +D SELECT min(EventDate), max(EventDate) FROM hits; +R┌────────────────┬────────────────┐ +│ min(eventdate) │ max(eventdate) │ +├────────────────┼────────────────┤ +│ 15888 │ 15917 │ +└────────────────┴────────────────┘ +Run Time: real 0.604 user 0.376000 sys 0.008000 +D SELECT AdvEngineID, count(*) FROM hits WHERE AdvEngineID != 0 GROUP BY AdvEngineID ORDER BY count(*) DESC;( +┌─────────────┬──────────────┐ +│ AdvEngineID │ count_star() │ +├─────────────┼──────────────┤ +│ 2 │ 404620 │ +│ 27 │ 113167 │ +│ 13 │ 45633 │ +│ 45 │ 38974 │ +│ 44 │ 9731 │ +│ 3 │ 6896 │ +│ 62 │ 5266 │ +│ 52 │ 3554 │ +│ 50 │ 938 │ +│ 28 │ 836 │ +│ 53 │ 350 │ +│ 25 │ 343 │ +│ 61 │ 158 │ +│ 21 │ 38 │ +│ 42 │ 20 │ +│ 16 │ 7 │ +│ 7 │ 3 │ +│ 22 │ 1 │ +└─────────────┴──────────────┘ +Run Time: real 0.344 user 0.344000 sys 0.000000 +D SELECT RegionID, COUNT(DISTINCT UserID) AS u FROM hits GROUP BY RegionID ORDER BY u DESC LIMIT 10; +┌──────────┬─────────┐ +│ RegionID │ u │ +├──────────┼─────────┤ +│ 229 │ 2845673 │ +│ 2 │ 1081016 │ +│ 208 │ 831676 │ +│ 169 │ 604583 │ +│ 184 │ 322661 │ +│ 158 │ 307152 │ +│ 34 │ 299479 │ +│ 55 │ 286525 │ +│ 107 │ 272448 │ +│ 42 │ 243181 │ +└──────────┴─────────┘ +Run Time: real 8.872 user 7.592000 sys 0.108000 +D SELECT RegionID, sum(AdvEngineID), count(*) AS c, avg(ResolutionWidth), COUNT(DISTINCT UserID) FROM hits GROUP BY RegionID ORDER BY c DESC LIMIT 10;l +┌──────────┬──────────────────┬──────────┬──────────────────────┬───────────────┐ +│ RegionID │ sum(advengineid) │ c │ avg(resolutionwidth) │ count(userid) │ +├──────────┼──────────────────┼──────────┼──────────────────────┼───────────────┤ +│ 229 │ 2078084 │ 18296430 │ 1506.0876750819696 │ 2845673 │ +│ 2 │ 441711 │ 6687708 │ 1479.8410618406187 │ 1081016 │ +│ 208 │ 285925 │ 4261945 │ 1285.260504769536 │ 831676 │ +│ 169 │ 100887 │ 3320286 │ 1465.90517142198 │ 604583 │ +│ 32 │ 81498 │ 1843721 │ 1538.0370495318978 │ 216010 │ +│ 34 │ 161779 │ 1792406 │ 1548.364990409539 │ 299479 │ +│ 184 │ 55526 │ 1755223 │ 1506.8102679830426 │ 322661 │ +│ 42 │ 108820 │ 1542771 │ 1587.1074287758845 │ 243181 │ +│ 107 │ 120470 │ 1516722 │ 1548.6039623609336 │ 272448 │ +│ 51 │ 98212 │ 1435598 │ 1579.8864215469791 │ 211505 │ +└──────────┴──────────────────┴──────────┴──────────────────────┴───────────────┘ +Run Time: real 8.447 user 8.444000 sys 0.000000 +D SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE MobilePhoneModel != '' GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10; +t┌──────────────────┬─────────┐ +│ MobilePhoneModel │ u │ +├──────────────────┼─────────┤ +│ iPad │ 1090347 │ +│ iPhone │ 45758 │ +│ A500 │ 16046 │ +│ N8-00 │ 5565 │ +│ iPho │ 3300 │ +│ ONE TOUCH 6030A │ 2759 │ +│ GT-P7300B │ 1907 │ +│ 3110000 │ 1871 │ +│ GT-I9500 │ 1598 │ +│ eagle75 │ 1492 │ +└──────────────────┴─────────┘ +Run Time: real 5.077 user 4.416000 sys 0.032000 +D SELECT MobilePhone, MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE MobilePhoneModel != '' GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10;, +┌─────────────┬──────────────────┬────────┐ +│ MobilePhone │ MobilePhoneModel │ u │ +├─────────────┼──────────────────┼────────┤ +│ 1 │ iPad │ 931038 │ +│ 5 │ iPad │ 48385 │ +│ 6 │ iPad │ 29710 │ +│ 7 │ iPad │ 28391 │ +│ 118 │ A500 │ 16005 │ +│ 6 │ iPhone │ 14516 │ +│ 26 │ iPhone │ 13566 │ +│ 10 │ iPad │ 11433 │ +│ 32 │ iPad │ 9503 │ +│ 13 │ iPad │ 9417 │ +└─────────────┴──────────────────┴────────┘ +Run Time: real 5.193 user 4.916000 sys 0.012000 +D SELECT SearchPhrase, count(*) AS c FROM hits WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +l┌────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchPhrase │ c │ +├────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 70263 │ +│ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 34675 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 24579 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 21649 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 19703 │ +│ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 19195 │ +│ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 17284 │ +│ galaxy table │ 16746 │ +│ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 16620 │ +│ \xD1\x81\xD0\xBA\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xBA\xD0\xBE \xD0\xBC\xD1\x8B\xD1\x... │ 12317 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 8.085 user 8.040000 sys 0.044000 +D SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10;e +┌────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchPhrase │ u │ +├────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 23673 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 19743 │ +│ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 18394 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 17553 │ +│ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 14600 │ +│ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 14529 │ +│ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 14198 │ +│ \xD1\x81\xD0\xBA\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xBA\xD0\xBE \xD0\xBC\xD1\x8B\xD1\x... │ 9007 │ +│ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 8792 │ +│ \xD0\xBA\xD0\xBE\xD0\xBC\xD0\xB1\xD0\xB8\xD0\xBD\xD0\xB8\xD1\x80\xD0\xBE\xD0\xB... │ 7572 │ +└────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 14.516 user 12.960000 sys 1.196000 +D SELECT SearchEngineID, SearchPhrase, count(*) AS c FROM hits WHERE SearchPhrase != '' GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10; +r┌────────────────┬────────────────────────────────────────────────────────────────────────────────────┬───────┐ +│ SearchEngineID │ SearchPhrase │ c │ +├────────────────┼────────────────────────────────────────────────────────────────────────────────────┼───────┤ +│ 2 │ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 46258 │ +│ 2 │ \xD0\xBC\xD0\xB0\xD0\xBD\xD0\xB3\xD1\x83 \xD0\xB2 \xD0\xB7\xD0\xB0\xD1\x80\xD0\... │ 18871 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 16905 │ +│ 3 │ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 16748 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C \xD0\xBE\xD0\x... │ 14911 │ +│ 2 │ \xD0\xB0\xD0\xBB\xD0\xB1\xD0\xB0\xD1\x82\xD1\x80\xD1\x83\xD1\x82\xD0\xB4\xD0\xB... │ 13716 │ +│ 2 │ \xD1\x8D\xD0\xBA\xD0\xB7\xD0\xBE\xD0\xB8\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5 │ 13414 │ +│ 2 │ \xD1\x81\xD0\xBC\xD0\xBE\xD1\x82\xD1\x80\xD0\xB5\xD1\x82\xD1\x8C │ 13105 │ +│ 3 │ \xD0\xBA\xD0\xB0\xD1\x80\xD0\xB5\xD0\xBB\xD0\xBA\xD0\xB8 │ 12815 │ +│ 2 │ \xD0\xB4\xD1\x80\xD1\x83\xD0\xB6\xD0\xBA\xD0\xB5 \xD0\xBF\xD0\xBE\xD0\xBC\xD0\x... │ 11946 │ +└────────────────┴────────────────────────────────────────────────────────────────────────────────────┴───────┘ +Run Time: real 8.029 user 7.544000 sys 0.016000 +D SELECT UserID, count(*) FROM hits GROUP BY UserID ORDER BY count(*) DESC LIMIT 10;s +┌─────────────────────┬──────────────┐ +│ UserID │ count_star() │ +├─────────────────────┼──────────────┤ +│ 1313338681122956954 │ 29097 │ +│ 1907779576417363396 │ 25333 │ +│ 2305303682471783379 │ 10611 │ +│ 7982623143712728547 │ 7584 │ +│ 6018350421959114808 │ 6678 │ +│ 7280399273658728997 │ 6411 │ +│ 1090981537032625727 │ 6197 │ +│ 5730251990344211405 │ 6019 │ +│ 835157184735512989 │ 5211 │ +│ 770542365400669095 │ 4906 │ +└─────────────────────┴──────────────┘ +Run Time: real 5.225 user 5.224000 sys 0.000000 +D SELECT UserID, SearchPhrase, count(*) FROM hits GROUP BY UserID, SearchPhrase ORDER BY count(*) DESC LIMIT 10;, +┌─────────────────────┬──────────────┬──────────────┐ +│ UserID │ SearchPhrase │ count_star() │ +├─────────────────────┼──────────────┼──────────────┤ +│ 1313338681122956954 │ │ 29097 │ +│ 1907779576417363396 │ │ 25333 │ +│ 2305303682471783379 │ │ 10611 │ +│ 7982623143712728547 │ │ 6669 │ +│ 7280399273658728997 │ │ 6408 │ +│ 1090981537032625727 │ │ 6196 │ +│ 5730251990344211405 │ │ 6019 │ +│ 6018350421959114808 │ │ 5990 │ +│ 835157184735512989 │ │ 5209 │ +│ 770542365400669095 │ │ 4906 │ +└─────────────────────┴──────────────┴──────────────┘ +Run Time: real 14.506 user 13.748000 sys 0.496000 +D SELECT UserID, SearchPhrase, count(*) FROM hits GROUP BY UserID, SearchPhrase LIMIT 10; +┌──────────────────────┬────────────────────────────────────────────────────────────────────────────────────┬──────────────┐ +│ UserID │ SearchPhrase │ count_star() │ +├──────────────────────┼────────────────────────────────────────────────────────────────────────────────────┼──────────────┤ +│ 427738049800818189 │ │ 1 │ +│ 15985305027620249815 │ │ 6 │ +│ 7418527520126366595 │ │ 1 │ +│ 519640690937130534 │ │ 2 │ +│ 376160620089546609 │ │ 1 │ +│ 4523925649124320482 │ │ 1 │ +│ 2523324276554785406 │ │ 2 │ +│ 6025915247311731176 │ │ 26 │ +│ 6329532664518159520 │ \xD0\xB2\xD0\xB5\xD0\xB4\xD0\xBE\xD0\xBC\xD0\xBE\xD1\x81\xD0\xBA\xD0\xB2\xD1\x8... │ 2 │ +│ 6329532664518159520 │ │ 19 │ +└──────────────────────┴────────────────────────────────────────────────────────────────────────────────────┴──────────────┘ +Run Time: real 14.919 user 14.912000 sys 0.008000 +D SELECT UserID, extract(minute FROM EventTime) AS m, SearchPhrase, count(*) FROM hits GROUP BY UserID, m, SearchPhrase ORDER BY count(*) DESC LIMIT 10;W +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Binder Error: No function matches the given name and argument types 'date_part(VARCHAR, BIGINT)'. You might need to add explicit type casts. + Candidate functions: + date_part(VARCHAR, DATE) -> BIGINT + date_part(VARCHAR, TIMESTAMP) -> BIGINT + date_part(VARCHAR, TIME) -> BIGINT + date_part(VARCHAR, INTERVAL) -> BIGINT + +LINE 1: SELECT UserID, extract(minute FROM EventTime) AS m, Se... + ^ +D SELECT UserID FROM hits WHERE UserID = -6101065172474983726; +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Conversion Error: Type INT64 with value -6101065172474983726 can't be cast because the value is out of range for the destination type UINT64 +D SELECT count(*) FROM hits WHERE URL LIKE '%metrika%'; +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Binder Error: No function matches the given name and argument types '~~(BLOB, VARCHAR)'. You might need to add explicit type casts. + Candidate functions: + ~~(VARCHAR, VARCHAR) -> BOOLEAN + +D SELECT SearchPhrase, min(URL), count(*) AS c FROM hits WHERE URL LIKE '%metrika%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;A +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Binder Error: No function matches the given name and argument types '~~(BLOB, VARCHAR)'. You might need to add explicit type casts. + Candidate functions: + ~~(VARCHAR, VARCHAR) -> BOOLEAN + +D , min(URL), min(Title), count(*) AS c, COUNT(DISTINCT UserID) FROM hits WHERE Title LIKE '%Яндекс%' AND URL NOT LIKE '%.yandex.%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;A +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Binder Error: No function matches the given name and argument types '~~(BLOB, VARCHAR)'. You might need to add explicit type casts. + Candidate functions: + ~~(VARCHAR, VARCHAR) -> BOOLEAN + +D SELECT * FROM hits WHERE URL LIKE '%metrika%' ORDER BY EventTime LIMIT 10; +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Binder Error: No function matches the given name and argument types '~~(BLOB, VARCHAR)'. You might need to add explicit type casts. + Candidate functions: + ~~(VARCHAR, VARCHAR) -> BOOLEAN + +D SELECT SearchPhrase FROM hits WHERE SearchPhrase != '' ORDER BY EventTime LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ galaxy s4 zoom \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC │ +│ \xD0\xBD\xD0\xBE\xD1\x87\xD0\xBD\xD0\xBE \xD0\xBA\xD0\xB8\xD1\x82\xD0\xB0\xD1\x... │ +│ \xD1\x81\xD0\xB8\xD0\xBC\xD0\xBF\xD1\x82\xD0\xBE\xD0\xBC\xD1\x8B \xD1\x80\xD0\x... │ +│ \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC \xD0\xBD\xD0\xB5\xD0\xB1\xD0\xBE\xD0\x... │ +│ \xD1\x80\xD0\xB0\xD1\x81\xD0\xBF\xD0\xB8\xD1\x81\xD0\xB0\xD0\xBD\xD0\xB8\xD0\xB... │ +│ \xD0\xB1\xD1\x80\xD0\xB8\xD1\x82\xD0\xB0 \xD0\xB3\xD0\xB0\xD0\xBD\xD0\xB0\xD0\x... │ +│ \xD0\xB0\xD0\xBD\xD0\xB0\xD0\xBF\xD0\xB0 \xD0\xBE\xD0\xBF\xD0\xB5\xD1\x80\xD0\x... │ +│ \xD1\x81\xD0\xBA\xD0\xB0\xD1\x87\xD0\xB0\xD1\x82\xD1\x8C \xD1\x87\xD0\xB8\xD1\x... │ +│ \xD1\x81\xD0\xBB\xD0\xBE\xD0\xBD.\xD1\x80\xD1\x83\xD0\xB1., \xD0\xB4. \xD0\xB0.... │ +│ \xD0\xBE\xD1\x82\xD0\xB4\xD1\x8B\xD1\x85\xD0\xB0 \xD1\x87\xD0\xB5\xD0\xBC \xD0\... │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 4.282 user 3.572000 sys 0.048000 +D SELECT SearchPhrase FROM hits WHERE SearchPhrase != '' ORDER BY SearchPhrase LIMIT 10;= +┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ ! hektdf gjcgjhn conster │ +│ ! \xD1\x81\xD0\xBA\xD0\xB0\xD1\x80\xD0\xBF │ +│ !(\xD0\xBA\xD0\xB0\xD0\xBA \xD0\xB2\xD0\xBE\xD1\x80\xD0\xBE\xD0\xBD\xD0\xB8 │ +│ !(\xD0\xBF\xD0\xBE \xD0\xB3\xD0\xBE\xD1\x80\xD0\xB8\xD1\x8E \xD0\xB2 \xD1\x8F\x... │ +│ !(\xD1\x81) \xD0\xBF\xD1\x80\xD0\xBE \xD0\xB4\xD0\xBF\xD0\xBE \xD1\x81\xD0\xB5\... │ +│ !(\xD1\x81\xD0\xB0\xD0\xBB\xD0\xBE\xD0\xBD\xD1\x8B \xD0\xBE\xD1\x81\xD1\x82\xD0... │ +│ !(\xD1\x81\xD1\x82\xD0\xB0\xD1\x80\xD1\x82\xD0\xB5\xD1\x80 rav4 \xD1\x82\xD1\x8... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD0\xB4\xD0\xBB\xD1\x8F \xD0\xBC\xD1\x8F\xD1... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD0\xBC\xD0\xB0\xD1\x83\xD1\x81 \xD0\xBA\xD0... │ +│ !\xD0\xBA\xD1\x83\xD0\xB3\xD0\xB8 \xD1\x81\xD0\xB5\xD1\x80\xD0\xB8\xD0\xB8 │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 3.610 user 3.612000 sys 0.000000 +D SELECT SearchPhrase FROM hits WHERE SearchPhrase != '' ORDER BY EventTime, SearchPhrase LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┐ +│ SearchPhrase │ +├────────────────────────────────────────────────────────────────────────────────────┤ +│ galaxy s4 zoom \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC │ +│ \xD0\xBD\xD0\xBE\xD1\x87\xD0\xBD\xD0\xBE \xD0\xBA\xD0\xB8\xD1\x82\xD0\xB0\xD1\x... │ +│ \xD1\x81\xD0\xB8\xD0\xBC\xD0\xBF\xD1\x82\xD0\xBE\xD0\xBC\xD1\x8B \xD1\x80\xD0\x... │ +│ \xD1\x84\xD0\xB8\xD0\xBB\xD1\x8C\xD0\xBC \xD0\xBD\xD0\xB5\xD0\xB1\xD0\xBE\xD0\x... │ +│ \xD0\xB0\xD0\xB2\xD0\xBE\xD0\xBC \xD0\xBA\xD0\xBE\xD0\xBD\xD1\x81\xD1\x82\xD0\x... │ +│ \xD0\xB0\xD0\xBD\xD0\xB0\xD0\xBF\xD0\xB0 \xD0\xBE\xD0\xBF\xD0\xB5\xD1\x80\xD0\x... │ +│ \xD0\xB1\xD1\x80\xD0\xB8\xD1\x82\xD0\xB0 \xD0\xB3\xD0\xB0\xD0\xBD\xD0\xB0\xD0\x... │ +│ \xD0\xBA\xD0\xBE\xD0\xBC\xD0\xBF\xD1\x8C\xD1\x8E\xD1\x82\xD0\xB5\xD1\x80\xD0\xB... │ +│ \xD0\xBE\xD1\x82\xD0\xB4\xD1\x8B\xD1\x85\xD0\xB0 \xD1\x87\xD0\xB5\xD0\xBC \xD0\... │ +│ \xD1\x80\xD0\xB0\xD1\x81\xD0\xBF\xD0\xB8\xD1\x81\xD0\xB0\xD0\xBD\xD0\xB8\xD0\xB... │ +└────────────────────────────────────────────────────────────────────────────────────┘ +Run Time: real 3.640 user 3.640000 sys 0.000000 +D SELECT CounterID, avg(length(URL)) AS l, count(*) AS c FROM hits WHERE URL != '' GROUP BY CounterID HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25; +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Binder Error: No function matches the given name and argument types 'length(BLOB)'. You might need to add explicit type casts. + Candidate functions: + length(VARCHAR) -> BIGINT + length(LIST) -> BIGINT + +LINE 1: SELECT CounterID, avg(length(URL)) AS l, count(*) AS c FROM h... + ^ +D Referer, '^https?://(?:www\.)?([^/]+)/.*$', '\1') AS key, avg(length(Referer)) AS l, count(*) AS c, min(Referer) FROM hits WHERE Referer != '' GROUP BY key HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25; +VRun Time: real 0.000 user 0.000000 sys 0.000000 +Error: Binder Error: No function matches the given name and argument types 'regexp_replace(BLOB, VARCHAR, VARCHAR)'. You might need to add explicit type casts. + Candidate functions: + regexp_replace(VARCHAR, VARCHAR, VARCHAR) -> VARCHAR + regexp_replace(VARCHAR, VARCHAR, VARCHAR, VARCHAR) -> VARCHAR + +LINE 1: SELECT REGEXP_REPLACE(Referer, '^https?://(?:w... + ^ +D + 82), sum(ResolutionWidth + 83), sum(ResolutionWidth + 84), sum(ResolutionWidth + 85), sum(ResolutionWidth + 86), sum(ResolutionWidth + 87), sum(ResolutionWidth + 88), sum(ResolutionWidth + 89) FROM hits; +┌──────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬──────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┬───────────────────────────┐ +│ sum(resolutionwidth) │ sum(resolutionwidth + 1) │ sum(resolutionwidth + 2) │ sum(resolutionwidth + 3) │ sum(resolutionwidth + 4) │ sum(resolutionwidth + 5) │ sum(resolutionwidth + 6) │ sum(resolutionwidth + 7) │ sum(resolutionwidth + 8) │ sum(resolutionwidth + 9) │ sum(resolutionwidth + 10) │ sum(resolutionwidth + 11) │ sum(resolutionwidth + 12) │ sum(resolutionwidth + 13) │ sum(resolutionwidth + 14) │ sum(resolutionwidth + 15) │ sum(resolutionwidth + 16) │ sum(resolutionwidth + 17) │ sum(resolutionwidth + 18) │ sum(resolutionwidth + 19) │ sum(resolutionwidth + 20) │ sum(resolutionwidth + 21) │ sum(resolutionwidth + 22) │ sum(resolutionwidth + 23) │ sum(resolutionwidth + 24) │ sum(resolutionwidth + 25) │ sum(resolutionwidth + 26) │ sum(resolutionwidth + 27) │ sum(resolutionwidth + 28) │ sum(resolutionwidth + 29) │ sum(resolutionwidth + 30) │ sum(resolutionwidth + 31) │ sum(resolutionwidth + 32) │ sum(resolutionwidth + 33) │ sum(resolutionwidth + 34) │ sum(resolutionwidth + 35) │ sum(resolutionwidth + 36) │ sum(resolutionwidth + 37) │ sum(resolutionwidth + 38) │ sum(resolutionwidth + 39) │ sum(resolutionwidth + 40) │ sum(resolutionwidth + 41) │ sum(resolutionwidth + 42) │ sum(resolutionwidth + 43) │ sum(resolutionwidth + 44) │ sum(resolutionwidth + 45) │ sum(resolutionwidth + 46) │ sum(resolutionwidth + 47) │ sum(resolutionwidth + 48) │ sum(resolutionwidth + 49) │ sum(resolutionwidth + 50) │ sum(resolutionwidth + 51) │ sum(resolutionwidth + 52) │ sum(resolutionwidth + 53) │ sum(resolutionwidth + 54) │ sum(resolutionwidth + 55) │ sum(resolutionwidth + 56) │ sum(resolutionwidth + 57) │ sum(resolutionwidth + 58) │ sum(resolutionwidth + 59) │ sum(resolutionwidth + 60) │ sum(resolutionwidth + 61) │ sum(resolutionwidth + 62) │ sum(resolutionwidth + 63) │ sum(resolutionwidth + 64) │ sum(resolutionwidth + 65) │ sum(resolutionwidth + 66) │ sum(resolutionwidth + 67) │ sum(resolutionwidth + 68) │ sum(resolutionwidth + 69) │ sum(resolutionwidth + 70) │ sum(resolutionwidth + 71) │ sum(resolutionwidth + 72) │ sum(resolutionwidth + 73) │ sum(resolutionwidth + 74) │ sum(resolutionwidth + 75) │ sum(resolutionwidth + 76) │ sum(resolutionwidth + 77) │ sum(resolutionwidth + 78) │ sum(resolutionwidth + 79) │ sum(resolutionwidth + 80) │ sum(resolutionwidth + 81) │ sum(resolutionwidth + 82) │ sum(resolutionwidth + 83) │ sum(resolutionwidth + 84) │ sum(resolutionwidth + 85) │ sum(resolutionwidth + 86) │ sum(resolutionwidth + 87) │ sum(resolutionwidth + 88) │ sum(resolutionwidth + 89) │ +├──────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼──────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┼───────────────────────────┤ +│ 151348908394 │ 151448908394 │ 151548908394 │ 151648908394 │ 151748908394 │ 151848908394 │ 151948908394 │ 152048908394 │ 152148908394 │ 152248908394 │ 152348908394 │ 152448908394 │ 152548908394 │ 152648908394 │ 152748908394 │ 152848908394 │ 152948908394 │ 153048908394 │ 153148908394 │ 153248908394 │ 153348908394 │ 153448908394 │ 153548908394 │ 153648908394 │ 153748908394 │ 153848908394 │ 153948908394 │ 154048908394 │ 154148908394 │ 154248908394 │ 154348908394 │ 154448908394 │ 154548908394 │ 154648908394 │ 154748908394 │ 154848908394 │ 154948908394 │ 155048908394 │ 155148908394 │ 155248908394 │ 155348908394 │ 155448908394 │ 155548908394 │ 155648908394 │ 155748908394 │ 155848908394 │ 155948908394 │ 156048908394 │ 156148908394 │ 156248908394 │ 156348908394 │ 156448908394 │ 156548908394 │ 156648908394 │ 156748908394 │ 156848908394 │ 156948908394 │ 157048908394 │ 157148908394 │ 157248908394 │ 157348908394 │ 157448908394 │ 157548908394 │ 157648908394 │ 157748908394 │ 157848908394 │ 157948908394 │ 158048908394 │ 158148908394 │ 158248908394 │ 158348908394 │ 158448908394 │ 158548908394 │ 158648908394 │ 158748908394 │ 158848908394 │ 158948908394 │ 159048908394 │ 159148908394 │ 159248908394 │ 159348908394 │ 159448908394 │ 159548908394 │ 159648908394 │ 159748908394 │ 159848908394 │ 159948908394 │ 160048908394 │ 160148908394 │ 160248908394 │ +└──────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴──────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┴───────────────────────────┘ +Run Time: real 85.256 user 85.252000 sys 0.000000 +D SELECT SearchEngineID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits WHERE SearchPhrase != '' GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10; +┌────────────────┬────────────┬──────┬──────────────┬──────────────────────┐ +│ SearchEngineID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├────────────────┼────────────┼──────┼──────────────┼──────────────────────┤ +│ 2 │ 1138507705 │ 1633 │ 35 │ 1408.0122473974282 │ +│ 2 │ 1740861572 │ 1331 │ 28 │ 1577.945905334335 │ +│ 2 │ 3487820196 │ 1144 │ 35 │ 1553.1984265734266 │ +│ 2 │ 3797060577 │ 1140 │ 36 │ 1543.4140350877192 │ +│ 2 │ 2349209741 │ 1105 │ 30 │ 1557.387330316742 │ +│ 2 │ 2424344199 │ 1102 │ 31 │ 1555.6588021778584 │ +│ 2 │ 3663904793 │ 1083 │ 31 │ 1581.8171745152354 │ +│ 2 │ 3829154130 │ 1082 │ 30 │ 1541.253234750462 │ +│ 2 │ 2551371145 │ 1080 │ 24 │ 1559.8092592592593 │ +│ 2 │ 4029049820 │ 1058 │ 32 │ 1556.2003780718337 │ +└────────────────┴────────────┴──────┴──────────────┴──────────────────────┘ +Run Time: real 8.033 user 7.032000 sys 0.048000 +D SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits WHERE SearchPhrase != '' GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +┌─────────────────────┬────────────┬───┬──────────────┬──────────────────────┐ +│ WatchID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├─────────────────────┼────────────┼───┼──────────────┼──────────────────────┤ +│ 7472773096904766158 │ 972408088 │ 2 │ 0 │ 1368.0 │ +│ 8515267528803597958 │ 2005721512 │ 2 │ 0 │ 1917.0 │ +│ 5431383378337214900 │ 1373018819 │ 2 │ 0 │ 1087.0 │ +│ 4975771741728931240 │ 1594850068 │ 2 │ 0 │ 1917.0 │ +│ 6143560365929503526 │ 2912060982 │ 2 │ 0 │ 1368.0 │ +│ 4661775965756901134 │ 3822464671 │ 2 │ 0 │ 1638.0 │ +│ 5340100429706330950 │ 709893659 │ 2 │ 0 │ 1368.0 │ +│ 5265600775603767970 │ 1677655885 │ 2 │ 0 │ 1396.0 │ +│ 5449946953533528811 │ 3822667196 │ 2 │ 0 │ 1638.0 │ +│ 6426552621243022389 │ 3557962159 │ 2 │ 0 │ 1638.0 │ +└─────────────────────┴────────────┴───┴──────────────┴──────────────────────┘ +Run Time: real 9.317 user 8.380000 sys 0.052000 +D SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +┌─────────────────────┬────────────┬───┬──────────────┬──────────────────────┐ +│ WatchID │ ClientIP │ c │ sum(refresh) │ avg(resolutionwidth) │ +├─────────────────────┼────────────┼───┼──────────────┼──────────────────────┤ +│ 5732691047654519103 │ 1097532796 │ 2 │ 0 │ 1638.0 │ +│ 8308952461884454508 │ 2609801721 │ 2 │ 0 │ 1087.0 │ +│ 7472773096904766158 │ 972408088 │ 2 │ 0 │ 1368.0 │ +│ 7360470262372840837 │ 972408088 │ 2 │ 0 │ 1368.0 │ +│ 4778976465399160621 │ 3938580212 │ 2 │ 2 │ 1638.0 │ +│ 4848145794958638974 │ 3938580212 │ 2 │ 0 │ 1638.0 │ +│ 9172448021081089285 │ 2530876984 │ 2 │ 0 │ 1638.0 │ +│ 6471985135199404171 │ 765833715 │ 2 │ 0 │ 1594.0 │ +│ 8824813183119863159 │ 765833715 │ 2 │ 0 │ 1594.0 │ +│ 8227322756510819845 │ 765833715 │ 2 │ 0 │ 1594.0 │ +└─────────────────────┴────────────┴───┴──────────────┴──────────────────────┘ +Run Time: real 48.016 user 32.076000 sys 8.092000 +D SELECT URL, count(*) AS c FROM hits GROUP BY URL ORDER BY c DESC LIMIT 10; +┌────────────────────────────────────────────────────────────────────────────────────┬─────────┐ +│ URL │ c │ +├────────────────────────────────────────────────────────────────────────────────────┼─────────┤ +│ http://liver.ru/belgorod/page/1006.j\xD0\xBA\xD0\xB8/\xD0\xB4\xD0\xBE\xD0\xBF_\... │ 3288173 │ +│ http://kinopoisk.ru │ 1625251 │ +│ http://bdsm_po_yers=0&with_video │ 791465 │ +│ http://video.yandex │ 582404 │ +│ http://smeshariki.ru/region │ 514984 │ +│ http://auto_fiat_dlya-bluzki%2F8536.30.18&he=900&with │ 507995 │ +│ http://liver.ru/place_rukodel=365115eb7bbb90 │ 359893 │ +│ http://kinopoisk.ru/vladimir.irr.ru │ 354690 │ +│ http://video.yandex.ru/search/?jenre=50&s_yers │ 318979 │ +│ http://tienskaia-moda │ 289355 │ +└────────────────────────────────────────────────────────────────────────────────────┴─────────┘ +Run Time: real 55.180 user 33.916000 sys 1.012000 +D SELECT 1, URL, count(*) AS c FROM hits GROUP BY 1, URL ORDER BY c DESC LIMIT 10; +┌───┬────────────────────────────────────────────────────────────────────────────────────┬─────────┐ +│ 1 │ URL │ c │ +├───┼────────────────────────────────────────────────────────────────────────────────────┼─────────┤ +│ 1 │ http://liver.ru/belgorod/page/1006.j\xD0\xBA\xD0\xB8/\xD0\xB4\xD0\xBE\xD0\xBF_\... │ 3288173 │ +│ 1 │ http://kinopoisk.ru │ 1625251 │ +│ 1 │ http://bdsm_po_yers=0&with_video │ 791465 │ +│ 1 │ http://video.yandex │ 582404 │ +│ 1 │ http://smeshariki.ru/region │ 514984 │ +│ 1 │ http://auto_fiat_dlya-bluzki%2F8536.30.18&he=900&with │ 507995 │ +│ 1 │ http://liver.ru/place_rukodel=365115eb7bbb90 │ 359893 │ +│ 1 │ http://kinopoisk.ru/vladimir.irr.ru │ 354690 │ +│ 1 │ http://video.yandex.ru/search/?jenre=50&s_yers │ 318979 │ +│ 1 │ http://tienskaia-moda │ 289355 │ +└───┴────────────────────────────────────────────────────────────────────────────────────┴─────────┘ +Run Time: real 34.194 user 34.132000 sys 0.060000 +D SELECT ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3, count(*) AS c FROM hits GROUP BY ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3 ORDER BY c DESC LIMIT 10; +┌────────────┬──────────────┬──────────────┬──────────────┬───────┐ +│ ClientIP │ clientip - 1 │ clientip - 2 │ clientip - 3 │ c │ +├────────────┼──────────────┼──────────────┼──────────────┼───────┤ +│ 4255045322 │ 4255045321 │ 4255045320 │ 4255045319 │ 47008 │ +│ 2596862839 │ 2596862838 │ 2596862837 │ 2596862836 │ 29121 │ +│ 3119147744 │ 3119147743 │ 3119147742 │ 3119147741 │ 25333 │ +│ 1696638182 │ 1696638181 │ 1696638180 │ 1696638179 │ 20230 │ +│ 1138507705 │ 1138507704 │ 1138507703 │ 1138507702 │ 15778 │ +│ 3367941774 │ 3367941773 │ 3367941772 │ 3367941771 │ 12768 │ +│ 3032827420 │ 3032827419 │ 3032827418 │ 3032827417 │ 11349 │ +│ 1740861572 │ 1740861571 │ 1740861570 │ 1740861569 │ 11315 │ +│ 3487820196 │ 3487820195 │ 3487820194 │ 3487820193 │ 9881 │ +│ 3663904793 │ 3663904792 │ 3663904791 │ 3663904790 │ 9718 │ +└────────────┴──────────────┴──────────────┴──────────────┴───────┘ +Run Time: real 17.028 user 17.024000 sys 0.004000 +D ) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND URL != '' GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Conversion Error: Could not convert string '2013-07-01' to UINT16 +D PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND Title != '' GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +Run Time: real 0.001 user 0.000000 sys 0.000000 +Error: Conversion Error: Could not convert string '2013-07-01' to UINT16 +D AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Conversion Error: Could not convert string '2013-07-01' to UINT16 +D ROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +Run Time: real 0.001 user 0.004000 sys 0.000000 +Error: Conversion Error: Could not convert string '2013-07-01' to UINT16 +D ND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Conversion Error: Could not convert string '2013-07-01' to UINT16 +D ate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Conversion Error: Could not convert string '2013-07-01' to UINT16 +D ts WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-02' AND "refresh" = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', EventTime) ORDER BY DATE_TRUNC('minute', EventTime); +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Binder Error: No function matches the given name and argument types 'date_trunc(VARCHAR, BIGINT)'. You might need to add explicit type casts. + Candidate functions: + date_trunc(VARCHAR, TIMESTAMP) -> TIMESTAMP + date_trunc(VARCHAR, DATE) -> TIMESTAMP + +LINE 1: ...sh" = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', EventTime) ORDER B... +``` + +Mostly alright but some functions are missing and the types from Parquet are wrong. + +Let's try to load from CSV: + +``` +SELECT * FROM hits_100m_obfuscated INTO OUTFILE 'hits.csv' FORMAT CSV +``` + +``` +$ ./duckdb +v0.3.0 46a0fc50a +Enter ".help" for usage hints. +Connected to a transient in-memory database. +Use ".open FILENAME" to reopen on a persistent database. +D .open 'duckdb.db' +D ; +D PRAGMA temp_directory='duckdb.tmp'; +Error: Parser Error: syntax error at or near "" +LINE 1: PRAGMA temp_directory='duckdb.tmp'; + ^ +D PRAGMA temp_directory='duckdb.tmp'; +Error: Parser Error: syntax error at or near "" +LINE 1: PRAGMA temp_directory='duckdb.tmp'; + ^ +D .open 'duckdb.db'; +D +D SELECT 1 +> ; +┌───┐ +│ 1 │ +├───┤ +│ 1 │ +└───┘ +D PRAGMA temp_directory='duckdb.tmp'; +Error: Parser Error: syntax error at or near "" +LINE 1: PRAGMA temp_directory='duckdb.tmp'; + ^ +D CREATE TABLE hits AS SELECT * FROM read_csv_auto('hits.csv'); +Error: String value is not valid UTF8 +``` + +It does not work for non-UTF8 data. + +Let's cleanup UTF-8. + +``` +clickhouse-local --input-format LineAsString --output-format TSVRaw --structure 's String' --query "SELECT toValidUTF8(s) FROM table" --progress < hits.csv > hits_valid.csv +``` + +``` +D CREATE TABLE hits AS SELECT * FROM read_csv_auto('hits_valid.csv'); +Error: Invalid Input Error: Could not convert string '2149615427' to INT32 in column "column082", between line 137217 and 138240. Parser options: DELIMITER=',' (auto detected), QUOTE='"' (auto detected), ESCAPE='' (auto detected), HEADER=0 (auto detected), SAMPLE_SIZE=10240, ALL_VARCHAR=0. Consider either increasing the sample size (SAMPLE_SIZE=X [X rows] or SAMPLE_SIZE=-1 [all rows]), or skipping column conversion (ALL_VARCHAR=1) +``` + +Does not work either. + +DuckDB CLI does not support history search (Ctrl+R). + +If I write a command and then prepend `-- ` before it, then history navigation becomes completely broken. + +``` +D CREATE TABLE hits AS SELECT * FROM parquet_scan('hits.parquet' ; +Run Time: real 0.000 user 0.000000 sys 0.000000 +Error: Parser Error: syntax error at or near ";" +LINE 1: ...ECT * FROM parquet_scan('hits.parquet' ; + ^ +D CREATE TABLE hits AS SELECT * FROM parquet_scan('hits.parque)' ; +``` + +``` +D CREATE TABLE hits AS SELECT * FROM parquet_scan('hits.parquet'); +Run Time: real 1086.631 user 758.036000 sys 201.360000 +``` + +It's just about 100 000 rows/second. Quite decent but not good. + +Cancelling queries by Ctrl+C does not work. + +I've noticed that DuckDB is using single thread. +Most likely it can be fixed with + +``` +PRAGMA threads = 16; +``` + +``` +PRAGMA threads = 16; +PRAGMA temp_directory='duckdb.tmp'; +.timer on +CREATE TABLE hits AS SELECT * FROM parquet_scan('hits.parquet'); +``` + +It's much better with threads: + +``` +D CREATE TABLE hits AS SELECT * FROM parquet_scan('hits.parquet'); +Run Time: real 315.828 user 447.896000 sys 126.552000 +``` + +Let's run all the queries three times. + +Collecting the results: + +``` +grep -F 'Run Time: real ' log | grep -oP 'real [\d\.]+' | grep -oP '[\d\.]+' | tail -n129 | clickhouse-local --structure 'x Decimal32(3)' --query "SELECT groupArray(x) FROM table GROUP BY rowNumberInAllBlocks() % 43 AS n ORDER BY n" +``` + +Let's create index to speed up point queries: + +``` +D CREATE INDEX counter_id_idx ON hits (CounterID); +Run Time: real 18.194 user 16.256000 sys 0.092000 +``` + +Ok, it's quite fast. + +Rerun the last 7 queries. diff --git a/benchmark/postgresql/benchmark.sh b/benchmark/postgresql/benchmark.sh new file mode 100755 index 00000000000..4a7139ec79d --- /dev/null +++ b/benchmark/postgresql/benchmark.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +grep -v -P '^#' queries.sql | sed -e 's/{table}/hits_100m_pg/' | while read query; do + + echo 3 | sudo tee /proc/sys/vm/drop_caches + + echo "$query"; + for i in {1..3}; do + # For some reason JIT does not work on my machine + sudo -u postgres psql tutorial -t -c 'set jit = off' -c '\timing' -c "$query" | grep 'Time' | tee --append log + done; +done; diff --git a/benchmark/postgresql/instructions.md b/benchmark/postgresql/instructions.md new file mode 100644 index 00000000000..296fa377bd1 --- /dev/null +++ b/benchmark/postgresql/instructions.md @@ -0,0 +1,142 @@ +Create a table in PostgreSQL: + +``` +CREATE TABLE hits_100m_pg +( + WatchID BIGINT NOT NULL, + JavaEnable SMALLINT NOT NULL, + Title TEXT NOT NULL, + GoodEvent SMALLINT NOT NULL, + EventTime TIMESTAMP NOT NULL, + EventDate Date NOT NULL, + CounterID INTEGER NOT NULL, + ClientIP INTEGER NOT NULL, + RegionID INTEGER NOT NULL, + UserID BIGINT NOT NULL, + CounterClass SMALLINT NOT NULL, + OS SMALLINT NOT NULL, + UserAgent SMALLINT NOT NULL, + URL TEXT NOT NULL, + Referer TEXT NOT NULL, + Refresh SMALLINT NOT NULL, + RefererCategoryID SMALLINT NOT NULL, + RefererRegionID INTEGER NOT NULL, + URLCategoryID SMALLINT NOT NULL, + URLRegionID INTEGER NOT NULL, + ResolutionWidth SMALLINT NOT NULL, + ResolutionHeight SMALLINT NOT NULL, + ResolutionDepth SMALLINT NOT NULL, + FlashMajor SMALLINT NOT NULL, + FlashMinor SMALLINT NOT NULL, + FlashMinor2 TEXT NOT NULL, + NetMajor SMALLINT NOT NULL, + NetMinor SMALLINT NOT NULL, + UserAgentMajor SMALLINT NOT NULL, + UserAgentMinor CHAR(2) NOT NULL, + CookieEnable SMALLINT NOT NULL, + JavascriptEnable SMALLINT NOT NULL, + IsMobile SMALLINT NOT NULL, + MobilePhone SMALLINT NOT NULL, + MobilePhoneModel TEXT NOT NULL, + Params TEXT NOT NULL, + IPNetworkID INTEGER NOT NULL, + TraficSourceID SMALLINT NOT NULL, + SearchEngineID SMALLINT NOT NULL, + SearchPhrase TEXT NOT NULL, + AdvEngineID SMALLINT NOT NULL, + IsArtifical SMALLINT NOT NULL, + WindowClientWidth SMALLINT NOT NULL, + WindowClientHeight SMALLINT NOT NULL, + ClientTimeZone SMALLINT NOT NULL, + ClientEventTime TIMESTAMP NOT NULL, + SilverlightVersion1 SMALLINT NOT NULL, + SilverlightVersion2 SMALLINT NOT NULL, + SilverlightVersion3 INTEGER NOT NULL, + SilverlightVersion4 SMALLINT NOT NULL, + PageCharset TEXT NOT NULL, + CodeVersion INTEGER NOT NULL, + IsLink SMALLINT NOT NULL, + IsDownload SMALLINT NOT NULL, + IsNotBounce SMALLINT NOT NULL, + FUniqID BIGINT NOT NULL, + OriginalURL TEXT NOT NULL, + HID INTEGER NOT NULL, + IsOldCounter SMALLINT NOT NULL, + IsEvent SMALLINT NOT NULL, + IsParameter SMALLINT NOT NULL, + DontCountHits SMALLINT NOT NULL, + WithHash SMALLINT NOT NULL, + HitColor CHAR NOT NULL, + LocalEventTime TIMESTAMP NOT NULL, + Age SMALLINT NOT NULL, + Sex SMALLINT NOT NULL, + Income SMALLINT NOT NULL, + Interests SMALLINT NOT NULL, + Robotness SMALLINT NOT NULL, + RemoteIP INTEGER NOT NULL, + WindowName INTEGER NOT NULL, + OpenerName INTEGER NOT NULL, + HistoryLength SMALLINT NOT NULL, + BrowserLanguage TEXT NOT NULL, + BrowserCountry TEXT NOT NULL, + SocialNetwork TEXT NOT NULL, + SocialAction TEXT NOT NULL, + HTTPError SMALLINT NOT NULL, + SendTiming INTEGER NOT NULL, + DNSTiming INTEGER NOT NULL, + ConnectTiming INTEGER NOT NULL, + ResponseStartTiming INTEGER NOT NULL, + ResponseEndTiming INTEGER NOT NULL, + FetchTiming INTEGER NOT NULL, + SocialSourceNetworkID SMALLINT NOT NULL, + SocialSourcePage TEXT NOT NULL, + ParamPrice BIGINT NOT NULL, + ParamOrderID TEXT NOT NULL, + ParamCurrency TEXT NOT NULL, + ParamCurrencyID SMALLINT NOT NULL, + OpenstatServiceName TEXT NOT NULL, + OpenstatCampaignID TEXT NOT NULL, + OpenstatAdID TEXT NOT NULL, + OpenstatSourceID TEXT NOT NULL, + UTMSource TEXT NOT NULL, + UTMMedium TEXT NOT NULL, + UTMCampaign TEXT NOT NULL, + UTMContent TEXT NOT NULL, + UTMTerm TEXT NOT NULL, + FromTag TEXT NOT NULL, + HasGCLID SMALLINT NOT NULL, + RefererHash BIGINT NOT NULL, + URLHash BIGINT NOT NULL, + CLID INTEGER NOT NULL +); +``` + +Create a dump from ClickHouse: + +``` +SELECT WatchID::Int64, JavaEnable, replaceAll(replaceAll(replaceAll(toValidUTF8(Title), '\0', ''), '"', ''), '\\', ''), GoodEvent, EventTime, EventDate, CounterID::Int32, ClientIP::Int32, RegionID::Int32, + UserID::Int64, CounterClass, OS, UserAgent, replaceAll(replaceAll(replaceAll(toValidUTF8(URL), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(Referer), '\0', ''), '"', ''), '\\', ''), Refresh, RefererCategoryID::Int16, RefererRegionID::Int32, + URLCategoryID::Int16, URLRegionID::Int32, ResolutionWidth::Int16, ResolutionHeight::Int16, ResolutionDepth, FlashMajor, FlashMinor, + FlashMinor2, NetMajor, NetMinor, UserAgentMajor::Int16, replaceAll(replaceAll(replaceAll(toValidUTF8(UserAgentMinor::String), '\0', ''), '"', ''), '\\', ''), CookieEnable, JavascriptEnable, IsMobile, MobilePhone, + replaceAll(replaceAll(replaceAll(toValidUTF8(MobilePhoneModel), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(Params), '\0', ''), '"', ''), '\\', ''), IPNetworkID::Int32, TraficSourceID, SearchEngineID::Int16, replaceAll(replaceAll(replaceAll(toValidUTF8(SearchPhrase), '\0', ''), '"', ''), '\\', ''), + AdvEngineID, IsArtifical, WindowClientWidth::Int16, WindowClientHeight::Int16, ClientTimeZone, ClientEventTime, + SilverlightVersion1, SilverlightVersion2, SilverlightVersion3::Int32, SilverlightVersion4::Int16, replaceAll(replaceAll(replaceAll(toValidUTF8(PageCharset), '\0', ''), '"', ''), '\\', ''), + CodeVersion::Int32, IsLink, IsDownload, IsNotBounce, FUniqID::Int64, replaceAll(replaceAll(replaceAll(toValidUTF8(OriginalURL), '\0', ''), '"', ''), '\\', ''), HID::Int32, IsOldCounter, IsEvent, + IsParameter, DontCountHits, WithHash, replaceAll(replaceAll(replaceAll(toValidUTF8(HitColor::String), '\0', ''), '"', ''), '\\', ''), LocalEventTime, Age, Sex, Income, Interests::Int16, Robotness, RemoteIP::Int32, + WindowName, OpenerName, HistoryLength, replaceAll(replaceAll(replaceAll(toValidUTF8(BrowserLanguage::String), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(BrowserCountry::String), '\0', ''), '"', ''), '\\', ''), + replaceAll(replaceAll(replaceAll(toValidUTF8(SocialNetwork), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(SocialAction), '\0', ''), '"', ''), '\\', ''), + HTTPError, least(SendTiming, 30000), least(DNSTiming, 30000), least(ConnectTiming, 30000), least(ResponseStartTiming, 30000), + least(ResponseEndTiming, 30000), least(FetchTiming, 30000), SocialSourceNetworkID, + replaceAll(replaceAll(replaceAll(toValidUTF8(SocialSourcePage), '\0', ''), '"', ''), '\\', ''), ParamPrice, replaceAll(replaceAll(replaceAll(toValidUTF8(ParamOrderID), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(ParamCurrency::String), '\0', ''), '"', ''), '\\', ''), + ParamCurrencyID::Int16, OpenstatServiceName, OpenstatCampaignID, OpenstatAdID, OpenstatSourceID, + UTMSource, UTMMedium, UTMCampaign, UTMContent, UTMTerm, FromTag, HasGCLID, RefererHash::Int64, URLHash::Int64, CLID::Int32 +FROM hits_100m_obfuscated +INTO OUTFILE 'dump.tsv' +FORMAT TSV +``` + +Insert data into PostgreSQL: + +``` +\copy hits_100m_pg FROM 'dump.tsv'; +``` diff --git a/benchmark/postgresql/log b/benchmark/postgresql/log new file mode 100644 index 00000000000..6a95561e6da --- /dev/null +++ b/benchmark/postgresql/log @@ -0,0 +1,129 @@ +Time: 122020.258 ms (02:02.020) +Time: 5060.281 ms (00:05.060) +Time: 5052.692 ms (00:05.053) +Time: 129594.172 ms (02:09.594) +Time: 8079.623 ms (00:08.080) +Time: 7866.964 ms (00:07.867) +Time: 129584.717 ms (02:09.585) +Time: 8276.161 ms (00:08.276) +Time: 8153.295 ms (00:08.153) +Time: 123707.890 ms (02:03.708) +Time: 6835.297 ms (00:06.835) +Time: 6607.039 ms (00:06.607) +Time: 166640.676 ms (02:46.641) +Time: 75401.239 ms (01:15.401) +Time: 73526.027 ms (01:13.526) +Time: 272715.750 ms (04:32.716) +Time: 182721.613 ms (03:02.722) +Time: 182880.525 ms (03:02.881) +Time: 127108.191 ms (02:07.108) +Time: 6542.913 ms (00:06.543) +Time: 6339.887 ms (00:06.340) +Time: 127339.314 ms (02:07.339) +Time: 8376.381 ms (00:08.376) +Time: 7831.872 ms (00:07.832) +Time: 179176.439 ms (02:59.176) +Time: 58559.297 ms (00:58.559) +Time: 58139.265 ms (00:58.139) +Time: 182019.101 ms (03:02.019) +Time: 58435.027 ms (00:58.435) +Time: 58130.994 ms (00:58.131) +Time: 132449.502 ms (02:12.450) +Time: 11203.104 ms (00:11.203) +Time: 11048.435 ms (00:11.048) +Time: 128445.641 ms (02:08.446) +Time: 11602.145 ms (00:11.602) +Time: 11418.356 ms (00:11.418) +Time: 162831.387 ms (02:42.831) +Time: 41510.710 ms (00:41.511) +Time: 41682.899 ms (00:41.683) +Time: 171898.965 ms (02:51.899) +Time: 47379.274 ms (00:47.379) +Time: 47429.908 ms (00:47.430) +Time: 161607.811 ms (02:41.608) +Time: 41674.409 ms (00:41.674) +Time: 40854.340 ms (00:40.854) +Time: 175247.929 ms (02:55.248) +Time: 46721.776 ms (00:46.722) +Time: 46507.631 ms (00:46.508) +Time: 335961.271 ms (05:35.961) +Time: 248535.866 ms (04:08.536) +Time: 247383.678 ms (04:07.384) +Time: 132852.983 ms (02:12.853) +Time: 14939.304 ms (00:14.939) +Time: 14607.525 ms (00:14.608) +Time: 243461.844 ms (04:03.462) +Time: 157307.904 ms (02:37.308) +Time: 155093.101 ms (02:35.093) +Time: 122090.761 ms (02:02.091) +Time: 6411.266 ms (00:06.411) +Time: 6308.178 ms (00:06.308) +Time: 126584.819 ms (02:06.585) +Time: 8836.471 ms (00:08.836) +Time: 8532.176 ms (00:08.532) +Time: 125225.097 ms (02:05.225) +Time: 10236.910 ms (00:10.237) +Time: 9849.757 ms (00:09.850) +Time: 139140.064 ms (02:19.140) +Time: 21797.859 ms (00:21.798) +Time: 21559.214 ms (00:21.559) +Time: 124757.485 ms (02:04.757) +Time: 8728.403 ms (00:08.728) +Time: 8714.130 ms (00:08.714) +Time: 120687.258 ms (02:00.687) +Time: 8366.245 ms (00:08.366) +Time: 8146.856 ms (00:08.147) +Time: 122327.148 ms (02:02.327) +Time: 8698.359 ms (00:08.698) +Time: 8480.807 ms (00:08.481) +Time: 123958.614 ms (02:03.959) +Time: 8595.931 ms (00:08.596) +Time: 8241.773 ms (00:08.242) +Time: 128982.905 ms (02:08.983) +Time: 11252.783 ms (00:11.253) +Time: 10957.931 ms (00:10.958) +Time: 208455.385 ms (03:28.455) +Time: 102530.897 ms (01:42.531) +Time: 102049.298 ms (01:42.049) +Time: 131268.420 ms (02:11.268) +Time: 21094.466 ms (00:21.094) +Time: 20934.610 ms (00:20.935) +Time: 164084.134 ms (02:44.084) +Time: 77418.547 ms (01:17.419) +Time: 75422.290 ms (01:15.422) +Time: 174800.022 ms (02:54.800) +Time: 87859.594 ms (01:27.860) +Time: 85733.954 ms (01:25.734) +Time: 419357.463 ms (06:59.357) +Time: 339047.269 ms (05:39.047) +Time: 334808.230 ms (05:34.808) +Time: 475011.901 ms (07:55.012) +Time: 344406.246 ms (05:44.406) +Time: 347197.731 ms (05:47.198) +Time: 464657.732 ms (07:44.658) +Time: 332084.079 ms (05:32.084) +Time: 330921.322 ms (05:30.921) +Time: 152490.615 ms (02:32.491) +Time: 30954.343 ms (00:30.954) +Time: 31379.062 ms (00:31.379) +Time: 128539.127 ms (02:08.539) +Time: 12802.672 ms (00:12.803) +Time: 12494.088 ms (00:12.494) +Time: 125850.120 ms (02:05.850) +Time: 10318.773 ms (00:10.319) +Time: 9953.030 ms (00:09.953) +Time: 126602.092 ms (02:06.602) +Time: 8935.571 ms (00:08.936) +Time: 8711.184 ms (00:08.711) +Time: 133222.456 ms (02:13.222) +Time: 11848.869 ms (00:11.849) +Time: 11752.640 ms (00:11.753) +Time: 126950.067 ms (02:06.950) +Time: 11260.892 ms (00:11.261) +Time: 10943.649 ms (00:10.944) +Time: 128451.171 ms (02:08.451) +Time: 10984.980 ms (00:10.985) +Time: 10770.609 ms (00:10.771) +Time: 124621.000 ms (02:04.621) +Time: 8885.466 ms (00:08.885) +Time: 8857.296 ms (00:08.857) diff --git a/benchmark/postgresql/queries.sql b/benchmark/postgresql/queries.sql new file mode 100644 index 00000000000..d7a2fe2d8bf --- /dev/null +++ b/benchmark/postgresql/queries.sql @@ -0,0 +1,43 @@ +SELECT count(*) FROM {table}; +SELECT count(*) FROM {table} WHERE AdvEngineID != 0; +SELECT sum(AdvEngineID), count(*), avg(ResolutionWidth) FROM {table}; +SELECT sum(UserID) FROM {table}; +SELECT COUNT(DISTINCT UserID) FROM {table}; +SELECT COUNT(DISTINCT SearchPhrase) FROM {table}; +SELECT min(EventDate), max(EventDate) FROM {table}; +SELECT AdvEngineID, count(*) FROM {table} WHERE AdvEngineID != 0 GROUP BY AdvEngineID ORDER BY count(*) DESC; +SELECT RegionID, COUNT(DISTINCT UserID) AS u FROM {table} GROUP BY RegionID ORDER BY u DESC LIMIT 10; +SELECT RegionID, sum(AdvEngineID), count(*) AS c, avg(ResolutionWidth), COUNT(DISTINCT UserID) FROM {table} GROUP BY RegionID ORDER BY c DESC LIMIT 10; +SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM {table} WHERE MobilePhoneModel != '' GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10; +SELECT MobilePhone, MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM {table} WHERE MobilePhoneModel != '' GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10; +SELECT SearchPhrase, count(*) AS c FROM {table} WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM {table} WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10; +SELECT SearchEngineID, SearchPhrase, count(*) AS c FROM {table} WHERE SearchPhrase != '' GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT UserID, count(*) FROM {table} GROUP BY UserID ORDER BY count(*) DESC LIMIT 10; +SELECT UserID, SearchPhrase, count(*) FROM {table} GROUP BY UserID, SearchPhrase ORDER BY count(*) DESC LIMIT 10; +SELECT UserID, SearchPhrase, count(*) FROM {table} GROUP BY UserID, SearchPhrase LIMIT 10; +SELECT UserID, extract(minute FROM EventTime) AS m, SearchPhrase, count(*) FROM {table} GROUP BY UserID, m, SearchPhrase ORDER BY count(*) DESC LIMIT 10; +SELECT UserID FROM {table} WHERE UserID = -6101065172474983726; +SELECT count(*) FROM {table} WHERE URL LIKE '%metrika%'; +SELECT SearchPhrase, min(URL), count(*) AS c FROM {table} WHERE URL LIKE '%metrika%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT SearchPhrase, min(URL), min(Title), count(*) AS c, COUNT(DISTINCT UserID) FROM {table} WHERE Title LIKE '%Яндекс%' AND URL NOT LIKE '%.yandex.%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT * FROM {table} WHERE URL LIKE '%metrika%' ORDER BY EventTime LIMIT 10; +SELECT SearchPhrase FROM {table} WHERE SearchPhrase != '' ORDER BY EventTime LIMIT 10; +SELECT SearchPhrase FROM {table} WHERE SearchPhrase != '' ORDER BY SearchPhrase LIMIT 10; +SELECT SearchPhrase FROM {table} WHERE SearchPhrase != '' ORDER BY EventTime, SearchPhrase LIMIT 10; +SELECT CounterID, avg(length(URL)) AS l, count(*) AS c FROM {table} WHERE URL != '' GROUP BY CounterID HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25; +SELECT REGEXP_REPLACE(Referer, '^https?://(?:www\.)?([^/]+)/.*$', '\1') AS key, avg(length(Referer)) AS l, count(*) AS c, min(Referer) FROM {table} WHERE Referer != '' GROUP BY key HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25; +SELECT sum(ResolutionWidth), sum(ResolutionWidth + 1), sum(ResolutionWidth + 2), sum(ResolutionWidth + 3), sum(ResolutionWidth + 4), sum(ResolutionWidth + 5), sum(ResolutionWidth + 6), sum(ResolutionWidth + 7), sum(ResolutionWidth + 8), sum(ResolutionWidth + 9), sum(ResolutionWidth + 10), sum(ResolutionWidth + 11), sum(ResolutionWidth + 12), sum(ResolutionWidth + 13), sum(ResolutionWidth + 14), sum(ResolutionWidth + 15), sum(ResolutionWidth + 16), sum(ResolutionWidth + 17), sum(ResolutionWidth + 18), sum(ResolutionWidth + 19), sum(ResolutionWidth + 20), sum(ResolutionWidth + 21), sum(ResolutionWidth + 22), sum(ResolutionWidth + 23), sum(ResolutionWidth + 24), sum(ResolutionWidth + 25), sum(ResolutionWidth + 26), sum(ResolutionWidth + 27), sum(ResolutionWidth + 28), sum(ResolutionWidth + 29), sum(ResolutionWidth + 30), sum(ResolutionWidth + 31), sum(ResolutionWidth + 32), sum(ResolutionWidth + 33), sum(ResolutionWidth + 34), sum(ResolutionWidth + 35), sum(ResolutionWidth + 36), sum(ResolutionWidth + 37), sum(ResolutionWidth + 38), sum(ResolutionWidth + 39), sum(ResolutionWidth + 40), sum(ResolutionWidth + 41), sum(ResolutionWidth + 42), sum(ResolutionWidth + 43), sum(ResolutionWidth + 44), sum(ResolutionWidth + 45), sum(ResolutionWidth + 46), sum(ResolutionWidth + 47), sum(ResolutionWidth + 48), sum(ResolutionWidth + 49), sum(ResolutionWidth + 50), sum(ResolutionWidth + 51), sum(ResolutionWidth + 52), sum(ResolutionWidth + 53), sum(ResolutionWidth + 54), sum(ResolutionWidth + 55), sum(ResolutionWidth + 56), sum(ResolutionWidth + 57), sum(ResolutionWidth + 58), sum(ResolutionWidth + 59), sum(ResolutionWidth + 60), sum(ResolutionWidth + 61), sum(ResolutionWidth + 62), sum(ResolutionWidth + 63), sum(ResolutionWidth + 64), sum(ResolutionWidth + 65), sum(ResolutionWidth + 66), sum(ResolutionWidth + 67), sum(ResolutionWidth + 68), sum(ResolutionWidth + 69), sum(ResolutionWidth + 70), sum(ResolutionWidth + 71), sum(ResolutionWidth + 72), sum(ResolutionWidth + 73), sum(ResolutionWidth + 74), sum(ResolutionWidth + 75), sum(ResolutionWidth + 76), sum(ResolutionWidth + 77), sum(ResolutionWidth + 78), sum(ResolutionWidth + 79), sum(ResolutionWidth + 80), sum(ResolutionWidth + 81), sum(ResolutionWidth + 82), sum(ResolutionWidth + 83), sum(ResolutionWidth + 84), sum(ResolutionWidth + 85), sum(ResolutionWidth + 86), sum(ResolutionWidth + 87), sum(ResolutionWidth + 88), sum(ResolutionWidth + 89) FROM {table}; +SELECT SearchEngineID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM {table} WHERE SearchPhrase != '' GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10; +SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM {table} WHERE SearchPhrase != '' GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM {table} GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +SELECT URL, count(*) AS c FROM {table} GROUP BY URL ORDER BY c DESC LIMIT 10; +SELECT 1, URL, count(*) AS c FROM {table} GROUP BY 1, URL ORDER BY c DESC LIMIT 10; +SELECT ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3, count(*) AS c FROM {table} GROUP BY ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3 ORDER BY c DESC LIMIT 10; +SELECT URL, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND URL != '' GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +SELECT Title, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND Title != '' GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +SELECT URL, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +SELECT TraficSourceID, SearchEngineID, AdvEngineID, CASE WHEN (SearchEngineID = 0 AND AdvEngineID = 0) THEN Referer ELSE '' END AS Src, URL AS Dst, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +SELECT URLHash, EventDate, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +SELECT WindowClientWidth, WindowClientHeight, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +SELECT DATE_TRUNC('minute', EventTime) AS "Minute", count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-02' AND "refresh" = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', EventTime) ORDER BY DATE_TRUNC('minute', EventTime); diff --git a/benchmark/timescaledb/benchmark.sh b/benchmark/timescaledb/benchmark.sh new file mode 100755 index 00000000000..691f4c42bfa --- /dev/null +++ b/benchmark/timescaledb/benchmark.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +grep -v -P '^#' queries.sql | sed -e 's/{table}/hits_100m_obfuscated/' | while read query; do + + echo 3 | sudo tee /proc/sys/vm/drop_caches + + echo "$query"; + for i in {1..3}; do + sudo -u postgres psql tutorial -t -c 'set jit = off' -c '\timing' -c "$query" | grep 'Time' | tee --append log + done; +done; diff --git a/benchmark/timescaledb/log b/benchmark/timescaledb/log new file mode 100644 index 00000000000..9c98da60612 --- /dev/null +++ b/benchmark/timescaledb/log @@ -0,0 +1,215 @@ +3 +SELECT count(*) FROM hits_100m_obfuscated; +Time: 3259.733 ms (00:03.260) +Time: 3135.484 ms (00:03.135) +Time: 3135.579 ms (00:03.136) +3 +SELECT count(*) FROM hits_100m_obfuscated WHERE AdvEngineID != 0; +Time: 146854.557 ms (02:26.855) +Time: 6921.736 ms (00:06.922) +Time: 6619.892 ms (00:06.620) +3 +SELECT sum(AdvEngineID), count(*), avg(ResolutionWidth) FROM hits_100m_obfuscated; +Time: 146568.297 ms (02:26.568) +Time: 7481.610 ms (00:07.482) +Time: 7258.209 ms (00:07.258) +3 +SELECT sum(UserID) FROM hits_100m_obfuscated; +Time: 146864.106 ms (02:26.864) +Time: 5690.024 ms (00:05.690) +Time: 5381.820 ms (00:05.382) +3 +SELECT COUNT(DISTINCT UserID) FROM hits_100m_obfuscated; +Time: 227507.331 ms (03:47.507) +Time: 69165.471 ms (01:09.165) +Time: 72216.950 ms (01:12.217) +3 +SELECT COUNT(DISTINCT SearchPhrase) FROM hits_100m_obfuscated; +Time: 323644.397 ms (05:23.644) +Time: 177578.740 ms (02:57.579) +Time: 175055.738 ms (02:55.056) +3 +SELECT min(EventDate), max(EventDate) FROM hits_100m_obfuscated; +Time: 146147.843 ms (02:26.148) +Time: 5735.128 ms (00:05.735) +Time: 5428.638 ms (00:05.429) +3 +SELECT AdvEngineID, count(*) FROM hits_100m_obfuscated WHERE AdvEngineID != 0 GROUP BY AdvEngineID ORDER BY count(*) DESC; +Time: 148658.450 ms (02:28.658) +Time: 7014.882 ms (00:07.015) +Time: 6599.736 ms (00:06.600) +3 +SELECT RegionID, COUNT(DISTINCT UserID) AS u FROM hits_100m_obfuscated GROUP BY RegionID ORDER BY u DESC LIMIT 10; +Time: 202423.122 ms (03:22.423) +Time: 54439.047 ms (00:54.439) +Time: 54800.354 ms (00:54.800) +3 +SELECT RegionID, sum(AdvEngineID), count(*) AS c, avg(ResolutionWidth), COUNT(DISTINCT UserID) FROM hits_100m_obfuscated GROUP BY RegionID ORDER BY c DESC LIMIT 10; +Time: 201152.491 ms (03:21.152) +Time: 55875.854 ms (00:55.876) +Time: 55200.330 ms (00:55.200) +3 +SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits_100m_obfuscated WHERE MobilePhoneModel != '' GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10; +Time: 146042.603 ms (02:26.043) +Time: 9931.633 ms (00:09.932) +Time: 10037.032 ms (00:10.037) +3 +SELECT MobilePhone, MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits_100m_obfuscated WHERE MobilePhoneModel != '' GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10; +Time: 150811.952 ms (02:30.812) +Time: 10320.230 ms (00:10.320) +Time: 9993.232 ms (00:09.993) +3 +SELECT SearchPhrase, count(*) AS c FROM hits_100m_obfuscated WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +Time: 173071.218 ms (02:53.071) +Time: 34314.835 ms (00:34.315) +Time: 34420.919 ms (00:34.421) +3 +SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits_100m_obfuscated WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10; +Time: 172874.155 ms (02:52.874) +Time: 43704.494 ms (00:43.704) +Time: 43918.380 ms (00:43.918) +3 +SELECT SearchEngineID, SearchPhrase, count(*) AS c FROM hits_100m_obfuscated WHERE SearchPhrase != '' GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10; +Time: 178484.822 ms (02:58.485) +Time: 36850.436 ms (00:36.850) +Time: 35789.029 ms (00:35.789) +3 +SELECT UserID, count(*) FROM hits_100m_obfuscated GROUP BY UserID ORDER BY count(*) DESC LIMIT 10; +Time: 169720.759 ms (02:49.721) +Time: 24125.730 ms (00:24.126) +Time: 23782.745 ms (00:23.783) +3 +SELECT UserID, SearchPhrase, count(*) FROM hits_100m_obfuscated GROUP BY UserID, SearchPhrase ORDER BY count(*) DESC LIMIT 10; +Time: 182335.631 ms (03:02.336) +Time: 37324.563 ms (00:37.325) +Time: 37124.250 ms (00:37.124) +3 +SELECT UserID, SearchPhrase, count(*) FROM hits_100m_obfuscated GROUP BY UserID, SearchPhrase LIMIT 10; +Time: 163799.714 ms (02:43.800) +Time: 18514.031 ms (00:18.514) +Time: 18968.524 ms (00:18.969) +3 +SELECT UserID, extract(minute FROM EventTime) AS m, SearchPhrase, count(*) FROM hits_100m_obfuscated GROUP BY UserID, m, SearchPhrase ORDER BY count(*) DESC LIMIT 10; +Time: 294799.480 ms (04:54.799) +Time: 149592.992 ms (02:29.593) +Time: 149466.291 ms (02:29.466) +3 +SELECT UserID FROM hits_100m_obfuscated WHERE UserID = -6101065172474983726; +Time: 140797.496 ms (02:20.797) +Time: 5312.321 ms (00:05.312) +Time: 5020.502 ms (00:05.021) +3 +SELECT count(*) FROM hits_100m_obfuscated WHERE URL LIKE '%metrika%'; +Time: 143092.287 ms (02:23.092) +Time: 7893.874 ms (00:07.894) +Time: 7661.326 ms (00:07.661) +3 +SELECT SearchPhrase, min(URL), count(*) AS c FROM hits_100m_obfuscated WHERE URL LIKE '%metrika%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +Time: 143682.424 ms (02:23.682) +Time: 9249.962 ms (00:09.250) +Time: 9073.876 ms (00:09.074) +3 +SELECT SearchPhrase, min(URL), min(Title), count(*) AS c, COUNT(DISTINCT UserID) FROM hits_100m_obfuscated WHERE Title LIKE '%Яндекс%' AND URL NOT LIKE '%.yandex.%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +Time: 150965.884 ms (02:30.966) +Time: 20350.812 ms (00:20.351) +Time: 20074.939 ms (00:20.075) +3 +SELECT * FROM hits_100m_obfuscated WHERE URL LIKE '%metrika%' ORDER BY EventTime LIMIT 10; +Time: 4674.669 ms (00:04.675) +Time: 4532.389 ms (00:04.532) +Time: 4555.457 ms (00:04.555) +3 +SELECT SearchPhrase FROM hits_100m_obfuscated WHERE SearchPhrase != '' ORDER BY EventTime LIMIT 10; +Time: 5.177 ms +Time: 5.031 ms +Time: 4.419 ms +3 +SELECT SearchPhrase FROM hits_100m_obfuscated WHERE SearchPhrase != '' ORDER BY SearchPhrase LIMIT 10; +Time: 141152.210 ms (02:21.152) +Time: 7492.968 ms (00:07.493) +Time: 7300.428 ms (00:07.300) +3 +SELECT SearchPhrase FROM hits_100m_obfuscated WHERE SearchPhrase != '' ORDER BY EventTime, SearchPhrase LIMIT 10; +Time: 30.736 ms +Time: 5.018 ms +Time: 5.132 ms +3 +SELECT CounterID, avg(length(URL)) AS l, count(*) AS c FROM hits_100m_obfuscated WHERE URL != '' GROUP BY CounterID HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25; +Time: 144034.016 ms (02:24.034) +Time: 10701.672 ms (00:10.702) +Time: 10348.565 ms (00:10.349) +3 +SELECT REGEXP_REPLACE(Referer, '^https?://(?:www.)?([^/]+)/.*$', '1') AS key, avg(length(Referer)) AS l, count(*) AS c, min(Referer) FROM hits_100m_obfuscated WHERE Referer != '' GROUP BY key HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25; +Time: 191575.080 ms (03:11.575) +Time: 97836.706 ms (01:37.837) +Time: 97673.219 ms (01:37.673) +3 +SELECT sum(ResolutionWidth), sum(ResolutionWidth + 1), sum(ResolutionWidth + 2), sum(ResolutionWidth + 3), sum(ResolutionWidth + 4), sum(ResolutionWidth + 5), sum(ResolutionWidth + 6), sum(ResolutionWidth + 7), sum(ResolutionWidth + 8), sum(ResolutionWidth + 9), sum(ResolutionWidth + 10), sum(ResolutionWidth + 11), sum(ResolutionWidth + 12), sum(ResolutionWidth + 13), sum(ResolutionWidth + 14), sum(ResolutionWidth + 15), sum(ResolutionWidth + 16), sum(ResolutionWidth + 17), sum(ResolutionWidth + 18), sum(ResolutionWidth + 19), sum(ResolutionWidth + 20), sum(ResolutionWidth + 21), sum(ResolutionWidth + 22), sum(ResolutionWidth + 23), sum(ResolutionWidth + 24), sum(ResolutionWidth + 25), sum(ResolutionWidth + 26), sum(ResolutionWidth + 27), sum(ResolutionWidth + 28), sum(ResolutionWidth + 29), sum(ResolutionWidth + 30), sum(ResolutionWidth + 31), sum(ResolutionWidth + 32), sum(ResolutionWidth + 33), sum(ResolutionWidth + 34), sum(ResolutionWidth + 35), sum(ResolutionWidth + 36), sum(ResolutionWidth + 37), sum(ResolutionWidth + 38), sum(ResolutionWidth + 39), sum(ResolutionWidth + 40), sum(ResolutionWidth + 41), sum(ResolutionWidth + 42), sum(ResolutionWidth + 43), sum(ResolutionWidth + 44), sum(ResolutionWidth + 45), sum(ResolutionWidth + 46), sum(ResolutionWidth + 47), sum(ResolutionWidth + 48), sum(ResolutionWidth + 49), sum(ResolutionWidth + 50), sum(ResolutionWidth + 51), sum(ResolutionWidth + 52), sum(ResolutionWidth + 53), sum(ResolutionWidth + 54), sum(ResolutionWidth + 55), sum(ResolutionWidth + 56), sum(ResolutionWidth + 57), sum(ResolutionWidth + 58), sum(ResolutionWidth + 59), sum(ResolutionWidth + 60), sum(ResolutionWidth + 61), sum(ResolutionWidth + 62), sum(ResolutionWidth + 63), sum(ResolutionWidth + 64), sum(ResolutionWidth + 65), sum(ResolutionWidth + 66), sum(ResolutionWidth + 67), sum(ResolutionWidth + 68), sum(ResolutionWidth + 69), sum(ResolutionWidth + 70), sum(ResolutionWidth + 71), sum(ResolutionWidth + 72), sum(ResolutionWidth + 73), sum(ResolutionWidth + 74), sum(ResolutionWidth + 75), sum(ResolutionWidth + 76), sum(ResolutionWidth + 77), sum(ResolutionWidth + 78), sum(ResolutionWidth + 79), sum(ResolutionWidth + 80), sum(ResolutionWidth + 81), sum(ResolutionWidth + 82), sum(ResolutionWidth + 83), sum(ResolutionWidth + 84), sum(ResolutionWidth + 85), sum(ResolutionWidth + 86), sum(ResolutionWidth + 87), sum(ResolutionWidth + 88), sum(ResolutionWidth + 89) FROM hits_100m_obfuscated; +Time: 143652.317 ms (02:23.652) +Time: 22185.656 ms (00:22.186) +Time: 21887.411 ms (00:21.887) +3 +SELECT SearchEngineID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits_100m_obfuscated WHERE SearchPhrase != '' GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10; +Time: 153481.944 ms (02:33.482) +Time: 17748.628 ms (00:17.749) +Time: 17551.116 ms (00:17.551) +3 +SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits_100m_obfuscated WHERE SearchPhrase != '' GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +Time: 167448.684 ms (02:47.449) +Time: 25902.961 ms (00:25.903) +Time: 25592.018 ms (00:25.592) +3 +SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM hits_100m_obfuscated GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +Time: 299183.443 ms (04:59.183) +Time: 145349.772 ms (02:25.350) +Time: 143214.688 ms (02:23.215) +3 +SELECT URL, count(*) AS c FROM hits_100m_obfuscated GROUP BY URL ORDER BY c DESC LIMIT 10; +Time: 389851.369 ms (06:29.851) +Time: 228158.639 ms (03:48.159) +Time: 231811.118 ms (03:51.811) +3 +SELECT 1, URL, count(*) AS c FROM hits_100m_obfuscated GROUP BY 1, URL ORDER BY c DESC LIMIT 10; +Time: 407458.343 ms (06:47.458) +Time: 230125.530 ms (03:50.126) +Time: 230764.511 ms (03:50.765) +3 +SELECT ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3, count(*) AS c FROM hits_100m_obfuscated GROUP BY ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3 ORDER BY c DESC LIMIT 10; +Time: 174098.556 ms (02:54.099) +Time: 23503.975 ms (00:23.504) +Time: 24322.856 ms (00:24.323) +3 +SELECT URL, count(*) AS PageViews FROM hits_100m_obfuscated WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND URL != '' GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +Time: 145906.025 ms (02:25.906) +Time: 10824.695 ms (00:10.825) +Time: 10484.885 ms (00:10.485) +3 +SELECT Title, count(*) AS PageViews FROM hits_100m_obfuscated WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND Title != '' GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +Time: 144063.711 ms (02:24.064) +Time: 8947.980 ms (00:08.948) +Time: 8608.434 ms (00:08.608) +3 +SELECT URL, count(*) AS PageViews FROM hits_100m_obfuscated WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +Time: 141883.596 ms (02:21.884) +Time: 7977.257 ms (00:07.977) +Time: 7673.547 ms (00:07.674) +3 +SELECT TraficSourceID, SearchEngineID, AdvEngineID, CASE WHEN (SearchEngineID = 0 AND AdvEngineID = 0) THEN Referer ELSE '' END AS Src, URL AS Dst, count(*) AS PageViews FROM hits_100m_obfuscated WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +Time: 147100.084 ms (02:27.100) +Time: 9527.812 ms (00:09.528) +Time: 9457.663 ms (00:09.458) +3 +SELECT URLHash, EventDate, count(*) AS PageViews FROM hits_100m_obfuscated WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +Time: 144585.669 ms (02:24.586) +Time: 10815.223 ms (00:10.815) +Time: 10594.707 ms (00:10.595) +3 +SELECT WindowClientWidth, WindowClientHeight, count(*) AS PageViews FROM hits_100m_obfuscated WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +Time: 145738.341 ms (02:25.738) +Time: 10592.979 ms (00:10.593) +Time: 10181.477 ms (00:10.181) +3 +SELECT DATE_TRUNC('minute', EventTime) AS "Minute", count(*) AS PageViews FROM hits_100m_obfuscated WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-02' AND "refresh" = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', EventTime) ORDER BY DATE_TRUNC('minute', EventTime); +Time: 145023.796 ms (02:25.024) +Time: 8035.337 ms (00:08.035) +Time: 7865.698 ms (00:07.866) diff --git a/benchmark/timescaledb/log_compressed b/benchmark/timescaledb/log_compressed new file mode 100644 index 00000000000..235f659791f --- /dev/null +++ b/benchmark/timescaledb/log_compressed @@ -0,0 +1,129 @@ +Time: 1784.299 ms (00:01.784) +Time: 1223.461 ms (00:01.223) +Time: 1200.665 ms (00:01.201) +Time: 22730.141 ms (00:22.730) +Time: 1379.227 ms (00:01.379) +Time: 1361.595 ms (00:01.362) +Time: 29888.235 ms (00:29.888) +Time: 3160.611 ms (00:03.161) +Time: 3207.363 ms (00:03.207) +Time: 53922.569 ms (00:53.923) +Time: 2301.456 ms (00:02.301) +Time: 2277.009 ms (00:02.277) +Time: 45363.999 ms (00:45.364) +Time: 43765.848 ms (00:43.766) +Time: 44066.621 ms (00:44.067) +Time: 172945.633 ms (02:52.946) +Time: 136944.098 ms (02:16.944) +Time: 138268.413 ms (02:18.268) +Time: 16764.579 ms (00:16.765) +Time: 2579.907 ms (00:02.580) +Time: 2590.390 ms (00:02.590) +Time: 1498.034 ms (00:01.498) +Time: 1434.534 ms (00:01.435) +Time: 1448.123 ms (00:01.448) +Time: 113533.016 ms (01:53.533) +Time: 78465.335 ms (01:18.465) +Time: 80778.839 ms (01:20.779) +Time: 90456.388 ms (01:30.456) +Time: 87050.166 ms (01:27.050) +Time: 88426.851 ms (01:28.427) +Time: 45021.632 ms (00:45.022) +Time: 12486.342 ms (00:12.486) +Time: 12222.489 ms (00:12.222) +Time: 44246.843 ms (00:44.247) +Time: 15606.856 ms (00:15.607) +Time: 15251.554 ms (00:15.252) +Time: 29654.719 ms (00:29.655) +Time: 29441.858 ms (00:29.442) +Time: 29608.141 ms (00:29.608) +Time: 103547.383 ms (01:43.547) +Time: 104733.648 ms (01:44.734) +Time: 105779.016 ms (01:45.779) +Time: 29695.834 ms (00:29.696) +Time: 15395.447 ms (00:15.395) +Time: 15819.650 ms (00:15.820) +Time: 27841.552 ms (00:27.842) +Time: 29521.849 ms (00:29.522) +Time: 27508.521 ms (00:27.509) +Time: 56665.709 ms (00:56.666) +Time: 56459.321 ms (00:56.459) +Time: 56407.620 ms (00:56.408) +Time: 27488.888 ms (00:27.489) +Time: 25557.427 ms (00:25.557) +Time: 25634.140 ms (00:25.634) +Time: 97376.463 ms (01:37.376) +Time: 96047.902 ms (01:36.048) +Time: 99918.341 ms (01:39.918) +Time: 6294.887 ms (00:06.295) +Time: 6407.262 ms (00:06.407) +Time: 6376.369 ms (00:06.376) +Time: 40787.808 ms (00:40.788) +Time: 11206.256 ms (00:11.206) +Time: 11219.871 ms (00:11.220) +Time: 12420.227 ms (00:12.420) +Time: 12548.301 ms (00:12.548) +Time: 12468.458 ms (00:12.468) +Time: 57679.878 ms (00:57.680) +Time: 35466.123 ms (00:35.466) +Time: 35562.064 ms (00:35.562) +Time: 13551.276 ms (00:13.551) +Time: 13417.313 ms (00:13.417) +Time: 13645.287 ms (00:13.645) +Time: 150.297 ms +Time: 55.995 ms +Time: 55.796 ms +Time: 3059.796 ms (00:03.060) +Time: 3038.246 ms (00:03.038) +Time: 3041.210 ms (00:03.041) +Time: 4461.720 ms (00:04.462) +Time: 4446.691 ms (00:04.447) +Time: 4424.526 ms (00:04.425) +Time: 29275.463 ms (00:29.275) +Time: 17558.747 ms (00:17.559) +Time: 17438.621 ms (00:17.439) +Time: 203316.184 ms (03:23.316) +Time: 190037.946 ms (03:10.038) +Time: 189276.624 ms (03:09.277) +Time: 36921.542 ms (00:36.922) +Time: 36963.771 ms (00:36.964) +Time: 36660.406 ms (00:36.660) +Time: 38307.345 ms (00:38.307) +Time: 17597.355 ms (00:17.597) +Time: 17324.776 ms (00:17.325) +Time: 39857.567 ms (00:39.858) +Time: 26776.411 ms (00:26.776) +Time: 26592.819 ms (00:26.593) +Time: 162782.290 ms (02:42.782) +Time: 160722.582 ms (02:40.723) +Time: 162487.263 ms (02:42.487) +Time: 261494.290 ms (04:21.494) +Time: 263594.014 ms (04:23.594) +Time: 260436.201 ms (04:20.436) +Time: 265758.455 ms (04:25.758) +Time: 270087.523 ms (04:30.088) +Time: 266617.218 ms (04:26.617) +Time: 30677.159 ms (00:30.677) +Time: 28933.542 ms (00:28.934) +Time: 29815.271 ms (00:29.815) +Time: 19754.932 ms (00:19.755) +Time: 16851.157 ms (00:16.851) +Time: 16703.289 ms (00:16.703) +Time: 10379.500 ms (00:10.379) +Time: 10267.336 ms (00:10.267) +Time: 10287.944 ms (00:10.288) +Time: 17320.582 ms (00:17.321) +Time: 9786.410 ms (00:09.786) +Time: 9760.578 ms (00:09.761) +Time: 33487.352 ms (00:33.487) +Time: 26056.528 ms (00:26.057) +Time: 25958.258 ms (00:25.958) +Time: 28020.227 ms (00:28.020) +Time: 5609.725 ms (00:05.610) +Time: 5538.744 ms (00:05.539) +Time: 15119.473 ms (00:15.119) +Time: 5057.455 ms (00:05.057) +Time: 5063.154 ms (00:05.063) +Time: 3627.703 ms (00:03.628) +Time: 3645.232 ms (00:03.645) +Time: 3546.855 ms (00:03.547) diff --git a/benchmark/timescaledb/queries.sql b/benchmark/timescaledb/queries.sql new file mode 100644 index 00000000000..d7a2fe2d8bf --- /dev/null +++ b/benchmark/timescaledb/queries.sql @@ -0,0 +1,43 @@ +SELECT count(*) FROM {table}; +SELECT count(*) FROM {table} WHERE AdvEngineID != 0; +SELECT sum(AdvEngineID), count(*), avg(ResolutionWidth) FROM {table}; +SELECT sum(UserID) FROM {table}; +SELECT COUNT(DISTINCT UserID) FROM {table}; +SELECT COUNT(DISTINCT SearchPhrase) FROM {table}; +SELECT min(EventDate), max(EventDate) FROM {table}; +SELECT AdvEngineID, count(*) FROM {table} WHERE AdvEngineID != 0 GROUP BY AdvEngineID ORDER BY count(*) DESC; +SELECT RegionID, COUNT(DISTINCT UserID) AS u FROM {table} GROUP BY RegionID ORDER BY u DESC LIMIT 10; +SELECT RegionID, sum(AdvEngineID), count(*) AS c, avg(ResolutionWidth), COUNT(DISTINCT UserID) FROM {table} GROUP BY RegionID ORDER BY c DESC LIMIT 10; +SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM {table} WHERE MobilePhoneModel != '' GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10; +SELECT MobilePhone, MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM {table} WHERE MobilePhoneModel != '' GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10; +SELECT SearchPhrase, count(*) AS c FROM {table} WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM {table} WHERE SearchPhrase != '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10; +SELECT SearchEngineID, SearchPhrase, count(*) AS c FROM {table} WHERE SearchPhrase != '' GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT UserID, count(*) FROM {table} GROUP BY UserID ORDER BY count(*) DESC LIMIT 10; +SELECT UserID, SearchPhrase, count(*) FROM {table} GROUP BY UserID, SearchPhrase ORDER BY count(*) DESC LIMIT 10; +SELECT UserID, SearchPhrase, count(*) FROM {table} GROUP BY UserID, SearchPhrase LIMIT 10; +SELECT UserID, extract(minute FROM EventTime) AS m, SearchPhrase, count(*) FROM {table} GROUP BY UserID, m, SearchPhrase ORDER BY count(*) DESC LIMIT 10; +SELECT UserID FROM {table} WHERE UserID = -6101065172474983726; +SELECT count(*) FROM {table} WHERE URL LIKE '%metrika%'; +SELECT SearchPhrase, min(URL), count(*) AS c FROM {table} WHERE URL LIKE '%metrika%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT SearchPhrase, min(URL), min(Title), count(*) AS c, COUNT(DISTINCT UserID) FROM {table} WHERE Title LIKE '%Яндекс%' AND URL NOT LIKE '%.yandex.%' AND SearchPhrase != '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10; +SELECT * FROM {table} WHERE URL LIKE '%metrika%' ORDER BY EventTime LIMIT 10; +SELECT SearchPhrase FROM {table} WHERE SearchPhrase != '' ORDER BY EventTime LIMIT 10; +SELECT SearchPhrase FROM {table} WHERE SearchPhrase != '' ORDER BY SearchPhrase LIMIT 10; +SELECT SearchPhrase FROM {table} WHERE SearchPhrase != '' ORDER BY EventTime, SearchPhrase LIMIT 10; +SELECT CounterID, avg(length(URL)) AS l, count(*) AS c FROM {table} WHERE URL != '' GROUP BY CounterID HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25; +SELECT REGEXP_REPLACE(Referer, '^https?://(?:www\.)?([^/]+)/.*$', '\1') AS key, avg(length(Referer)) AS l, count(*) AS c, min(Referer) FROM {table} WHERE Referer != '' GROUP BY key HAVING count(*) > 100000 ORDER BY l DESC LIMIT 25; +SELECT sum(ResolutionWidth), sum(ResolutionWidth + 1), sum(ResolutionWidth + 2), sum(ResolutionWidth + 3), sum(ResolutionWidth + 4), sum(ResolutionWidth + 5), sum(ResolutionWidth + 6), sum(ResolutionWidth + 7), sum(ResolutionWidth + 8), sum(ResolutionWidth + 9), sum(ResolutionWidth + 10), sum(ResolutionWidth + 11), sum(ResolutionWidth + 12), sum(ResolutionWidth + 13), sum(ResolutionWidth + 14), sum(ResolutionWidth + 15), sum(ResolutionWidth + 16), sum(ResolutionWidth + 17), sum(ResolutionWidth + 18), sum(ResolutionWidth + 19), sum(ResolutionWidth + 20), sum(ResolutionWidth + 21), sum(ResolutionWidth + 22), sum(ResolutionWidth + 23), sum(ResolutionWidth + 24), sum(ResolutionWidth + 25), sum(ResolutionWidth + 26), sum(ResolutionWidth + 27), sum(ResolutionWidth + 28), sum(ResolutionWidth + 29), sum(ResolutionWidth + 30), sum(ResolutionWidth + 31), sum(ResolutionWidth + 32), sum(ResolutionWidth + 33), sum(ResolutionWidth + 34), sum(ResolutionWidth + 35), sum(ResolutionWidth + 36), sum(ResolutionWidth + 37), sum(ResolutionWidth + 38), sum(ResolutionWidth + 39), sum(ResolutionWidth + 40), sum(ResolutionWidth + 41), sum(ResolutionWidth + 42), sum(ResolutionWidth + 43), sum(ResolutionWidth + 44), sum(ResolutionWidth + 45), sum(ResolutionWidth + 46), sum(ResolutionWidth + 47), sum(ResolutionWidth + 48), sum(ResolutionWidth + 49), sum(ResolutionWidth + 50), sum(ResolutionWidth + 51), sum(ResolutionWidth + 52), sum(ResolutionWidth + 53), sum(ResolutionWidth + 54), sum(ResolutionWidth + 55), sum(ResolutionWidth + 56), sum(ResolutionWidth + 57), sum(ResolutionWidth + 58), sum(ResolutionWidth + 59), sum(ResolutionWidth + 60), sum(ResolutionWidth + 61), sum(ResolutionWidth + 62), sum(ResolutionWidth + 63), sum(ResolutionWidth + 64), sum(ResolutionWidth + 65), sum(ResolutionWidth + 66), sum(ResolutionWidth + 67), sum(ResolutionWidth + 68), sum(ResolutionWidth + 69), sum(ResolutionWidth + 70), sum(ResolutionWidth + 71), sum(ResolutionWidth + 72), sum(ResolutionWidth + 73), sum(ResolutionWidth + 74), sum(ResolutionWidth + 75), sum(ResolutionWidth + 76), sum(ResolutionWidth + 77), sum(ResolutionWidth + 78), sum(ResolutionWidth + 79), sum(ResolutionWidth + 80), sum(ResolutionWidth + 81), sum(ResolutionWidth + 82), sum(ResolutionWidth + 83), sum(ResolutionWidth + 84), sum(ResolutionWidth + 85), sum(ResolutionWidth + 86), sum(ResolutionWidth + 87), sum(ResolutionWidth + 88), sum(ResolutionWidth + 89) FROM {table}; +SELECT SearchEngineID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM {table} WHERE SearchPhrase != '' GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10; +SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM {table} WHERE SearchPhrase != '' GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +SELECT WatchID, ClientIP, count(*) AS c, sum("refresh"), avg(ResolutionWidth) FROM {table} GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10; +SELECT URL, count(*) AS c FROM {table} GROUP BY URL ORDER BY c DESC LIMIT 10; +SELECT 1, URL, count(*) AS c FROM {table} GROUP BY 1, URL ORDER BY c DESC LIMIT 10; +SELECT ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3, count(*) AS c FROM {table} GROUP BY ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3 ORDER BY c DESC LIMIT 10; +SELECT URL, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND URL != '' GROUP BY URL ORDER BY PageViews DESC LIMIT 10; +SELECT Title, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND "refresh" = 0 AND Title != '' GROUP BY Title ORDER BY PageViews DESC LIMIT 10; +SELECT URL, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND IsLink != 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 1000; +SELECT TraficSourceID, SearchEngineID, AdvEngineID, CASE WHEN (SearchEngineID = 0 AND AdvEngineID = 0) THEN Referer ELSE '' END AS Src, URL AS Dst, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 1000; +SELECT URLHash, EventDate, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 686716256552154761 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 100; +SELECT WindowClientWidth, WindowClientHeight, count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND "refresh" = 0 AND DontCountHits = 0 AND URLHash = 686716256552154761 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10000; +SELECT DATE_TRUNC('minute', EventTime) AS "Minute", count(*) AS PageViews FROM {table} WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-02' AND "refresh" = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', EventTime) ORDER BY DATE_TRUNC('minute', EventTime); diff --git a/benchmark/timescaledb/usability.md b/benchmark/timescaledb/usability.md new file mode 100644 index 00000000000..6914dc24118 --- /dev/null +++ b/benchmark/timescaledb/usability.md @@ -0,0 +1,1663 @@ +This is a "usability testing" of TimescaleDB. I did not use TimescaleDB before. I will try to install it, load the data and conduct benchmarks. And record every obstacle that I will face. +Usability testing need to be conducted by the most clueless person in the room. Doing this "usability testing" requires a bit of patience and courage (to publish all the struggles as is). + +Note: insted of using clear VM, I have to run benchmark on exactly the same baremetal server where all other benchmarks were run. + + +## Installation + +Install as following: +https://docs.timescale.com/timescaledb/latest/how-to-guides/install-timescaledb/self-hosted/ubuntu/installation-apt-ubuntu/#installation-apt-ubuntu + +I've noticed that TimescaleDB documentation website does not have favicon in contrast to the main page. +In other means, it is quite neat. + +``` +sudo apt install postgresql-common +sudo sh /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh +sudo sh -c "echo 'deb [signed-by=/usr/share/keyrings/timescale.keyring] https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main' > /etc/apt/sources.list.d/timescaledb.list" +wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/timescale.keyring +sudo apt-get update +sudo apt install timescaledb-2-postgresql-13 +``` + +It recommends to tune it: + +``` +sudo apt install timescaledb-tune + +sudo timescaledb-tune --quiet --yes +Using postgresql.conf at this path: +/etc/postgresql/13/main/postgresql.conf + +Writing backup to: +/tmp/timescaledb_tune.backup202110292328 + +Recommendations based on 125.88 GB of available memory and 32 CPUs for PostgreSQL 13 +shared_preload_libraries = 'timescaledb' # (change requires restart) +shared_buffers = 32226MB +effective_cache_size = 96678MB +maintenance_work_mem = 2047MB +work_mem = 10312kB +timescaledb.max_background_workers = 8 +max_worker_processes = 43 +max_parallel_workers_per_gather = 16 +max_parallel_workers = 32 +wal_buffers = 16MB +min_wal_size = 512MB +default_statistics_target = 500 +random_page_cost = 1.1 +checkpoint_completion_target = 0.9 +max_locks_per_transaction = 512 +autovacuum_max_workers = 10 +autovacuum_naptime = 10 +effective_io_concurrency = 256 +timescaledb.last_tuned = '2021-10-29T23:28:49+03:00' +timescaledb.last_tuned_version = '0.12.0' +Saving changes to: /etc/postgresql/13/main/postgresql.conf +``` + +``` +sudo service postgresql restart +``` + +Post-install setup: +https://docs.timescale.com/timescaledb/latest/how-to-guides/install-timescaledb/post-install-setup/ + +``` +$ psql -U postgres -h localhost +Password for user postgres: +psql: error: connection to server at "localhost" (::1), port 5432 failed: fe_sendauth: no password supplied +``` + +How to set up password? + +``` +milovidov@mtlog-perftest03j:~$ psql -U postgres -h localhost +Password for user postgres: +psql: error: connection to server at "localhost" (::1), port 5432 failed: fe_sendauth: no password supplied +milovidov@mtlog-perftest03j:~$ psql +psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "milovidov" does not exist +milovidov@mtlog-perftest03j:~$ sudo psql +psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "root" does not exist +milovidov@mtlog-perftest03j:~$ psql -U postgres +psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "postgres" +milovidov@mtlog-perftest03j:~$ psql -U postgres -h localost +psql: error: could not translate host name "localost" to address: Name or service not known +milovidov@mtlog-perftest03j:~$ sudo psql -U postgres -h localost +psql: error: could not translate host name "localost" to address: Name or service not known +milovidov@mtlog-perftest03j:~$ sudo psql -U postgres -h localhost +Password for user postgres: +psql: error: connection to server at "localhost" (::1), port 5432 failed: fe_sendauth: no password supplied +milovidov@mtlog-perftest03j:~$ sudo -u postgres psql -h localhost +Password for user postgres: +psql: error: connection to server at "localhost" (::1), port 5432 failed: fe_sendauth: no password supplied +``` + +I found an answer here: https://stackoverflow.com/questions/12720967/how-to-change-postgresql-user-password + +``` +$ sudo -u postgres psql +psql (13.4 (Ubuntu 13.4-4.pgdg18.04+1), server 9.5.25) +Type "help" for help. + +postgres=# \password postgres +Enter new password: +Enter it again: +postgres=# + +CREATE database tutorial; + +postgres=# CREATE EXTENSION IF NOT EXISTS timescaledb; +ERROR: could not open extension control file "/usr/share/postgresql/9.5/extension/timescaledb.control": No such file or directory +``` + +Looks like I have old PostgreSQL. + +``` +$ ls -l /usr/share/postgresql/ +10/ 11/ 13/ 9.5/ +``` + +But there is also newer PostgreSQL. + +``` +$ psql --version +psql (PostgreSQL) 13.4 (Ubuntu 13.4-4.pgdg18.04+1) + +psql is new, so what is wrong? +``` + +Looks like I have all versions running simultaneously? + +https://askubuntu.com/questions/17823/how-to-list-all-installed-packages + +``` +$ ps auxw | grep postgres +postgres 718818 0.0 0.5 33991600 730184 ? Ss 23:29 0:00 /usr/lib/postgresql/13/bin/postgres -D /var/lib/postgresql/13/main -c config_file=/etc/postgresql/13/main/postgresql.conf +postgres 718825 0.0 0.0 320356 27660 ? S 23:29 0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf +postgres 718826 0.0 0.0 320712 27900 ? S 23:29 0:00 /usr/lib/postgresql/11/bin/postgres -D /var/lib/postgresql/11/main -c config_file=/etc/postgresql/11/main/postgresql.conf +postgres 718829 0.0 0.0 320468 7092 ? Ss 23:29 0:00 postgres: 10/main: checkpointer process +postgres 718830 0.0 0.0 320356 4300 ? Ss 23:29 0:00 postgres: 10/main: writer process +postgres 718831 0.0 0.0 320356 9204 ? Ss 23:29 0:00 postgres: 10/main: wal writer process +postgres 718832 0.0 0.0 320776 6964 ? Ss 23:29 0:00 postgres: 10/main: autovacuum launcher process +postgres 718833 0.0 0.0 175404 3596 ? Ss 23:29 0:00 postgres: 10/main: stats collector process +postgres 718834 0.0 0.0 320640 5052 ? Ss 23:29 0:00 postgres: 10/main: bgworker: logical replication launcher +postgres 718835 0.0 0.0 320820 5592 ? Ss 23:29 0:00 postgres: 11/main: checkpointer +postgres 718836 0.0 0.0 320712 4164 ? Ss 23:29 0:00 postgres: 11/main: background writer +postgres 718837 0.0 0.0 320712 9040 ? Ss 23:29 0:00 postgres: 11/main: walwriter +postgres 718838 0.0 0.0 321116 6824 ? Ss 23:29 0:00 postgres: 11/main: autovacuum launcher +postgres 718839 0.0 0.0 175752 3652 ? Ss 23:29 0:00 postgres: 11/main: stats collector +postgres 718840 0.0 0.0 321120 6640 ? Ss 23:29 0:00 postgres: 11/main: logical replication launcher +postgres 718842 0.0 0.1 33991700 263860 ? Ss 23:29 0:00 postgres: 13/main: checkpointer +postgres 718843 0.0 0.2 33991600 264096 ? Ss 23:29 0:00 postgres: 13/main: background writer +postgres 718844 0.0 0.0 33991600 22044 ? Ss 23:29 0:00 postgres: 13/main: walwriter +postgres 718845 0.0 0.0 33992284 7040 ? Ss 23:29 0:00 postgres: 13/main: autovacuum launcher +postgres 718846 0.0 0.0 177920 4320 ? Ss 23:29 0:00 postgres: 13/main: stats collector +postgres 718847 0.0 0.0 33992136 7972 ? Ss 23:29 0:00 postgres: 13/main: TimescaleDB Background Worker Launcher +postgres 718848 0.0 0.0 33992164 7248 ? Ss 23:29 0:00 postgres: 13/main: logical replication launcher +postgres 718857 0.0 0.0 304492 26284 ? S 23:29 0:00 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.5/main -c config_file=/etc/postgresql/9.5/main/postgresql.conf +postgres 718859 0.0 0.0 304592 6480 ? Ss 23:29 0:00 postgres: checkpointer process +postgres 718860 0.0 0.0 304492 5656 ? Ss 23:29 0:00 postgres: writer process +postgres 718861 0.0 0.0 304492 4144 ? Ss 23:29 0:00 postgres: wal writer process +postgres 718862 0.0 0.0 304928 6896 ? Ss 23:29 0:00 postgres: autovacuum launcher process +postgres 718863 0.0 0.0 159744 4156 ? Ss 23:29 0:00 postgres: stats collector process +milovid+ 724277 0.0 0.0 14364 1024 pts/17 S+ 23:41 0:00 grep --color=auto postgres + +$ apt list --installed | grep postgres + +WARNING: apt does not have a stable CLI interface. Use with caution in scripts. + +postgresql-10/now 10.16-1.pgdg18.04+1 amd64 [installed,upgradable to: 10.18-1.pgdg18.04+1] +postgresql-11/now 11.11-1.pgdg18.04+1 amd64 [installed,upgradable to: 11.13-1.pgdg18.04+1] +postgresql-11-postgis-3/now 3.1.1+dfsg-1.pgdg18.04+1 amd64 [installed,upgradable to: 3.1.4+dfsg-1.pgdg18.04+1] +postgresql-11-postgis-3-scripts/now 3.1.1+dfsg-1.pgdg18.04+1 all [installed,upgradable to: 3.1.4+dfsg-1.pgdg18.04+1] +postgresql-13/bionic-pgdg,now 13.4-4.pgdg18.04+1 amd64 [installed,automatic] +postgresql-9.5/bionic-pgdg,now 9.5.25-1.pgdg18.04+1 amd64 [installed] +postgresql-9.5-postgis-2.2-scripts/now 2.2.2+dfsg-4.pgdg14.04+1.yandex all [installed,local] +postgresql-client-10/now 10.16-1.pgdg18.04+1 amd64 [installed,upgradable to: 10.18-1.pgdg18.04+1] +postgresql-client-11/now 11.11-1.pgdg18.04+1 amd64 [installed,upgradable to: 11.13-1.pgdg18.04+1] +postgresql-client-13/bionic-pgdg,now 13.4-4.pgdg18.04+1 amd64 [installed,automatic] +postgresql-client-9.5/bionic-pgdg,now 9.5.25-1.pgdg18.04+1 amd64 [installed] +postgresql-client-common/bionic-pgdg,now 231.pgdg18.04+1 all [installed] +postgresql-common/bionic-pgdg,now 231.pgdg18.04+1 all [installed] +timescaledb-2-loader-postgresql-13/bionic,now 2.5.0~ubuntu18.04 amd64 [installed,automatic] +timescaledb-2-postgresql-13/bionic,now 2.5.0~ubuntu18.04 amd64 [installed] +``` + +Let's remove all older packages. + +``` +sudo apt remove postgresql-10 postgresql-11 postgresql-9.5 postgresql-client-10 postgresql-client-11 postgresql-client-9.5 +``` + +Just in case: + +``` +sudo service postgresql restart +``` + +Now it stopped to work: + +``` +$ sudo -u postgres psql +psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory + Is the server running locally and accepting connections on that socket? + +$ sudo -u postgres psql -h localhost +psql: error: connection to server at "localhost" (::1), port 5432 failed: Connection refused + Is the server running on that host and accepting TCP/IP connections? +connection to server at "localhost" (127.0.0.1), port 5432 failed: Connection refused + Is the server running on that host and accepting TCP/IP connections? +``` + +But it's running: + +``` +$ ps auxw | grep postgres +postgres 726158 0.5 0.5 33991600 730084 ? Ss 23:45 0:00 /usr/lib/postgresql/13/bin/postgres -D /var/lib/postgresql/13/main -c config_file=/etc/postgresql/13/main/postgresql.conf +postgres 726160 0.0 0.0 33991600 4256 ? Ss 23:45 0:00 postgres: 13/main: checkpointer +postgres 726161 0.1 0.1 33991600 150048 ? Ss 23:45 0:00 postgres: 13/main: background writer +postgres 726162 0.0 0.0 33991600 22044 ? Ss 23:45 0:00 postgres: 13/main: walwriter +postgres 726163 0.0 0.0 33992284 6976 ? Ss 23:45 0:00 postgres: 13/main: autovacuum launcher +postgres 726164 0.0 0.0 177920 4384 ? Ss 23:45 0:00 postgres: 13/main: stats collector +postgres 726165 0.0 0.0 33992136 7840 ? Ss 23:45 0:00 postgres: 13/main: TimescaleDB Background Worker Launcher +postgres 726166 0.0 0.0 33992164 7244 ? Ss 23:45 0:00 postgres: 13/main: logical replication launcher +milovid+ 726578 0.0 0.0 14364 1100 pts/17 S+ 23:46 0:00 grep --color=auto postgres +``` + +But it does not listen 5432: + +``` +$ netstat -n | grep 5432 +``` + +Let's look at the config: + +``` +sudo mcedit /etc/postgresql/13/main/postgresql.conf +``` + +``` +# - Connection Settings - + +#listen_addresses = 'localhost' +``` + +Looks like I need to uncomment it. + +``` +sudo service postgresql restart +``` + +But it did not help: + +``` +$ sudo -u postgres psql -h localhost +psql: error: connection to server at "localhost" (::1), port 5432 failed: Connection refused + Is the server running on that host and accepting TCP/IP connections? +connection to server at "localhost" (127.0.0.1), port 5432 failed: Connection refused + Is the server running on that host and accepting TCP/IP connections? +``` + +Let's consult https://stackoverflow.com/questions/31091748/postgres-server-not-listening + +It is mentioning some pg_hba.conf. BTW what is HBA*? Let's find this file... + +``` +sudo mcedit /etc/postgresql/13/main/pg_hba.conf +``` + +\* host based authentication rules - it is explained inside this file. + +Nothing wrong in this file... + +``` +$ sudo service postgresql status +● postgresql.service - PostgreSQL RDBMS + Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) + Active: active (exited) since Fri 2021-10-29 23:50:14 MSK; 6min ago + Process: 728545 ExecStart=/bin/true (code=exited, status=0/SUCCESS) + Main PID: 728545 (code=exited, status=0/SUCCESS) + +Oct 29 23:50:14 mtlog-perftest03j systemd[1]: postgresql.service: Changed dead -> start +Oct 29 23:50:14 mtlog-perftest03j systemd[1]: Starting PostgreSQL RDBMS... +Oct 29 23:50:14 mtlog-perftest03j systemd[728545]: postgresql.service: Executing: /bin/true +Oct 29 23:50:14 mtlog-perftest03j systemd[1]: postgresql.service: Child 728545 belongs to postgresql.service. +Oct 29 23:50:14 mtlog-perftest03j systemd[1]: postgresql.service: Main process exited, code=exited, status=0/SUCCESS +Oct 29 23:50:14 mtlog-perftest03j systemd[1]: postgresql.service: Changed start -> exited +Oct 29 23:50:14 mtlog-perftest03j systemd[1]: postgresql.service: Job postgresql.service/start finished, result=done +Oct 29 23:50:14 mtlog-perftest03j systemd[1]: Started PostgreSQL RDBMS. +Oct 29 23:50:14 mtlog-perftest03j systemd[1]: postgresql.service: Failed to send unit change signal for postgresql.service: Connection reset by peer +``` + +It's quite cryptic. What does it mean "Failed to send unit change signal"? Is it good or bad? +What is the "unit"? Maybe it is "SystemD Unit" - the phrase that I've heard many times but don't really understand. + +Almost gave up... Wow, I found the culprit! In `/etc/postgresql/13/main/postgresql.conf`: + +``` +port = 5435 +``` + +Most likely this has happened, because multiple versions of PostgreSQL were installed. + +Let's change to 5432. + +``` +sudo mcedit /etc/postgresql/13/main/postgresql.conf +sudo service postgresql restart +``` + +But now it does not accept password: + +``` +milovidov@mtlog-perftest03j:~$ sudo -u postgres psql -h 127.0.0.1 +Password for user postgres: +psql: error: connection to server at "127.0.0.1", port 5432 failed: fe_sendauth: no password supplied +milovidov@mtlog-perftest03j:~$ sudo -u postgres psql -h 127.0.0.1 --password '' +Password: +psql: error: connection to server at "127.0.0.1", port 5432 failed: fe_sendauth: no password supplied +milovidov@mtlog-perftest03j:~$ sudo -u postgres psql -h 127.0.0.1 +Password for user postgres: +psql: error: connection to server at "127.0.0.1", port 5432 failed: fe_sendauth: no password supplied +``` + +Works this way: + +``` +$ sudo -u postgres psql +psql (13.4 (Ubuntu 13.4-4.pgdg18.04+1)) +Type "help" for help. + +postgres=# \password +Enter new password: +Enter it again: +``` + +It works with fine ASCII arc: + +``` +postgres=# CREATE database tutorial; +CREATE DATABASE +postgres=# \c tutorial +You are now connected to database "tutorial" as user "postgres". +tutorial=# CREATE EXTENSION IF NOT EXISTS timescaledb; +WARNING: +WELCOME TO + _____ _ _ ____________ +|_ _(_) | | | _ \ ___ \ + | | _ _ __ ___ ___ ___ ___ __ _| | ___| | | | |_/ / + | | | | _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \ + | | | | | | | | | __/\__ \ (_| (_| | | __/ |/ /| |_/ / + |_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/ + Running version 2.5.0 +For more information on TimescaleDB, please visit the following links: + + 1. Getting started: https://docs.timescale.com/timescaledb/latest/getting-started + 2. API reference documentation: https://docs.timescale.com/api/latest + 3. How TimescaleDB is designed: https://docs.timescale.com/timescaledb/latest/overview/core-concepts + +Note: TimescaleDB collects anonymous reports to better understand and assist our users. +For more information and how to disable, please see our docs https://docs.timescale.com/timescaledb/latest/how-to-guides/configuration/telemetry. + +CREATE EXTENSION +``` + + +## Creating Table + +Continuing to https://docs.timescale.com/timescaledb/latest/how-to-guides/hypertables/create/ + +Create table: + +``` +CREATE TABLE hits_100m_obfuscated ( +WatchID BIGINT, +JavaEnable SMALLINT, +Title TEXT, +GoodEvent SMALLINT, +EventTime TIMESTAMP, +EventDate Date, +CounterID INTEGER, +ClientIP INTEGER, +RegionID INTEGER, +UserID BIGINT, +CounterClass SMALLINT, +OS SMALLINT, +UserAgent SMALLINT, +URL TEXT, +Referer TEXT, +Refresh SMALLINT, +RefererCategoryID SMALLINT, +RefererRegionID INTEGER, +URLCategoryID SMALLINT, +URLRegionID INTEGER, +ResolutionWidth SMALLINT, +ResolutionHeight SMALLINT, +ResolutionDepth SMALLINT, +FlashMajor SMALLINT, +FlashMinor SMALLINT, +FlashMinor2 TEXT, +NetMajor SMALLINT, +NetMinor SMALLINT, +UserAgentMajor SMALLINT, +UserAgentMinor CHAR(2), +CookieEnable SMALLINT, +JavascriptEnable SMALLINT, +IsMobile SMALLINT, +MobilePhone SMALLINT, +MobilePhoneModel TEXT, +Params TEXT, +IPNetworkID INTEGER, +TraficSourceID SMALLINT, +SearchEngineID SMALLINT, +SearchPhrase TEXT, +AdvEngineID SMALLINT, +IsArtifical SMALLINT, +WindowClientWidth SMALLINT, +WindowClientHeight SMALLINT, +ClientTimeZone SMALLINT, +ClientEventTime TIMESTAMP, +SilverlightVersion1 SMALLINT, +SilverlightVersion2 SMALLINT, +SilverlightVersion3 INTEGER, +SilverlightVersion4 SMALLINT, +PageCharset TEXT, +CodeVersion INTEGER, +IsLink SMALLINT, +IsDownload SMALLINT, +IsNotBounce SMALLINT, +FUniqID BIGINT, +OriginalURL TEXT, +HID INTEGER, +IsOldCounter SMALLINT, +IsEvent SMALLINT, +IsParameter SMALLINT, +DontCountHits SMALLINT, +WithHash SMALLINT, +HitColor CHAR, +LocalEventTime TIMESTAMP, +Age SMALLINT, +Sex SMALLINT, +Income SMALLINT, +Interests SMALLINT, +Robotness SMALLINT, +RemoteIP INTEGER, +WindowName INTEGER, +OpenerName INTEGER, +HistoryLength SMALLINT, +BrowserLanguage TEXT, +BrowserCountry TEXT, +SocialNetwork TEXT, +SocialAction TEXT, +HTTPError SMALLINT, +SendTiming INTEGER, +DNSTiming INTEGER, +ConnectTiming INTEGER, +ResponseStartTiming INTEGER, +ResponseEndTiming INTEGER, +FetchTiming INTEGER, +SocialSourceNetworkID SMALLINT, +SocialSourcePage TEXT, +ParamPrice BIGINT, +ParamOrderID TEXT, +ParamCurrency TEXT, +ParamCurrencyID SMALLINT, +OpenstatServiceName TEXT, +OpenstatCampaignID TEXT, +OpenstatAdID TEXT, +OpenstatSourceID TEXT, +UTMSource TEXT, +UTMMedium TEXT, +UTMCampaign TEXT, +UTMContent TEXT, +UTMTerm TEXT, +FromTag TEXT, +HasGCLID SMALLINT, +RefererHash BIGINT, +URLHash BIGINT, +CLID INTEGER +); +``` + +I remember PostgreSQL does not support unsigned integers. It also does not support TINYINT. +And it does not support zero bytes in TEXT fields. We will deal with it... + +``` +tutorial=# SELECT create_hypertable('hits_100m_obfuscated', 'EventTime'); +ERROR: column "EventTime" does not exist +``` + +WTF? + +Maybe it because column names are lowercased? + +``` +tutorial=# SELECT create_hypertable('hits_100m_obfuscated', 'eventtime'); +NOTICE: adding not-null constraint to column "eventtime" +DETAIL: Time dimensions cannot have NULL values. + create_hypertable +----------------------------------- + (1,public,hits_100m_obfuscated,t) +(1 row) +``` + +Looks like I forgot to specify NOT NULL for every column. +Let's repeat... + +``` +tutorial=# DROP TABLE hits_100m_obfuscated +tutorial-# ; +DROP TABLE +tutorial=# CREATE TABLE hits_100m_obfuscated ( +tutorial(# WatchID BIGINT NOT NULL, +tutorial(# JavaEnable SMALLINT NOT NULL, +tutorial(# Title TEXT NOT NULL, +tutorial(# GoodEvent SMALLINT NOT NULL, +tutorial(# EventTime TIMESTAMP NOT NULL, +tutorial(# EventDate Date NOT NULL, +tutorial(# CounterID INTEGER NOT NULL, +tutorial(# ClientIP INTEGER NOT NULL, +tutorial(# RegionID INTEGER NOT NULL, +tutorial(# UserID BIGINT NOT NULL, +tutorial(# CounterClass SMALLINT NOT NULL, +tutorial(# OS SMALLINT NOT NULL, +tutorial(# UserAgent SMALLINT NOT NULL, +tutorial(# URL TEXT NOT NULL, +tutorial(# Referer TEXT NOT NULL, +tutorial(# Refresh SMALLINT NOT NULL, +tutorial(# RefererCategoryID SMALLINT NOT NULL, +tutorial(# RefererRegionID INTEGER NOT NULL, +tutorial(# URLCategoryID SMALLINT NOT NULL, +tutorial(# URLRegionID INTEGER NOT NULL, +tutorial(# ResolutionWidth SMALLINT NOT NULL, +tutorial(# ResolutionHeight SMALLINT NOT NULL, +tutorial(# ResolutionDepth SMALLINT NOT NULL, +tutorial(# FlashMajor SMALLINT NOT NULL, +tutorial(# FlashMinor SMALLINT NOT NULL, +tutorial(# FlashMinor2 TEXT NOT NULL, +tutorial(# NetMajor SMALLINT NOT NULL, +tutorial(# NetMinor SMALLINT NOT NULL, +tutorial(# UserAgentMajor SMALLINT NOT NULL, +tutorial(# UserAgentMinor CHAR(2) NOT NULL, +tutorial(# CookieEnable SMALLINT NOT NULL, +tutorial(# JavascriptEnable SMALLINT NOT NULL, +tutorial(# IsMobile SMALLINT NOT NULL, +tutorial(# MobilePhone SMALLINT NOT NULL, +tutorial(# MobilePhoneModel TEXT NOT NULL, +tutorial(# Params TEXT NOT NULL, +tutorial(# IPNetworkID INTEGER NOT NULL, +tutorial(# TraficSourceID SMALLINT NOT NULL, +tutorial(# SearchEngineID SMALLINT NOT NULL, +tutorial(# SearchPhrase TEXT NOT NULL, +tutorial(# AdvEngineID SMALLINT NOT NULL, +tutorial(# IsArtifical SMALLINT NOT NULL, +tutorial(# WindowClientWidth SMALLINT NOT NULL, +tutorial(# WindowClientHeight SMALLINT NOT NULL, +tutorial(# ClientTimeZone SMALLINT NOT NULL, +tutorial(# ClientEventTime TIMESTAMP NOT NULL, +tutorial(# SilverlightVersion1 SMALLINT NOT NULL, +tutorial(# SilverlightVersion2 SMALLINT NOT NULL, +tutorial(# SilverlightVersion3 INTEGER NOT NULL, +tutorial(# SilverlightVersion4 SMALLINT NOT NULL, +tutorial(# PageCharset TEXT NOT NULL, +tutorial(# CodeVersion INTEGER NOT NULL, +tutorial(# IsLink SMALLINT NOT NULL, +tutorial(# IsDownload SMALLINT NOT NULL, +tutorial(# IsNotBounce SMALLINT NOT NULL, +tutorial(# FUniqID BIGINT NOT NULL, +tutorial(# OriginalURL TEXT NOT NULL, +tutorial(# HID INTEGER NOT NULL, +tutorial(# IsOldCounter SMALLINT NOT NULL, +tutorial(# IsEvent SMALLINT NOT NULL, +tutorial(# IsParameter SMALLINT NOT NULL, +tutorial(# DontCountHits SMALLINT NOT NULL, +tutorial(# WithHash SMALLINT NOT NULL, +tutorial(# HitColor CHAR NOT NULL, +tutorial(# LocalEventTime TIMESTAMP NOT NULL, +tutorial(# Age SMALLINT NOT NULL, +tutorial(# Sex SMALLINT NOT NULL, +tutorial(# Income SMALLINT NOT NULL, +tutorial(# Interests SMALLINT NOT NULL, +tutorial(# Robotness SMALLINT NOT NULL, +tutorial(# RemoteIP INTEGER NOT NULL, +tutorial(# WindowName INTEGER NOT NULL, +tutorial(# OpenerName INTEGER NOT NULL, +tutorial(# HistoryLength SMALLINT NOT NULL, +tutorial(# BrowserLanguage TEXT NOT NULL, +tutorial(# BrowserCountry TEXT NOT NULL, +tutorial(# SocialNetwork TEXT NOT NULL, +tutorial(# SocialAction TEXT NOT NULL, +tutorial(# HTTPError SMALLINT NOT NULL, +tutorial(# SendTiming INTEGER NOT NULL, +tutorial(# DNSTiming INTEGER NOT NULL, +tutorial(# ConnectTiming INTEGER NOT NULL, +tutorial(# ResponseStartTiming INTEGER NOT NULL, +tutorial(# ResponseEndTiming INTEGER NOT NULL, +tutorial(# FetchTiming INTEGER NOT NULL, +tutorial(# SocialSourceNetworkID SMALLINT NOT NULL, +tutorial(# SocialSourcePage TEXT NOT NULL, +tutorial(# ParamPrice BIGINT NOT NULL, +tutorial(# ParamOrderID TEXT NOT NULL, +tutorial(# ParamCurrency TEXT NOT NULL, +tutorial(# ParamCurrencyID SMALLINT NOT NULL, +tutorial(# OpenstatServiceName TEXT NOT NULL, +tutorial(# OpenstatCampaignID TEXT NOT NULL, +tutorial(# OpenstatAdID TEXT NOT NULL, +tutorial(# OpenstatSourceID TEXT NOT NULL, +tutorial(# UTMSource TEXT NOT NULL, +tutorial(# UTMMedium TEXT NOT NULL, +tutorial(# UTMCampaign TEXT NOT NULL, +tutorial(# UTMContent TEXT NOT NULL, +tutorial(# UTMTerm TEXT NOT NULL, +tutorial(# FromTag TEXT NOT NULL, +tutorial(# HasGCLID SMALLINT NOT NULL, +tutorial(# RefererHash BIGINT NOT NULL, +tutorial(# URLHash BIGINT NOT NULL, +tutorial(# CLID INTEGER NOT NULL +tutorial(# ); +CREATE TABLE +tutorial=# SELECT create_hypertable('hits_100m_obfuscated', 'eventtime'); + create_hypertable +----------------------------------- + (2,public,hits_100m_obfuscated,t) +(1 row) + +tutorial=# +``` + +Now ok. + + +## Loading Data + +Next - importing data: +https://docs.timescale.com/timescaledb/latest/how-to-guides/migrate-data/import-csv/#csv-import + +``` +SELECT WatchID::Int64, JavaEnable, toValidUTF8(Title), GoodEvent, EventTime, EventDate, CounterID::Int32, ClientIP::Int32, RegionID::Int32, UserID::Int64, CounterClass, OS, UserAgent, toValidUTF8(URL), toValidUTF8(Referer), Refresh, RefererCategoryID::Int16, RefererRegionID::Int32, URLCategoryID::Int16, URLRegionID::Int32, ResolutionWidth::Int16, ResolutionHeight::Int16, ResolutionDepth, FlashMajor, FlashMinor, FlashMinor2, NetMajor, NetMinor, UserAgentMajor::Int16, UserAgentMinor, CookieEnable, JavascriptEnable, IsMobile, MobilePhone, toValidUTF8(MobilePhoneModel), toValidUTF8(Params), IPNetworkID::Int32, TraficSourceID, SearchEngineID::Int16, toValidUTF8(SearchPhrase), AdvEngineID, IsArtifical, WindowClientWidth::Int16, WindowClientHeight::Int16, ClientTimeZone, ClientEventTime, SilverlightVersion1, SilverlightVersion2, SilverlightVersion3::Int32, SilverlightVersion4::Int16, toValidUTF8(PageCharset), CodeVersion::Int32, IsLink, IsDownload, IsNotBounce, FUniqID::Int64, toValidUTF8(OriginalURL), HID::Int32, IsOldCounter, IsEvent, IsParameter, DontCountHits, WithHash, HitColor, LocalEventTime, Age, Sex, Income, Interests::Int16, Robotness, RemoteIP::Int32, WindowName, OpenerName, HistoryLength, BrowserLanguage, BrowserCountry, toValidUTF8(SocialNetwork), toValidUTF8(SocialAction), HTTPError, SendTiming, DNSTiming, ConnectTiming, ResponseStartTiming, ResponseEndTiming, FetchTiming, SocialSourceNetworkID, toValidUTF8(SocialSourcePage), ParamPrice, toValidUTF8(ParamOrderID), ParamCurrency, ParamCurrencyID::Int16, OpenstatServiceName, OpenstatCampaignID, OpenstatAdID, OpenstatSourceID, UTMSource, UTMMedium, UTMCampaign, UTMContent, UTMTerm, FromTag, HasGCLID, RefererHash::Int64, URLHash::Int64, CLID::Int32 +FROM hits_100m_obfuscated +INTO OUTFILE 'dump.csv' +FORMAT CSV +``` + +https://github.com/ClickHouse/ClickHouse/issues/30872 +https://github.com/ClickHouse/ClickHouse/issues/30873 + +``` +$ wc -c dump.csv +80865718769 dump.csv +``` + +``` +milovidov@mtlog-perftest03j:~$ timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" +panic: could not connect: pq: password authentication failed for user "postgres" + +goroutine 12 [running]: +main.processBatches(0xc00001e3c0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:238 +0x887 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb +milovidov@mtlog-perftest03j:~$ sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" +panic: could not connect: pq: password authentication failed for user "postgres" + +goroutine 25 [running]: +main.processBatches(0xc00019a350, 0xc00019e660) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:238 +0x887 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + + +milovidov@mtlog-perftest03j:~$ sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" --host localhost +flag provided but not defined: -host +Usage of timescaledb-parallel-copy: + -batch-size int + Number of rows per insert (default 5000) + -columns string + Comma-separated columns present in CSV + -connection string + PostgreSQL connection url (default "host=localhost user=postgres sslmode=disable") + -copy-options string + Additional options to pass to COPY (e.g., NULL 'NULL') (default "CSV") + -db-name string + Database where the destination table exists + -file string + File to read from rather than stdin + -header-line-count int + Number of header lines (default 1) + -limit int + Number of rows to insert overall; 0 means to insert all + -log-batches + Whether to time individual batches. + -reporting-period duration + Period to report insert stats; if 0s, intermediate results will not be reported + -schema string + Destination table's schema (default "public") + -skip-header + Skip the first line of the input + -split string + Character to split by (default ",") + -table string + Destination table for insertions (default "test_table") + -token-size int + Maximum size to use for tokens. By default, this is 64KB, so any value less than that will be ignored (default 65536) + -truncate + Truncate the destination table before insert + -verbose + Print more information about copying statistics + -version + Show the version of this tool + -workers int + Number of parallel requests to make (default 1) + + +milovidov@mtlog-perftest03j:~$ sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" -connection 'host=localhost' +panic: could not connect: pq: password authentication failed for user "postgres" + +goroutine 14 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:238 +0x887 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb +panic: could not connect: pq: password authentication failed for user "postgres" + +goroutine 13 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:238 +0x887 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb +panic: could not connect: pq: password authentication failed for user "postgres" + +goroutine 12 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:238 +0x887 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + + +milovidov@mtlog-perftest03j:~$ sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" -connection 'host=localhost password 12345' +panic: could not connect: cannot parse `host=localhost password 12345`: failed to parse as DSN (invalid dsn) + +goroutine 13 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:238 +0x887 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + + +milovidov@mtlog-perftest03j:~$ sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" -connection 'host=localhost password=12345' +panic: pq: invalid byte sequence for encoding "UTF8": 0xe0 0x22 0x2c + +goroutine 34 [running]: +main.processBatches(0xc000132350, 0xc000136660) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb +panic: pq: invalid byte sequence for encoding "UTF8": 0xe0 0x22 0x2c + +goroutine 30 [running]: +main.processBatches(0xc000132350, 0xc000136660) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb +``` + +Ok, now I've got something meaningful. +But it does not show, what line has error... + +``` +$ echo -e '\xe0\x22\x2c' +�", +``` + +Let's recreate the dump: + +``` +rm dump.csv + +SELECT WatchID::Int64, JavaEnable, toValidUTF8(Title), GoodEvent, EventTime, EventDate, CounterID::Int32, ClientIP::Int32, RegionID::Int32, + UserID::Int64, CounterClass, OS, UserAgent, toValidUTF8(URL), toValidUTF8(Referer), Refresh, RefererCategoryID::Int16, RefererRegionID::Int32, + URLCategoryID::Int16, URLRegionID::Int32, ResolutionWidth::Int16, ResolutionHeight::Int16, ResolutionDepth, FlashMajor, FlashMinor, + FlashMinor2, NetMajor, NetMinor, UserAgentMajor::Int16, toValidUTF8(UserAgentMinor::String), CookieEnable, JavascriptEnable, IsMobile, MobilePhone, + toValidUTF8(MobilePhoneModel), toValidUTF8(Params), IPNetworkID::Int32, TraficSourceID, SearchEngineID::Int16, toValidUTF8(SearchPhrase), + AdvEngineID, IsArtifical, WindowClientWidth::Int16, WindowClientHeight::Int16, ClientTimeZone, ClientEventTime, + SilverlightVersion1, SilverlightVersion2, SilverlightVersion3::Int32, SilverlightVersion4::Int16, toValidUTF8(PageCharset), + CodeVersion::Int32, IsLink, IsDownload, IsNotBounce, FUniqID::Int64, toValidUTF8(OriginalURL), HID::Int32, IsOldCounter, IsEvent, + IsParameter, DontCountHits, WithHash, toValidUTF8(HitColor::String), LocalEventTime, Age, Sex, Income, Interests::Int16, Robotness, RemoteIP::Int32, + WindowName, OpenerName, HistoryLength, toValidUTF8(BrowserLanguage::String), toValidUTF8(BrowserCountry::String), + toValidUTF8(SocialNetwork), toValidUTF8(SocialAction), + HTTPError, SendTiming, DNSTiming, ConnectTiming, ResponseStartTiming, ResponseEndTiming, FetchTiming, SocialSourceNetworkID, + toValidUTF8(SocialSourcePage), ParamPrice, toValidUTF8(ParamOrderID), toValidUTF8(ParamCurrency::String), + ParamCurrencyID::Int16, OpenstatServiceName, OpenstatCampaignID, OpenstatAdID, OpenstatSourceID, + UTMSource, UTMMedium, UTMCampaign, UTMContent, UTMTerm, FromTag, HasGCLID, RefererHash::Int64, URLHash::Int64, CLID::Int32 +FROM hits_100m_obfuscated +INTO OUTFILE 'dump.csv' +FORMAT CSV +``` + +``` +$ sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 1 --copy-options "CSV" -connection 'host=localhost password=12345' +panic: pq: value too long for type character(2) + +goroutine 6 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb +``` + +ALTER does not work: + +``` +tutorial=# ALTER TABLE hits_100m_obfuscated MODIFY COLUMN UserAgentMinor TEXT +tutorial-# ; +ERROR: syntax error at or near "MODIFY" +LINE 1: ALTER TABLE hits_100m_obfuscated MODIFY COLUMN UserAgentMino... + ^ +``` + +PostgreSQL is using unusual syntax for ALTER: + +``` +tutorial=# ALTER TABLE hits_100m_obfuscated ALTER COLUMN UserAgentMinor TYPE TEXT +; +ALTER TABLE +tutorial=# \q +``` + +https://github.com/ClickHouse/ClickHouse/issues/30874 + +Now something again: + +``` +$ sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 1 --copy-options "CSV" -connection 'host=localhost password=12345' +panic: pq: value "2149615427" is out of range for type integer + +goroutine 6 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb +``` + +``` +$ grep -F '2149615427' dump.csv +5607505572457935073,0,"Лазар автоматические пылесосы подробная школы. Когалерея — Курсы на Автория пище Сноудента новые устами",1,"2013-07-15 07:47:45","2013-07-15",38,-1194330980,229,-6649844357037090659,0,2,3,"https://produkty%2Fkategory_id=&auto-nexus.html?blockfesty-i-korroszhego","http://tambov.irr.ua/yandex.ru/saledParam=0&user/auto.ria",1,10282,995,15014,519,1996,1781,23,14,2,"800",0,0,7,"D�",1,1,0,0,"","",3392210,-1,0,"",0,0,1261,1007,135,"2013-07-15 21:54:13",0,0,0,0,"windows-1251;charset",1601,0,0,0,8184671896482443026,"",451733382,0,0,0,0,0,"5","2013-07-15 15:41:14",31,1,3,60,13,-1855237933,-1,-1,-1,"S0","h1","","",0,0,0,0,2149615427,36,3,0,"",0,"","NH",0,"","","","","","","","","","",0,-1103774879459415602,-2414747266057209563,0 +^C +``` + +Let's recreate the dump: + +``` +rm dump.csv + +SELECT WatchID::Int64, JavaEnable, toValidUTF8(Title), GoodEvent, EventTime, EventDate, CounterID::Int32, ClientIP::Int32, RegionID::Int32, + UserID::Int64, CounterClass, OS, UserAgent, toValidUTF8(URL), toValidUTF8(Referer), Refresh, RefererCategoryID::Int16, RefererRegionID::Int32, + URLCategoryID::Int16, URLRegionID::Int32, ResolutionWidth::Int16, ResolutionHeight::Int16, ResolutionDepth, FlashMajor, FlashMinor, + FlashMinor2, NetMajor, NetMinor, UserAgentMajor::Int16, toValidUTF8(UserAgentMinor::String), CookieEnable, JavascriptEnable, IsMobile, MobilePhone, + toValidUTF8(MobilePhoneModel), toValidUTF8(Params), IPNetworkID::Int32, TraficSourceID, SearchEngineID::Int16, toValidUTF8(SearchPhrase), + AdvEngineID, IsArtifical, WindowClientWidth::Int16, WindowClientHeight::Int16, ClientTimeZone, ClientEventTime, + SilverlightVersion1, SilverlightVersion2, SilverlightVersion3::Int32, SilverlightVersion4::Int16, toValidUTF8(PageCharset), + CodeVersion::Int32, IsLink, IsDownload, IsNotBounce, FUniqID::Int64, toValidUTF8(OriginalURL), HID::Int32, IsOldCounter, IsEvent, + IsParameter, DontCountHits, WithHash, toValidUTF8(HitColor::String), LocalEventTime, Age, Sex, Income, Interests::Int16, Robotness, RemoteIP::Int32, + WindowName, OpenerName, HistoryLength, toValidUTF8(BrowserLanguage::String), toValidUTF8(BrowserCountry::String), + toValidUTF8(SocialNetwork), toValidUTF8(SocialAction), + HTTPError, least(SendTiming, 30000), least(DNSTiming, 30000), least(ConnectTiming, 30000), least(ResponseStartTiming, 30000), + least(ResponseEndTiming, 30000), least(FetchTiming, 30000), SocialSourceNetworkID, + toValidUTF8(SocialSourcePage), ParamPrice, toValidUTF8(ParamOrderID), toValidUTF8(ParamCurrency::String), + ParamCurrencyID::Int16, OpenstatServiceName, OpenstatCampaignID, OpenstatAdID, OpenstatSourceID, + UTMSource, UTMMedium, UTMCampaign, UTMContent, UTMTerm, FromTag, HasGCLID, RefererHash::Int64, URLHash::Int64, CLID::Int32 +FROM hits_100m_obfuscated +INTO OUTFILE 'dump.csv' +FORMAT CSV +``` + +PostgreSQL does not support USE database. +But I remember, that I can write `\c` instead. I guess `\c` means "change" (the database). Or it is called "schema" or "catalog". + +``` +milovidov@mtlog-perftest03j:~$ sudo -u postgres psql +psql (13.4 (Ubuntu 13.4-4.pgdg18.04+1)) +Type "help" for help. + +postgres=# SELECT count(*) FROM hits_100m_obfuscated; +ERROR: relation "hits_100m_obfuscated" does not exist +LINE 1: SELECT count(*) FROM hits_100m_obfuscated; + ^ +postgres=# USE tutorial; +ERROR: syntax error at or near "USE" +LINE 1: USE tutorial; + ^ +postgres=# \c tutorial +You are now connected to database "tutorial" as user "postgres". +tutorial=# SELECT count(*) FROM hits_100m_obfuscated; + count +------- + 69996 +(1 row) +``` + +And parallel loader already loaded some part of data into my table (it is not transactional). +Let's truncate table: + +``` +tutorial=# TRUNCATE TABLE hits_100m_obfuscated; +TRUNCATE TABLE +``` + +Surprisingly, it works! + +Now it started loading data: +``` +$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" -connection 'host=localhost password=12345' +``` + +But the loading is not using 16 CPU cores and it is not bottlenecked by IO. + +WTF: + +``` +$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" -connection 'host=localhost password=12345' +panic: pq: could not extend file "base/16384/31264.1": wrote only 4096 of 8192 bytes at block 145407 + +goroutine 6 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 3m31.328s +user 0m35.016s +sys 0m6.964s +``` + +Looks like there is no space: + +``` +milovidov@mtlog-perftest03j:~$ df -h /var/lib/postgresql/13/main +Filesystem Size Used Avail Use% Mounted on +/dev/md1 35G 33G 1.4G 97% / +``` + +https://github.com/ClickHouse/ClickHouse/issues/30883 + +Let's move to another device. + +``` +milovidov@mtlog-perftest03j:~$ sudo mkdir /opt/postgresql +milovidov@mtlog-perftest03j:~$ sudo ls -l /var/lib/postgresql/13/main +total 88 +drwx------ 6 postgres postgres 4096 Oct 30 00:06 base +drwx------ 2 postgres postgres 4096 Oct 30 02:07 global +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_commit_ts +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_dynshmem +drwx------ 4 postgres postgres 4096 Oct 30 02:10 pg_logical +drwx------ 4 postgres postgres 4096 Oct 29 23:27 pg_multixact +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_notify +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_replslot +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_serial +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_snapshots +drwx------ 2 postgres postgres 4096 Oct 30 02:10 pg_stat +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_stat_tmp +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_subtrans +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_tblspc +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_twophase +-rw------- 1 postgres postgres 3 Oct 29 23:27 PG_VERSION +drwx------ 3 postgres postgres 12288 Oct 30 02:10 pg_wal +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_xact +-rw------- 1 postgres postgres 88 Oct 29 23:27 postgresql.auto.conf +-rw------- 1 postgres postgres 130 Oct 30 00:03 postmaster.opts +milovidov@mtlog-perftest03j:~$ sudo chown postgres:postgres /opt/postgresql +milovidov@mtlog-perftest03j:~$ sudo mv /var/lib/postgresql/13/main/* /opt/postgresql +mv: cannot stat '/var/lib/postgresql/13/main/*': No such file or directory +milovidov@mtlog-perftest03j:~$ sudo bash -c 'mv /var/lib/postgresql/13/main/* /opt/postgresql' +sudo ln milovidov@mtlog-perftest03j:~$ #sudo ln -s /opt/postgresql /var/lib/postgresql/13/main +milovidov@mtlog-perftest03j:~$ sudo rm /var/lib/postgresql/13/main +rm: cannot remove '/var/lib/postgresql/13/main': Is a directory +milovidov@mtlog-perftest03j:~$ sudo rm -rf /var/lib/postgresql/13/main +milovidov@mtlog-perftest03j:~$ sudo ln -s /opt/postgresql /var/lib/postgresql/13/main +milovidov@mtlog-perftest03j:~$ sudo ls -l /var/lib/postgresql/13/main +lrwxrwxrwx 1 root root 15 Oct 30 02:12 /var/lib/postgresql/13/main -> /opt/postgresql +milovidov@mtlog-perftest03j:~$ sudo ls -l /opt/postgresql/ +total 80 +drwx------ 6 postgres postgres 4096 Oct 30 00:06 base +drwx------ 2 postgres postgres 4096 Oct 30 02:07 global +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_commit_ts +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_dynshmem +drwx------ 4 postgres postgres 4096 Oct 30 02:10 pg_logical +drwx------ 4 postgres postgres 4096 Oct 29 23:27 pg_multixact +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_notify +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_replslot +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_serial +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_snapshots +drwx------ 2 postgres postgres 4096 Oct 30 02:10 pg_stat +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_stat_tmp +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_subtrans +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_tblspc +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_twophase +-rw------- 1 postgres postgres 3 Oct 29 23:27 PG_VERSION +drwx------ 3 postgres postgres 4096 Oct 30 02:10 pg_wal +drwx------ 2 postgres postgres 4096 Oct 29 23:27 pg_xact +-rw------- 1 postgres postgres 88 Oct 29 23:27 postgresql.auto.conf +-rw------- 1 postgres postgres 130 Oct 30 00:03 postmaster.opts + +sudo service postgresql start + +sudo less /var/log/postgresql/postgresql-13-main.log + +2021-10-30 02:13:41.284 MSK [791362] FATAL: data directory "/var/lib/postgresql/13/main" has invalid permissions +2021-10-30 02:13:41.284 MSK [791362] DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750). +pg_ctl: could not start server +Examine the log output. + +sudo chmod 0700 /var/lib/postgresql/13/main /opt/postgresql +sudo service postgresql start + +postgres=# \c tutorial +You are now connected to database "tutorial" as user "postgres". +tutorial=# TRUNCATE TABLE hits_100m_obfuscated; +TRUNCATE TABLE +``` + +``` +$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" -connection 'host=localhost password=12345' +``` + +No success: + +``` +$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" -connection 'host=localhost password=12345' +panic: pq: invalid byte sequence for encoding "UTF8": 0x00 + +goroutine 29 [running]: +main.processBatches(0xc000132350, 0xc000136660) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 11m47.879s +user 3m10.980s +sys 0m45.256s +``` + +The error message is false, because UTF-8 **does** support 0x00. It is just some PostgreSQL quirk. + +Let's recreate the dump: + +``` +rm dump.csv + +SELECT WatchID::Int64, JavaEnable, replaceAll(toValidUTF8(Title), '\0', ''), GoodEvent, EventTime, EventDate, CounterID::Int32, ClientIP::Int32, RegionID::Int32, + UserID::Int64, CounterClass, OS, UserAgent, replaceAll(toValidUTF8(URL), '\0', ''), replaceAll(toValidUTF8(Referer), '\0', ''), Refresh, RefererCategoryID::Int16, RefererRegionID::Int32, + URLCategoryID::Int16, URLRegionID::Int32, ResolutionWidth::Int16, ResolutionHeight::Int16, ResolutionDepth, FlashMajor, FlashMinor, + FlashMinor2, NetMajor, NetMinor, UserAgentMajor::Int16, replaceAll(toValidUTF8(UserAgentMinor::String), '\0', ''), CookieEnable, JavascriptEnable, IsMobile, MobilePhone, + replaceAll(toValidUTF8(MobilePhoneModel), '\0', ''), replaceAll(toValidUTF8(Params), '\0', ''), IPNetworkID::Int32, TraficSourceID, SearchEngineID::Int16, replaceAll(toValidUTF8(SearchPhrase), '\0', ''), + AdvEngineID, IsArtifical, WindowClientWidth::Int16, WindowClientHeight::Int16, ClientTimeZone, ClientEventTime, + SilverlightVersion1, SilverlightVersion2, SilverlightVersion3::Int32, SilverlightVersion4::Int16, replaceAll(toValidUTF8(PageCharset), '\0', ''), + CodeVersion::Int32, IsLink, IsDownload, IsNotBounce, FUniqID::Int64, replaceAll(toValidUTF8(OriginalURL), '\0', ''), HID::Int32, IsOldCounter, IsEvent, + IsParameter, DontCountHits, WithHash, replaceAll(toValidUTF8(HitColor::String), '\0', ''), LocalEventTime, Age, Sex, Income, Interests::Int16, Robotness, RemoteIP::Int32, + WindowName, OpenerName, HistoryLength, replaceAll(toValidUTF8(BrowserLanguage::String), '\0', ''), replaceAll(toValidUTF8(BrowserCountry::String), '\0', ''), + replaceAll(toValidUTF8(SocialNetwork), '\0', ''), replaceAll(toValidUTF8(SocialAction), '\0', ''), + HTTPError, least(SendTiming, 30000), least(DNSTiming, 30000), least(ConnectTiming, 30000), least(ResponseStartTiming, 30000), + least(ResponseEndTiming, 30000), least(FetchTiming, 30000), SocialSourceNetworkID, + replaceAll(toValidUTF8(SocialSourcePage), '\0', ''), ParamPrice, replaceAll(toValidUTF8(ParamOrderID), '\0', ''), replaceAll(toValidUTF8(ParamCurrency::String), '\0', ''), + ParamCurrencyID::Int16, OpenstatServiceName, OpenstatCampaignID, OpenstatAdID, OpenstatSourceID, + UTMSource, UTMMedium, UTMCampaign, UTMContent, UTMTerm, FromTag, HasGCLID, RefererHash::Int64, URLHash::Int64, CLID::Int32 +FROM hits_100m_obfuscated +INTO OUTFILE 'dump.csv' +FORMAT CSV +``` + +WTF: + +``` +tutorial=# SELECT count(*) FROM hits_100m_obfuscated; +ERROR: could not load library "/usr/lib/postgresql/13/lib/llvmjit.so": libLLVM-6.0.so.1: cannot open shared object file: No such file or directory +``` + +Maybe just install LLVM? + +``` +sudo apt install llvm +``` + +It does not help: + +``` +milovidov@mtlog-perftest03j:~$ sudo -u postgres psql +psql (13.4 (Ubuntu 13.4-4.pgdg18.04+1)) +Type "help" for help. + +postgres=# \c tutorial +You are now connected to database "tutorial" as user "postgres". +tutorial=# SELECT count(*) FROM hits_100m_obfuscated; +ERROR: could not load library "/usr/lib/postgresql/13/lib/llvmjit.so": libLLVM-6.0.so.1: cannot open shared object file: No such file or directory +tutorial=# +``` + +Dependency on system libraries is harmful. + +``` +milovidov@mtlog-perftest03j:~$ ls -l /usr/lib/x86_64-linux-gnu/libLLVM-6.0.so +lrwxrwxrwx 1 root root 16 Apr 6 2018 /usr/lib/x86_64-linux-gnu/libLLVM-6.0.so -> libLLVM-6.0.so.1 +milovidov@mtlog-perftest03j:~$ ls -l /usr/lib/x86_64-linux-gnu/libLLVM-6.0.so.1 +ls: cannot access '/usr/lib/x86_64-linux-gnu/libLLVM-6.0.so.1': No such file or directory +``` + +https://askubuntu.com/questions/481/how-do-i-find-the-package-that-provides-a-file + +``` +milovidov@mtlog-perftest03j:~$ dpkg -S libLLVM-6.0.so.1 +llvm-6.0-dev: /usr/lib/llvm-6.0/lib/libLLVM-6.0.so.1 +libllvm6.0:amd64: /usr/lib/x86_64-linux-gnu/libLLVM-6.0.so.1 +``` + +Wow, it's absolutely broken: + +``` +milovidov@mtlog-perftest03j:~$ sudo apt remove llvm-6.0-dev +Reading package lists... Done +Building dependency tree +Reading state information... Done +The following packages were automatically installed and are no longer required: + libcgal13 libgmpxx4ldbl liblldb-11 libprotobuf-c1 libsfcgal1 mysql-server-core-5.7 +Use 'sudo apt autoremove' to remove them. +The following packages will be REMOVED: + liblld-6.0-dev lld lld-6.0 llvm-6.0-dev +0 upgraded, 0 newly installed, 4 to remove and 293 not upgraded. +After this operation, 163 MB disk space will be freed. +Do you want to continue? [Y/n] +(Reading database ... 268641 files and directories currently installed.) +Removing liblld-6.0-dev (1:6.0-1ubuntu2) ... +Removing lld (1:6.0-41~exp5~ubuntu1) ... +Removing lld-6.0 (1:6.0-1ubuntu2) ... +Removing llvm-6.0-dev (1:6.0-1ubuntu2) ... +Processing triggers for man-db (2.8.3-2ubuntu0.1) ... +Processing triggers for libc-bin (2.27-3ubuntu1.4) ... +milovidov@mtlog-perftest03j:~$ sudo apt install llvm-6.0-dev +Reading package lists... Done +Building dependency tree +Reading state information... Done +The following packages were automatically installed and are no longer required: + libcgal13 libgmpxx4ldbl liblldb-11 libprotobuf-c1 libsfcgal1 mysql-server-core-5.7 +Use 'sudo apt autoremove' to remove them. +The following NEW packages will be installed: + llvm-6.0-dev +0 upgraded, 1 newly installed, 0 to remove and 293 not upgraded. +Need to get 23.0 MB of archives. +After this operation, 160 MB of additional disk space will be used. +Get:1 http://mirror.yandex.ru/ubuntu bionic/main amd64 llvm-6.0-dev amd64 1:6.0-1ubuntu2 [23.0 MB] +Fetched 23.0 MB in 1s (42.5 MB/s) +Selecting previously unselected package llvm-6.0-dev. +(Reading database ... 267150 files and directories currently installed.) +Preparing to unpack .../llvm-6.0-dev_1%3a6.0-1ubuntu2_amd64.deb ... +Unpacking llvm-6.0-dev (1:6.0-1ubuntu2) ... +Setting up llvm-6.0-dev (1:6.0-1ubuntu2) ... +Processing triggers for libc-bin (2.27-3ubuntu1.4) ... +milovidov@mtlog-perftest03j:~$ ls -l /usr/lib/x86_64-linux-gnu/libLLVM-6.0.so +lrwxrwxrwx 1 root root 16 Apr 6 2018 /usr/lib/x86_64-linux-gnu/libLLVM-6.0.so -> libLLVM-6.0.so.1 +milovidov@mtlog-perftest03j:~$ ls -l /usr/lib/x86_64-linux-gnu/libLLVM-6.0.so.1 +ls: cannot access '/usr/lib/x86_64-linux-gnu/libLLVM-6.0.so.1': No such file or directory +``` + +Let's remove just in case: + +``` +sudo apt remove llvm-6.0-dev +``` + +https://dba.stackexchange.com/questions/264955/handling-performance-problems-with-jit-in-postgres-12 + +JIT can be disabled by `set jit = off;` + +``` +tutorial=# set jit = off; +SET +tutorial=# +tutorial=# SELECT count(*) FROM hits_100m_obfuscated; +``` + +But now this SELECT query started and hanged for multiple minutes without any result. +And I see something strange in `top`: + +``` + 792553 postgres 20 0 32.418g 0.031t 0.031t D 2.4 25.3 3:43.84 postgres: 13/main: checkpointer + 814659 postgres 20 0 32.432g 0.023t 0.023t D 0.0 18.8 0:14.53 postgres: 13/main: parallel worker for PID 813980 + 813980 postgres 20 0 32.433g 0.023t 0.023t D 0.0 18.4 0:14.47 postgres: 13/main: postgres tutorial [local] SELECT + 814657 postgres 20 0 32.432g 0.016t 0.016t D 0.0 12.6 0:09.83 postgres: 13/main: parallel worker for PID 813980 + 814658 postgres 20 0 32.432g 0.015t 0.015t D 2.4 12.6 0:09.45 postgres: 13/main: parallel worker for PID 813980 + 814656 postgres 20 0 32.432g 0.015t 0.015t D 0.0 12.0 0:07.36 postgres: 13/main: parallel worker for PID 813980 + 792554 postgres 20 0 32.417g 5.394g 5.392g D 0.0 4.3 0:04.78 postgres: 13/main: background writer +``` + +The query did not finish in 30 minutes. How it can be so enormously slow? + + +Loading failed, again: + +``` +$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" -connection 'host=localhost password=12345' +panic: pq: extra data after last expected column + +goroutine 14 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 20m57.936s +user 4m14.444s +sys 1m11.412s +``` + +Most likely PostgreSQL cannot recognize proper CSV escaping of quotes like `"Hello "" world"`. +Let's simply remove all double quotes from String values. + +``` +rm dump.csv + +SELECT WatchID::Int64, JavaEnable, replaceAll(replaceAll(toValidUTF8(Title), '\0', ''), '"', ''), GoodEvent, EventTime, EventDate, CounterID::Int32, ClientIP::Int32, RegionID::Int32, + UserID::Int64, CounterClass, OS, UserAgent, replaceAll(replaceAll(toValidUTF8(URL), '\0', ''), '"', ''), replaceAll(replaceAll(toValidUTF8(Referer), '\0', ''), '"', ''), Refresh, RefererCategoryID::Int16, RefererRegionID::Int32, + URLCategoryID::Int16, URLRegionID::Int32, ResolutionWidth::Int16, ResolutionHeight::Int16, ResolutionDepth, FlashMajor, FlashMinor, + FlashMinor2, NetMajor, NetMinor, UserAgentMajor::Int16, replaceAll(replaceAll(toValidUTF8(UserAgentMinor::String), '\0', ''), '"', ''), CookieEnable, JavascriptEnable, IsMobile, MobilePhone, + replaceAll(replaceAll(toValidUTF8(MobilePhoneModel), '\0', ''), '"', ''), replaceAll(replaceAll(toValidUTF8(Params), '\0', ''), '"', ''), IPNetworkID::Int32, TraficSourceID, SearchEngineID::Int16, replaceAll(replaceAll(toValidUTF8(SearchPhrase), '\0', ''), '"', ''), + AdvEngineID, IsArtifical, WindowClientWidth::Int16, WindowClientHeight::Int16, ClientTimeZone, ClientEventTime, + SilverlightVersion1, SilverlightVersion2, SilverlightVersion3::Int32, SilverlightVersion4::Int16, replaceAll(replaceAll(toValidUTF8(PageCharset), '\0', ''), '"', ''), + CodeVersion::Int32, IsLink, IsDownload, IsNotBounce, FUniqID::Int64, replaceAll(replaceAll(toValidUTF8(OriginalURL), '\0', ''), '"', ''), HID::Int32, IsOldCounter, IsEvent, + IsParameter, DontCountHits, WithHash, replaceAll(replaceAll(toValidUTF8(HitColor::String), '\0', ''), '"', ''), LocalEventTime, Age, Sex, Income, Interests::Int16, Robotness, RemoteIP::Int32, + WindowName, OpenerName, HistoryLength, replaceAll(replaceAll(toValidUTF8(BrowserLanguage::String), '\0', ''), '"', ''), replaceAll(replaceAll(toValidUTF8(BrowserCountry::String), '\0', ''), '"', ''), + replaceAll(replaceAll(toValidUTF8(SocialNetwork), '\0', ''), '"', ''), replaceAll(replaceAll(toValidUTF8(SocialAction), '\0', ''), '"', ''), + HTTPError, least(SendTiming, 30000), least(DNSTiming, 30000), least(ConnectTiming, 30000), least(ResponseStartTiming, 30000), + least(ResponseEndTiming, 30000), least(FetchTiming, 30000), SocialSourceNetworkID, + replaceAll(replaceAll(toValidUTF8(SocialSourcePage), '\0', ''), '"', ''), ParamPrice, replaceAll(replaceAll(toValidUTF8(ParamOrderID), '\0', ''), '"', ''), replaceAll(replaceAll(toValidUTF8(ParamCurrency::String), '\0', ''), '"', ''), + ParamCurrencyID::Int16, OpenstatServiceName, OpenstatCampaignID, OpenstatAdID, OpenstatSourceID, + UTMSource, UTMMedium, UTMCampaign, UTMContent, UTMTerm, FromTag, HasGCLID, RefererHash::Int64, URLHash::Int64, CLID::Int32 +FROM hits_100m_obfuscated +INTO OUTFILE 'dump.csv' +FORMAT CSV +``` + +Oops, another trouble: + +``` +$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" -connection 'host=localhost password=12345' +panic: pq: unterminated CSV quoted field + +goroutine 19 [running]: +main.processBatches(0xc000132350, 0xc000136660) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 0m38.278s +user 0m13.544s +sys 0m3.552s +``` + +I have hypothesis, maybe it is interpreting both backslashes and quotes in CSV? +We need to check, what is CSV, exactly, from TimescaleDB's standpoint. + +https://www.postgresql.org/docs/9.2/sql-copy.html + +Yes, PostgreSQL is using "fake CSV": + +> This format option is used for importing and exporting the Comma Separated Value (CSV) file format used by many other programs, such as spreadsheets. Instead of the escaping rules used by PostgreSQL's standard text format, it produces and recognizes the common CSV escaping mechanism. + +> The values in each record are separated by the DELIMITER character. If the value contains the delimiter character, the QUOTE character, the NULL string, a carriage return, or line feed character, then the whole value is prefixed and suffixed by the QUOTE character, and any occurrence within the value of a QUOTE character or the ESCAPE character is preceded by the escape character. + +So, it looks like CSV but is using C-style backslash escapes inside values. +Let's remove both backslash and quote from our strings to make PostgreSQL happy. + +``` +rm dump.csv + +SELECT WatchID::Int64, JavaEnable, replaceAll(replaceAll(replaceAll(toValidUTF8(Title), '\0', ''), '"', ''), '\\', ''), GoodEvent, EventTime, EventDate, CounterID::Int32, ClientIP::Int32, RegionID::Int32, + UserID::Int64, CounterClass, OS, UserAgent, replaceAll(replaceAll(replaceAll(toValidUTF8(URL), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(Referer), '\0', ''), '"', ''), '\\', ''), Refresh, RefererCategoryID::Int16, RefererRegionID::Int32, + URLCategoryID::Int16, URLRegionID::Int32, ResolutionWidth::Int16, ResolutionHeight::Int16, ResolutionDepth, FlashMajor, FlashMinor, + FlashMinor2, NetMajor, NetMinor, UserAgentMajor::Int16, replaceAll(replaceAll(replaceAll(toValidUTF8(UserAgentMinor::String), '\0', ''), '"', ''), '\\', ''), CookieEnable, JavascriptEnable, IsMobile, MobilePhone, + replaceAll(replaceAll(replaceAll(toValidUTF8(MobilePhoneModel), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(Params), '\0', ''), '"', ''), '\\', ''), IPNetworkID::Int32, TraficSourceID, SearchEngineID::Int16, replaceAll(replaceAll(replaceAll(toValidUTF8(SearchPhrase), '\0', ''), '"', ''), '\\', ''), + AdvEngineID, IsArtifical, WindowClientWidth::Int16, WindowClientHeight::Int16, ClientTimeZone, ClientEventTime, + SilverlightVersion1, SilverlightVersion2, SilverlightVersion3::Int32, SilverlightVersion4::Int16, replaceAll(replaceAll(replaceAll(toValidUTF8(PageCharset), '\0', ''), '"', ''), '\\', ''), + CodeVersion::Int32, IsLink, IsDownload, IsNotBounce, FUniqID::Int64, replaceAll(replaceAll(replaceAll(toValidUTF8(OriginalURL), '\0', ''), '"', ''), '\\', ''), HID::Int32, IsOldCounter, IsEvent, + IsParameter, DontCountHits, WithHash, replaceAll(replaceAll(replaceAll(toValidUTF8(HitColor::String), '\0', ''), '"', ''), '\\', ''), LocalEventTime, Age, Sex, Income, Interests::Int16, Robotness, RemoteIP::Int32, + WindowName, OpenerName, HistoryLength, replaceAll(replaceAll(replaceAll(toValidUTF8(BrowserLanguage::String), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(BrowserCountry::String), '\0', ''), '"', ''), '\\', ''), + replaceAll(replaceAll(replaceAll(toValidUTF8(SocialNetwork), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(SocialAction), '\0', ''), '"', ''), '\\', ''), + HTTPError, least(SendTiming, 30000), least(DNSTiming, 30000), least(ConnectTiming, 30000), least(ResponseStartTiming, 30000), + least(ResponseEndTiming, 30000), least(FetchTiming, 30000), SocialSourceNetworkID, + replaceAll(replaceAll(replaceAll(toValidUTF8(SocialSourcePage), '\0', ''), '"', ''), '\\', ''), ParamPrice, replaceAll(replaceAll(replaceAll(toValidUTF8(ParamOrderID), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(ParamCurrency::String), '\0', ''), '"', ''), '\\', ''), + ParamCurrencyID::Int16, OpenstatServiceName, OpenstatCampaignID, OpenstatAdID, OpenstatSourceID, + UTMSource, UTMMedium, UTMCampaign, UTMContent, UTMTerm, FromTag, HasGCLID, RefererHash::Int64, URLHash::Int64, CLID::Int32 +FROM hits_100m_obfuscated +INTO OUTFILE 'dump.csv' +FORMAT CSV +``` + +It does not work at all: + +``` +$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.csv --workers 16 --copy-options "CSV" -connection 'host=localhost password=12345' +panic: pq: invalid input syntax for type bigint: " ПЕСНЮ ПРЕСТИВАРКЕ ДОЛЖНО ЛИ,1,306,31432,304,22796,1011,879,37,15,5,700.224,2,7,13,D�,1,1,0,0,",",3039109,-1,0,",0,0,779,292,135,2013-07-31 09:37:12,0,0,0,0,windows,1,0,0,0,6888403766694734958,http%3A//maps&sort_order_Kurzarm_DOB&sr=http%3A%2F%3Fpage=/ok.html?1=1&cid=577&oki=1&op_seo_entry=&op_uid=13225;IC" + +goroutine 20 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 1m47.915s +user 0m33.676s +sys 0m8.028s +``` + +Maybe let's switch from CSV to TSV that PostgreSQL seems to understand better. + +``` +SELECT WatchID::Int64, JavaEnable, replaceAll(replaceAll(replaceAll(toValidUTF8(Title), '\0', ''), '"', ''), '\\', ''), GoodEvent, EventTime, EventDate, CounterID::Int32, ClientIP::Int32, RegionID::Int32, + UserID::Int64, CounterClass, OS, UserAgent, replaceAll(replaceAll(replaceAll(toValidUTF8(URL), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(Referer), '\0', ''), '"', ''), '\\', ''), Refresh, RefererCategoryID::Int16, RefererRegionID::Int32, + URLCategoryID::Int16, URLRegionID::Int32, ResolutionWidth::Int16, ResolutionHeight::Int16, ResolutionDepth, FlashMajor, FlashMinor, + FlashMinor2, NetMajor, NetMinor, UserAgentMajor::Int16, replaceAll(replaceAll(replaceAll(toValidUTF8(UserAgentMinor::String), '\0', ''), '"', ''), '\\', ''), CookieEnable, JavascriptEnable, IsMobile, MobilePhone, + replaceAll(replaceAll(replaceAll(toValidUTF8(MobilePhoneModel), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(Params), '\0', ''), '"', ''), '\\', ''), IPNetworkID::Int32, TraficSourceID, SearchEngineID::Int16, replaceAll(replaceAll(replaceAll(toValidUTF8(SearchPhrase), '\0', ''), '"', ''), '\\', ''), + AdvEngineID, IsArtifical, WindowClientWidth::Int16, WindowClientHeight::Int16, ClientTimeZone, ClientEventTime, + SilverlightVersion1, SilverlightVersion2, SilverlightVersion3::Int32, SilverlightVersion4::Int16, replaceAll(replaceAll(replaceAll(toValidUTF8(PageCharset), '\0', ''), '"', ''), '\\', ''), + CodeVersion::Int32, IsLink, IsDownload, IsNotBounce, FUniqID::Int64, replaceAll(replaceAll(replaceAll(toValidUTF8(OriginalURL), '\0', ''), '"', ''), '\\', ''), HID::Int32, IsOldCounter, IsEvent, + IsParameter, DontCountHits, WithHash, replaceAll(replaceAll(replaceAll(toValidUTF8(HitColor::String), '\0', ''), '"', ''), '\\', ''), LocalEventTime, Age, Sex, Income, Interests::Int16, Robotness, RemoteIP::Int32, + WindowName, OpenerName, HistoryLength, replaceAll(replaceAll(replaceAll(toValidUTF8(BrowserLanguage::String), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(BrowserCountry::String), '\0', ''), '"', ''), '\\', ''), + replaceAll(replaceAll(replaceAll(toValidUTF8(SocialNetwork), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(SocialAction), '\0', ''), '"', ''), '\\', ''), + HTTPError, least(SendTiming, 30000), least(DNSTiming, 30000), least(ConnectTiming, 30000), least(ResponseStartTiming, 30000), + least(ResponseEndTiming, 30000), least(FetchTiming, 30000), SocialSourceNetworkID, + replaceAll(replaceAll(replaceAll(toValidUTF8(SocialSourcePage), '\0', ''), '"', ''), '\\', ''), ParamPrice, replaceAll(replaceAll(replaceAll(toValidUTF8(ParamOrderID), '\0', ''), '"', ''), '\\', ''), replaceAll(replaceAll(replaceAll(toValidUTF8(ParamCurrency::String), '\0', ''), '"', ''), '\\', ''), + ParamCurrencyID::Int16, OpenstatServiceName, OpenstatCampaignID, OpenstatAdID, OpenstatSourceID, + UTMSource, UTMMedium, UTMCampaign, UTMContent, UTMTerm, FromTag, HasGCLID, RefererHash::Int64, URLHash::Int64, CLID::Int32 +FROM hits_100m_obfuscated +INTO OUTFILE 'dump.tsv' +FORMAT TSV +``` + +But how to pass TSV to `timescaledb-parallel-copy` tool? + +``` +milovidov@mtlog-perftest03j:~$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.tsv --workers 16 -connection 'host=localhost password=12345' panic: pq: invalid input syntax for type bigint: "9076997425961590393\t0\tКино\t1\t2013-07-06 17:47:29\t2013-07-06\t225510\t-1056921538\t229\t3467937489264290637\t0\t2\t3\thttp://liver.ru/belgorod/page/1006.jки/доп_приборы\thttp://video.yandex.ru/1.561.540.000703/?order_Kurzarm_alia\t0\t16124\t20\t14328\t22\t1638\t1658\t23\t15\t7\t700\t0\t0\t17\tD�\t1\t1\t0\t0\t\t\t2095433\t-1\t0\t\t0\t1\t1369\t713\t135\t2013-07-06 16:25:42\t0\t0\t0\t0\twindows\t1601\t0\t0\t0\t5566829288329160346\t\t940752990\t0\t0\t0\t0\t0\t5\t2013-07-06 01:32:13\t55\t2\t3\t0\t2\t-1352932082\t-1\t-1\t-1\tS0\t�\\f\t\t\t0\t0\t0\t0\t0\t0\t0\t0\t\t0\t\tNH\t0\t\t\t\t\t\t\t\t\t\t\t0\t6811023348165660452\t7011450103338277684\t0" + +goroutine 20 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 0m0.304s +user 0m0.044s +sys 0m0.044s +milovidov@mtlog-perftest03j:~$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.tsv --copy-options "TEXT" --workers 16 -connection 'host=localhost password=12345' +panic: pq: syntax error at or near "TEXT" + +goroutine 18 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 0m0.044s +user 0m0.048s +sys 0m0.036s +milovidov@mtlog-perftest03j:~$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.tsv --copy-options "text" --workers 16 -connection 'host=localhost password=12345' +panic: pq: syntax error at or near "text" + +goroutine 18 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb +panic: pq: syntax error at or near "text" + +goroutine 19 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 0m0.057s +user 0m0.060s +sys 0m0.028s +milovidov@mtlog-perftest03j:~$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.tsv --copy-options "Text" --workers 16 -connection 'host=localhost password=12345' +panic: pq: syntax error at or near "Text" + +goroutine 11 [running]: +main.processBatches(0xc0000183d0, 0xc0000a66c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 0m0.041s +user 0m0.052s +sys 0m0.032s +milovidov@mtlog-perftest03j:~$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.tsv --copy-options "FORMAT text" --workers 16 -connection 'host=localhost password=12345' +panic: pq: syntax error at or near "FORMAT" + +goroutine 21 [running]: +main.processBatches(0xc00019a350, 0xc00019e660) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 0m0.045s +user 0m0.052s +sys 0m0.028s +``` + +Nothing works: + +``` +milovidov@mtlog-perftest03j:~$ time sudo -u postgres timescaledb-parallel-copy --help +Usage of timescaledb-parallel-copy: + -batch-size int + Number of rows per insert (default 5000) + -columns string + Comma-separated columns present in CSV + -connection string + PostgreSQL connection url (default "host=localhost user=postgres sslmode=disable") + -copy-options string + Additional options to pass to COPY (e.g., NULL 'NULL') (default "CSV") + -db-name string + Database where the destination table exists + -file string + File to read from rather than stdin + -header-line-count int + Number of header lines (default 1) + -limit int + Number of rows to insert overall; 0 means to insert all + -log-batches + Whether to time individual batches. + -reporting-period duration + Period to report insert stats; if 0s, intermediate results will not be reported + -schema string + Destination table's schema (default "public") + -skip-header + Skip the first line of the input + -split string + Character to split by (default ",") + -table string + Destination table for insertions (default "test_table") + -token-size int + Maximum size to use for tokens. By default, this is 64KB, so any value less than that will be ignored (default 65536) + -truncate + Truncate the destination table before insert + -verbose + Print more information about copying statistics + -version + Show the version of this tool + -workers int + Number of parallel requests to make (default 1) + +real 0m0.009s +user 0m0.004s +sys 0m0.000s +milovidov@mtlog-perftest03j:~$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.tsv --truncate --copy-options "" --workers 16 -connection 'host=localhost password=12345' +panic: pq: invalid input syntax for type bigint: "9076997425961590393 0 Кино 1 2013-07-06 17:47:29 2013-07-06 225510 -1056921538 229 3467937489264290637 0 2 3http://liver.ru/belgorod/page/1006.jки/доп_приборы http://video.yandex.ru/1.561.540.000703/?order_Kurzarm_alia 0 16124 20 14328 22 1638 1658 23 15 7 700 0017 D� 1 1 0 0 2095433 -1 0 0 1 1369 713 135 2013-07-06 16:25:42 0 0 0 0 windows 1601 000 5566829288329160346 940752990 0 0 0 0 0 5 2013-07-06 01:32:13 55 2 3 0 2 -1352932082 -1 -1 -1 S0�\f 0 0 0 0 0 0 0 0 0 NH 0 06811023348165660452 7011450103338277684 0" + +goroutine 13 [running]: +main.processBatches(0xc000019140, 0xc0001eb080) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 0m0.191s +user 0m0.036s +sys 0m0.040s +milovidov@mtlog-perftest03j:~$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.tsv --truncate --copy-options "NULL AS '\N'" --workers 16 -connection 'host=localhost password=12345' +panic: pq: invalid input syntax for type bigint: "9076997425961590393 0 Кино 1 2013-07-06 17:47:29 2013-07-06 225510 -1056921538 229 3467937489264290637 0 2 3http://liver.ru/belgorod/page/1006.jки/доп_приборы http://video.yandex.ru/1.561.540.000703/?order_Kurzarm_alia 0 16124 20 14328 22 1638 1658 23 15 7 700 0017 D� 1 1 0 0 2095433 -1 0 0 1 1369 713 135 2013-07-06 16:25:42 0 0 0 0 windows 1601 000 5566829288329160346 940752990 0 0 0 0 0 5 2013-07-06 01:32:13 55 2 3 0 2 -1352932082 -1 -1 -1 S0�\f 0 0 0 0 0 0 0 0 0 NH 0 06811023348165660452 7011450103338277684 0" + +goroutine 11 [running]: +main.processBatches(0xc000018900, 0xc0002886c0) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 0m0.187s +user 0m0.020s +sys 0m0.048s +milovidov@mtlog-perftest03j:~$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.tsv --truncate --copy-options "DELIMITER AS '\t'" --workers 16 -connection 'host=localhost password=12345' +panic: pq: conflicting or redundant options + +goroutine 13 [running]: +main.processBatches(0xc000019140, 0xc0001e9080) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 0m0.196s +user 0m0.048s +sys 0m0.020s +milovidov@mtlog-perftest03j:~$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.tsv --truncate --copy-options "TEXT DELIMITER AS '\t'" --workers 16 -connection 'host=localhost password=12345' +panic: pq: syntax error at or near "TEXT" + +goroutine 22 [running]: +main.processBatches(0xc000019140, 0xc0001e9080) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb +panic: pq: syntax error at or near "TEXT" + +goroutine 11 [running]: +main.processBatches(0xc000019140, 0xc0001e9080) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 0m0.191s +user 0m0.032s +sys 0m0.036s +milovidov@mtlog-perftest03j:~$ time sudo -u postgres timescaledb-parallel-copy --db-name tutorial --table hits_100m_obfuscated --file dump.tsv --truncate --copy-options "DELIMITER AS e'\t'" --workers 16 -connection 'host=localhost password=12345' +panic: pq: conflicting or redundant options + +goroutine 26 [running]: +main.processBatches(0xc0001330d0, 0xc0001e3020) + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:262 +0x879 +created by main.main + /home/builder/go/src/github.com/timescale/timescaledb-parallel-copy/cmd/timescaledb-parallel-copy/main.go:148 +0x1bb + +real 0m0.169s +user 0m0.056s +sys 0m0.016s +``` + +I will try to avoid `timescaledb-parallel-copy` and use `psql` instead. + +``` +milovidov@mtlog-perftest03j:~$ sudo -u postgres psql +psql (13.4 (Ubuntu 13.4-4.pgdg18.04+1)) +Type "help" for help. + +postgres=# \c tutorial +You are now connected to database "tutorial" as user "postgres". +tutorial=# timing +tutorial-# COPY hits_100m_obfuscated FROM 'dump.tsv' +tutorial-# ; +ERROR: syntax error at or near "timing" +LINE 1: timing + ^ +tutorial=# \timing +Timing is on. +tutorial=# COPY hits_100m_obfuscated FROM 'dump.tsv'; +ERROR: could not open file "dump.tsv" for reading: No such file or directory +HINT: COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \copy. +Time: 4.348 ms +tutorial=# \copy hits_100m_obfuscated FROM 'dump.tsv'; +``` + +It started to do something... fairly slow with using less than one CPU core. + +Folks from TimescaleDB always recommend to enable compression, which is not by default. +Let's read about it: + +https://docs.timescale.com/timescaledb/latest/how-to-guides/compression/ + +> We strongly recommend that you understand how compression works before you start enabling it on your hypertables. + +The amount of hackery to overcome PostgreSQL limitations is overwhelming: + +> When compression is enabled, TimescaleDB converts data stored in many rows into an array. This means that instead of using lots of rows to store the data, it stores the same data in a single row. + +In the meantime, copy finished in "just" 1.5 hours, 19 245 rows/second. This is extremely slow, even for single core. + +``` +tutorial=# \copy hits_100m_obfuscated FROM 'dump.tsv'; +COPY 100000000 +Time: 5195909.154 ms (01:26:35.909) +``` + +## Running Benchmark + +Let's prepare for benchmark... +What is needed to execute single query in batch mode? + +`man psql` + +``` +sudo -u postgres psql tutorial -t -c '\timing' -c 'SELECT 1' | grep 'Time' +``` + +Now we are ready to run our benchmark. + +PostgreSQL does not have `SHOW PROCESSLIST`. +It has `select * from pg_stat_activity;` instead. + +https://ma.ttias.be/show-full-processlist-equivalent-of-mysql-for-postgresql/ + +But it does not show query progress. +The first query `SELECT count(*) FROM hits_100m_obfuscated` just hanged. It reads something from disk... + +Let's check the data volume: + +``` +$ sudo du -hcs /opt/postgresql/ +68G /opt/postgresql/ +``` + +Looks consistent for uncompressed data. + +``` +./benchmark.sh + +grep -oP 'Time: \d+' log | grep -oP '\d+' | awk '{ if (n % 3 == 0) { printf("[") }; ++n; printf("%g", $1 / 1000); if (n % 3 == 0) { printf("],\n") } else { printf(", ") } }' +``` + +Now let's enable compression. + +``` +ALTER TABLE hits_100m_obfuscated SET (timescaledb.compress); +SELECT add_compression_policy('hits_100m_obfuscated', INTERVAL '0 seconds'); +``` + +``` +milovidov@mtlog-perftest03j:~ClickHouse/benchmark/timescaledb$ sudo -u postgres psql tutorial +psql (13.4 (Ubuntu 13.4-4.pgdg18.04+1)) +Type "help" for help. + +tutorial=# ALTER TABLE hits_100m_obfuscated SET (timescaledb.compress); +ALTER TABLE +tutorial=# SELECT add_compression_policy('hits_100m_obfuscated', INTERVAL '0 seconds'); + add_compression_policy +------------------------ + 1000 +(1 row) +``` + +Ok, in `top` I see that it started compression with using single CPU core. + +``` +300464 postgres 20 0 32.456g 932044 911452 D 48.0 0.7 1:08.11 postgres: 13/main: Compression Policy [1000] +``` + +Let's also define better order of data: + +``` +ALTER TABLE hits_100m_obfuscated + SET (timescaledb.compress, + timescaledb.compress_orderby = 'counterid, userid, event_time'); +``` + +The query hanged. Maybe it's waiting for finish of previous compression? + +After several minutes it answered: + +``` +ERROR: cannot change configuration on already compressed chunks +DETAIL: There are compressed chunks that prevent changing the existing compression configuration. +``` + +Ok, at least some of the chunks will have the proper order. + +After a few hours looks like the compression finished. + +``` +sudo ncdu /var/lib/postgresql/13/main/ + +28.9 GiB [##########] /base +``` + +Yes, looks like it's compressed. About two times - not too much. + +Let's rerun the benchmark. + +Ok, it's slightly faster. diff --git a/cmake/autogenerated_versions.txt b/cmake/autogenerated_versions.txt index dd6ead7d97f..f13110d7179 100644 --- a/cmake/autogenerated_versions.txt +++ b/cmake/autogenerated_versions.txt @@ -2,11 +2,11 @@ # NOTE: has nothing common with DBMS_TCP_PROTOCOL_VERSION, # only DBMS_TCP_PROTOCOL_VERSION should be incremented on protocol changes. -SET(VERSION_REVISION 54456) +SET(VERSION_REVISION 54457) SET(VERSION_MAJOR 21) -SET(VERSION_MINOR 11) +SET(VERSION_MINOR 12) SET(VERSION_PATCH 1) -SET(VERSION_GITHASH 7a4a0b0edef0ad6e0aa662cd3b90c3f4acf796e7) -SET(VERSION_DESCRIBE v21.11.1.1-prestable) -SET(VERSION_STRING 21.11.1.1) +SET(VERSION_GITHASH 503a418dedf0011e9040c3a1b6913e0b5488be4c) +SET(VERSION_DESCRIBE v21.12.1.1-prestable) +SET(VERSION_STRING 21.12.1.1) # end of autochange diff --git a/cmake/cpu_features.cmake b/cmake/cpu_features.cmake index 46e42329958..199d1717723 100644 --- a/cmake/cpu_features.cmake +++ b/cmake/cpu_features.cmake @@ -18,6 +18,10 @@ option (ENABLE_PCLMULQDQ "Use pclmulqdq instructions on x86_64" 1) option (ENABLE_POPCNT "Use popcnt instructions on x86_64" 1) option (ENABLE_AVX "Use AVX instructions on x86_64" 0) option (ENABLE_AVX2 "Use AVX2 instructions on x86_64" 0) +option (ENABLE_AVX512 "Use AVX512 instructions on x86_64" 0) +option (ENABLE_BMI "Use BMI instructions on x86_64" 0) +option (ENABLE_AVX2_FOR_SPEC_OP "Use avx2 instructions for specific operations on x86_64" 0) +option (ENABLE_AVX512_FOR_SPEC_OP "Use avx512 instructions for specific operations on x86_64" 0) option (ARCH_NATIVE "Add -march=native compiler flag. This makes your binaries non-portable but more performant code may be generated. This option overrides ENABLE_* options for specific instruction set. Highly not recommended to use." 0) @@ -127,6 +131,57 @@ else () if (HAVE_AVX2 AND ENABLE_AVX2) set (COMPILER_FLAGS "${COMPILER_FLAGS} ${TEST_FLAG}") endif () + + set (TEST_FLAG "-mavx512f -mavx512bw") + set (CMAKE_REQUIRED_FLAGS "${TEST_FLAG} -O0") + check_cxx_source_compiles(" + #include + int main() { + auto a = _mm512_setzero_epi32(); + (void)a; + auto b = _mm512_add_epi16(__m512i(), __m512i()); + (void)b; + return 0; + } + " HAVE_AVX512) + if (HAVE_AVX512 AND ENABLE_AVX512) + set (COMPILER_FLAGS "${COMPILER_FLAGS} ${TEST_FLAG}") + endif () + + set (TEST_FLAG "-mbmi") + set (CMAKE_REQUIRED_FLAGS "${TEST_FLAG} -O0") + check_cxx_source_compiles(" + #include + int main() { + auto a = _blsr_u32(0); + (void)a; + return 0; + } + " HAVE_BMI) + if (HAVE_BMI AND ENABLE_BMI) + set (COMPILER_FLAGS "${COMPILER_FLAGS} ${TEST_FLAG}") + endif () + +#Limit avx2/avx512 flag for specific source build + set (X86_INTRINSICS_FLAGS "") + if (ENABLE_AVX2_FOR_SPEC_OP) + if (HAVE_BMI) + set (X86_INTRINSICS_FLAGS "${X86_INTRINSICS_FLAGS} -mbmi") + endif () + if (HAVE_AVX AND HAVE_AVX2) + set (X86_INTRINSICS_FLAGS "${X86_INTRINSICS_FLAGS} -mavx -mavx2") + endif () + endif () + + if (ENABLE_AVX512_FOR_SPEC_OP) + set (X86_INTRINSICS_FLAGS "") + if (HAVE_BMI) + set (X86_INTRINSICS_FLAGS "${X86_INTRINSICS_FLAGS} -mbmi") + endif () + if (HAVE_AVX512) + set (X86_INTRINSICS_FLAGS "${X86_INTRINSICS_FLAGS} -mavx512f -mavx512bw -mprefer-vector-width=256") + endif () + endif () endif () cmake_pop_check_state () diff --git a/cmake/find/filelog.cmake b/cmake/find/filelog.cmake new file mode 100644 index 00000000000..f545ee9d0ed --- /dev/null +++ b/cmake/find/filelog.cmake @@ -0,0 +1,8 @@ +# StorageFileLog only support Linux platform +if (OS_LINUX) + set (USE_FILELOG 1) + message (STATUS "Using StorageFileLog = 1") +else() + message(STATUS "StorageFileLog is only supported on Linux") +endif () + diff --git a/cmake/tools.cmake b/cmake/tools.cmake index 4b2db0dedab..7a6e3672d17 100644 --- a/cmake/tools.cmake +++ b/cmake/tools.cmake @@ -8,7 +8,7 @@ endif () if (COMPILER_GCC) # Require minimum version of gcc - set (GCC_MINIMUM_VERSION 10) + set (GCC_MINIMUM_VERSION 11) if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${GCC_MINIMUM_VERSION} AND NOT CMAKE_VERSION VERSION_LESS 2.8.9) message (FATAL_ERROR "GCC version must be at least ${GCC_MINIMUM_VERSION}. For example, if GCC ${GCC_MINIMUM_VERSION} is available under gcc-${GCC_MINIMUM_VERSION}, g++-${GCC_MINIMUM_VERSION} names, do the following: export CC=gcc-${GCC_MINIMUM_VERSION} CXX=g++-${GCC_MINIMUM_VERSION}; rm -rf CMakeCache.txt CMakeFiles; and re run cmake or ./release.") endif () @@ -18,6 +18,10 @@ if (COMPILER_GCC) elseif (COMPILER_CLANG) # Require minimum version of clang/apple-clang if (CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") + # If you are developer you can figure out what exact versions of AppleClang are Ok, + # simply remove the following line. + message (FATAL_ERROR "AppleClang is not supported, you should install clang from brew. See the instruction: https://clickhouse.com/docs/en/development/build-osx/") + # AppleClang 10.0.1 (Xcode 10.2) corresponds to LLVM/Clang upstream version 7.0.0 # AppleClang 11.0.0 (Xcode 11.0) corresponds to LLVM/Clang upstream version 8.0.0 set (XCODE_MINIMUM_VERSION 10.2) @@ -31,7 +35,7 @@ elseif (COMPILER_CLANG) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fchar8_t") endif () else () - set (CLANG_MINIMUM_VERSION 9) + set (CLANG_MINIMUM_VERSION 12) if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${CLANG_MINIMUM_VERSION}) message (FATAL_ERROR "Clang version must be at least ${CLANG_MINIMUM_VERSION}.") endif () diff --git a/contrib/NuRaft b/contrib/NuRaft index 7ecb16844af..d10351f312c 160000 --- a/contrib/NuRaft +++ b/contrib/NuRaft @@ -1 +1 @@ -Subproject commit 7ecb16844af6a9c283ad432d85ecc2e7d1544676 +Subproject commit d10351f312c1ae1ca3fdda433693dfbef3acfece diff --git a/contrib/aws b/contrib/aws index 06aa8759d17..00b03604543 160000 --- a/contrib/aws +++ b/contrib/aws @@ -1 +1 @@ -Subproject commit 06aa8759d17f2032ffd5efa83969270ca9ac727b +Subproject commit 00b03604543367d7e310cb0993973fdcb723ea79 diff --git a/contrib/poco b/contrib/poco index 46c80daf1b0..39fd359765a 160000 --- a/contrib/poco +++ b/contrib/poco @@ -1 +1 @@ -Subproject commit 46c80daf1b015aa10474ce82e3d24b578c6ae422 +Subproject commit 39fd359765a3a77b46d94ec3c5def3c7802a920f diff --git a/contrib/protobuf-cmake/CMakeLists.txt b/contrib/protobuf-cmake/CMakeLists.txt index 0ceb72cfbd6..37215b91dbb 100644 --- a/contrib/protobuf-cmake/CMakeLists.txt +++ b/contrib/protobuf-cmake/CMakeLists.txt @@ -17,6 +17,16 @@ endif () add_subdirectory("${protobuf_SOURCE_DIR}/cmake" "${protobuf_BINARY_DIR}") +if (ENABLE_FUZZING) + # `protoc` will be built with sanitizer and it could fail during ClickHouse build + # It easily reproduces in oss-fuzz building pipeline + # To avoid this we can try to build `protoc` without any sanitizer with option `-fno-sanitize=all`, but + # it this case we will face with linker errors, because libcxx still will be built with sanitizer + # So, we can simply suppress all of these failures with a combination this flag and an environment variable + # export MSAN_OPTIONS=exit_code=0 + target_compile_options(protoc PRIVATE "-fsanitize-recover=all") +endif() + # We don't want to stop compilation on warnings in protobuf's headers. # The following line overrides the value assigned by the command target_include_directories() in libprotobuf.cmake set_property(TARGET libprotobuf PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${protobuf_SOURCE_DIR}/src") diff --git a/contrib/snappy b/contrib/snappy index 3f194acb57e..fb057edfed8 160000 --- a/contrib/snappy +++ b/contrib/snappy @@ -1 +1 @@ -Subproject commit 3f194acb57e0487531c96b97af61dcbd025a78a3 +Subproject commit fb057edfed820212076239fd32cb2ff23e9016bf diff --git a/debian/changelog b/debian/changelog index 460424bdb36..a2709485e44 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ -clickhouse (21.11.1.1) unstable; urgency=low +clickhouse (21.12.1.1) unstable; urgency=low * Modified source code - -- clickhouse-release Thu, 09 Sep 2021 12:03:26 +0300 + -- clickhouse-release Tue, 02 Nov 2021 00:56:42 +0300 diff --git a/docker/client/Dockerfile b/docker/client/Dockerfile index 926014da9e6..6f9a957852e 100644 --- a/docker/client/Dockerfile +++ b/docker/client/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:18.04 ARG repository="deb https://repo.clickhouse.com/deb/stable/ main/" -ARG version=21.11.1.* +ARG version=21.12.1.* RUN sed -i 's|http://archive|http://ru.archive|g' /etc/apt/sources.list diff --git a/docker/docs/builder/Dockerfile b/docker/docs/builder/Dockerfile new file mode 100644 index 00000000000..8afddefa41a --- /dev/null +++ b/docker/docs/builder/Dockerfile @@ -0,0 +1,43 @@ +# docker build -t clickhouse/docs-build . +FROM ubuntu:20.04 + +ENV LANG=C.UTF-8 + +RUN sed -i 's|http://archive|http://ru.archive|g' /etc/apt/sources.list + +RUN apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \ + python3-setuptools \ + virtualenv \ + wget \ + bash \ + python \ + curl \ + python3-requests \ + sudo \ + git \ + openssl \ + python3-pip \ + software-properties-common \ + language-pack-zh* \ + chinese* \ + fonts-arphic-ukai \ + fonts-arphic-uming \ + fonts-ipafont-mincho \ + fonts-ipafont-gothic \ + fonts-unfonts-core \ + xvfb \ + nodejs \ + npm \ + openjdk-11-jdk \ + ssh-client \ + && pip --no-cache-dir install scipy \ + && apt-get autoremove --yes \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN wget 'https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb' + +RUN npm i -g purify-css + +RUN pip3 install --ignore-installed --upgrade setuptools pip virtualenv diff --git a/docker/docs/check/Dockerfile b/docker/docs/check/Dockerfile new file mode 100644 index 00000000000..55647df5c3e --- /dev/null +++ b/docker/docs/check/Dockerfile @@ -0,0 +1,9 @@ +# docker build -t clickhouse/docs-check . +FROM clickhouse/docs-builder + +COPY run.sh / + +ENV REPO_PATH=/repo_path +ENV OUTPUT_PATH=/output_path + +CMD ["/bin/bash", "/run.sh"] diff --git a/docker/docs/check/run.sh b/docker/docs/check/run.sh new file mode 100644 index 00000000000..f70f82aeb4c --- /dev/null +++ b/docker/docs/check/run.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -euo pipefail + +cd $REPO_PATH/docs/tools +mkdir venv +virtualenv -p $(which python3) venv +source venv/bin/activate +python3 -m pip install --ignore-installed -r requirements.txt +./build.py --skip-git-log 2>&1 | tee $OUTPUT_PATH/output.log diff --git a/docker/docs/release/Dockerfile b/docker/docs/release/Dockerfile new file mode 100644 index 00000000000..63765180a4c --- /dev/null +++ b/docker/docs/release/Dockerfile @@ -0,0 +1,9 @@ +# docker build -t clickhouse/docs-release . +FROM clickhouse/docs-builder + +COPY run.sh / + +ENV REPO_PATH=/repo_path +ENV OUTPUT_PATH=/output_path + +CMD ["/bin/bash", "/run.sh"] diff --git a/docker/docs/release/run.sh b/docker/docs/release/run.sh new file mode 100644 index 00000000000..e465098c159 --- /dev/null +++ b/docker/docs/release/run.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -euo pipefail + +cd $REPO_PATH/docs/tools +mkdir venv +virtualenv -p $(which python3) venv +source venv/bin/activate +python3 -m pip install --ignore-installed -r requirements.txt +mkdir -p ~/.ssh && ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts +./release.sh 2>&1 | tee tee $OUTPUT_PATH/output.log diff --git a/docker/images.json b/docker/images.json index 3e8adda868c..a6cc821108e 100644 --- a/docker/images.json +++ b/docker/images.json @@ -166,5 +166,20 @@ "docker/test/keeper-jepsen": { "name": "clickhouse/keeper-jepsen-test", "dependent": [] + }, + "docker/docs/builder": { + "name": "clickhouse/docs-builder", + "dependent": [ + "docker/docs/check", + "docker/docs/release" + ] + }, + "docker/docs/check": { + "name": "clickhouse/docs-check", + "dependent": [] + }, + "docker/docs/release": { + "name": "clickhouse/docs-release", + "dependent": [] } } diff --git a/docker/packager/other/fuzzer.sh b/docker/packager/other/fuzzer.sh index 5eec51f9625..baaf3c4bedf 100755 --- a/docker/packager/other/fuzzer.sh +++ b/docker/packager/other/fuzzer.sh @@ -12,19 +12,19 @@ printenv rm -f CMakeCache.txt read -ra CMAKE_FLAGS <<< "${CMAKE_FLAGS:-}" # Hope, that the most part of files will be in cache, so we just link new executables -cmake --debug-trycompile --verbose=1 -DCMAKE_VERBOSE_MAKEFILE=1 -LA -DCMAKE_C_COMPILER="$CC" -DCMAKE_CXX_COMPILER="$CXX" -DENABLE_CLICKHOUSE_ODBC_BRIDGE=OFF \ - -DENABLE_LIBRARIES=0 -DENABLE_SSL=1 -DUSE_INTERNAL_SSL_LIBRARY=1 -DUSE_UNWIND=ON -DENABLE_EMBEDDED_COMPILER=0 \ - -DENABLE_EXAMPLES=0 -DENABLE_UTILS=0 -DENABLE_THINLTO=0 "-DSANITIZE=$SANITIZER" \ - -DENABLE_FUZZING=1 -DFUZZER='libfuzzer' -DENABLE_TCMALLOC=0 -DENABLE_JEMALLOC=0 \ - -DENABLE_CHECK_HEAVY_BUILDS=1 -DGLIBC_COMPATIBILITY=OFF "${CMAKE_FLAGS[@]}" .. +# Please, add or change flags directly in cmake +cmake --debug-trycompile --verbose=1 -DCMAKE_VERBOSE_MAKEFILE=1 -LA -DCMAKE_C_COMPILER="$CC" -DCMAKE_CXX_COMPILER="$CXX" \ + -DSANITIZE="$SANITIZER" -DENABLE_FUZZING=1 -DFUZZER='libfuzzer' -DENABLE_PROTOBUF=1 -DUSE_INTERNAL_PROTOBUF_LIBRARY=1 "${CMAKE_FLAGS[@]}" .. FUZZER_TARGETS=$(find ../src -name '*_fuzzer.cpp' -execdir basename {} .cpp ';' | tr '\n' ' ') +NUM_JOBS=$(($(nproc || grep -c ^processor /proc/cpuinfo))) + mkdir -p /output/fuzzers for FUZZER_TARGET in $FUZZER_TARGETS do # shellcheck disable=SC2086 # No quotes because I want it to expand to nothing if empty. - ninja $NINJA_FLAGS $FUZZER_TARGET + ninja $NINJA_FLAGS $FUZZER_TARGET -j $NUM_JOBS # Find this binary in build directory and strip it FUZZER_PATH=$(find ./src -name "$FUZZER_TARGET") strip --strip-unneeded "$FUZZER_PATH" diff --git a/docker/server/Dockerfile b/docker/server/Dockerfile index 48b59d1e754..04842e7a3de 100644 --- a/docker/server/Dockerfile +++ b/docker/server/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:20.04 ARG repository="deb https://repo.clickhouse.com/deb/stable/ main/" -ARG version=21.11.1.* +ARG version=21.12.1.* ARG gosu_ver=1.10 # set non-empty deb_location_url url to create a docker image diff --git a/docker/server/entrypoint.sh b/docker/server/entrypoint.sh index 4dd54074d55..103f2fdb47f 100755 --- a/docker/server/entrypoint.sh +++ b/docker/server/entrypoint.sh @@ -86,7 +86,7 @@ done if [ -n "$CLICKHOUSE_USER" ] && [ "$CLICKHOUSE_USER" != "default" ] || [ -n "$CLICKHOUSE_PASSWORD" ]; then echo "$0: create new user '$CLICKHOUSE_USER' instead 'default'" cat < /etc/clickhouse-server/users.d/default-user.xml - + @@ -103,7 +103,7 @@ if [ -n "$CLICKHOUSE_USER" ] && [ "$CLICKHOUSE_USER" != "default" ] || [ -n "$CL ${CLICKHOUSE_ACCESS_MANAGEMENT} - + EOT fi diff --git a/docker/test/Dockerfile b/docker/test/Dockerfile index fc8c2ebbe6e..76967da9f9a 100644 --- a/docker/test/Dockerfile +++ b/docker/test/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:18.04 ARG repository="deb https://repo.clickhouse.com/deb/stable/ main/" -ARG version=21.11.1.* +ARG version=21.12.1.* RUN apt-get update && \ apt-get install -y apt-transport-https dirmngr && \ diff --git a/docker/test/fasttest/run.sh b/docker/test/fasttest/run.sh index 2e37522f1b4..925ac6f797c 100755 --- a/docker/test/fasttest/run.sh +++ b/docker/test/fasttest/run.sh @@ -264,7 +264,7 @@ function run_tests set +e time clickhouse-test --hung-check -j 8 --order=random \ - --fast-tests-only --no-long --testname --shard --zookeeper \ + --fast-tests-only --no-long --testname --shard --zookeeper --check-zookeeper-session \ -- "$FASTTEST_FOCUS" 2>&1 \ | ts '%Y-%m-%d %H:%M:%S' \ | tee "$FASTTEST_OUTPUT/test_result.txt" diff --git a/docker/test/fuzzer/run-fuzzer.sh b/docker/test/fuzzer/run-fuzzer.sh index 15590902b68..0c11e0a615d 100755 --- a/docker/test/fuzzer/run-fuzzer.sh +++ b/docker/test/fuzzer/run-fuzzer.sh @@ -1,5 +1,5 @@ #!/bin/bash -# shellcheck disable=SC2086,SC2001 +# shellcheck disable=SC2086,SC2001,SC2046 set -eux set -o pipefail @@ -13,24 +13,48 @@ script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" echo "$script_dir" repo_dir=ch BINARY_TO_DOWNLOAD=${BINARY_TO_DOWNLOAD:="clang-13_debug_none_bundled_unsplitted_disable_False_binary"} +BINARY_URL_TO_DOWNLOAD=${BINARY_URL_TO_DOWNLOAD:="https://clickhouse-builds.s3.yandex.net/$PR_TO_TEST/$SHA_TO_TEST/clickhouse_build_check/$BINARY_TO_DOWNLOAD/clickhouse"} function clone { - # The download() function is dependent on CI binaries anyway, so we can take - # the repo from the CI as well. For local runs, start directly from the "fuzz" - # stage. - rm -rf ch ||: - mkdir ch ||: - wget -nv -nd -c "https://clickhouse-test-reports.s3.yandex.net/$PR_TO_TEST/$SHA_TO_TEST/repo/clickhouse_no_subs.tar.gz" - tar -C ch --strip-components=1 -xf clickhouse_no_subs.tar.gz + # For local runs, start directly from the "fuzz" stage. + rm -rf "$repo_dir" ||: + mkdir "$repo_dir" ||: + + git clone --depth 1 https://github.com/ClickHouse/ClickHouse.git -- "$repo_dir" 2>&1 | ts '%Y-%m-%d %H:%M:%S' + ( + cd "$repo_dir" + if [ "$PR_TO_TEST" != "0" ]; then + if git fetch --depth 1 origin "+refs/pull/$PR_TO_TEST/merge"; then + git checkout FETCH_HEAD + echo "Checked out pull/$PR_TO_TEST/merge ($(git rev-parse FETCH_HEAD))" + else + git fetch --depth 1 origin "+refs/pull/$PR_TO_TEST/head" + git checkout "$SHA_TO_TEST" + echo "Checked out nominal SHA $SHA_TO_TEST for PR $PR_TO_TEST" + fi + git diff --name-only master HEAD | tee ci-changed-files.txt + else + if [ -v COMMIT_SHA ]; then + git fetch --depth 2 origin "$SHA_TO_TEST" + git checkout "$SHA_TO_TEST" + echo "Checked out nominal SHA $SHA_TO_TEST for master" + else + git fetch --depth 2 origin + echo "Using default repository head $(git rev-parse HEAD)" + fi + git diff --name-only HEAD~1 HEAD | tee ci-changed-files.txt + fi + cd - + ) + ls -lath ||: + } function download { - wget -nv -nd -c "https://clickhouse-builds.s3.yandex.net/$PR_TO_TEST/$SHA_TO_TEST/clickhouse_build_check/$BINARY_TO_DOWNLOAD/clickhouse" & - wget -nv -nd -c "https://clickhouse-test-reports.s3.yandex.net/$PR_TO_TEST/$SHA_TO_TEST/repo/ci-changed-files.txt" & - wait + wget -nv -nd -c "$BINARY_URL_TO_DOWNLOAD" chmod +x clickhouse ln -s ./clickhouse ./clickhouse-server @@ -113,7 +137,7 @@ function fuzz # Obtain the list of newly added tests. They will be fuzzed in more extreme way than other tests. # Don't overwrite the NEW_TESTS_OPT so that it can be set from the environment. - NEW_TESTS="$(sed -n 's!\(^tests/queries/0_stateless/.*\.sql\(\.j2\)\?\)$!ch/\1!p' ci-changed-files.txt | sort -R)" + NEW_TESTS="$(sed -n 's!\(^tests/queries/0_stateless/.*\.sql\(\.j2\)\?\)$!ch/\1!p' $repo_dir/ci-changed-files.txt | sort -R)" # ci-changed-files.txt contains also files that has been deleted/renamed, filter them out. NEW_TESTS="$(filter_exists_and_template $NEW_TESTS)" if [[ -n "$NEW_TESTS" ]] diff --git a/docker/test/performance-comparison/Dockerfile b/docker/test/performance-comparison/Dockerfile index 88b66d42ecb..73d9454ab7f 100644 --- a/docker/test/performance-comparison/Dockerfile +++ b/docker/test/performance-comparison/Dockerfile @@ -33,7 +33,7 @@ RUN apt-get update \ tzdata \ vim \ wget \ - && pip3 --no-cache-dir install 'git+https://github.com/mymarilyn/clickhouse-driver.git' scipy \ + && pip3 --no-cache-dir install 'clickhouse-driver==0.2.1' scipy \ && apt-get purge --yes python3-dev g++ \ && apt-get autoremove --yes \ && apt-get clean \ diff --git a/docker/test/performance-comparison/compare.sh b/docker/test/performance-comparison/compare.sh index c97e8a6ed2b..2e8517d71c9 100755 --- a/docker/test/performance-comparison/compare.sh +++ b/docker/test/performance-comparison/compare.sh @@ -196,7 +196,6 @@ function run_tests test_files=$(ls "$test_prefix" | grep "$CHPC_TEST_GREP" | xargs -I{} -n1 readlink -f "$test_prefix/{}") elif [ "$PR_TO_TEST" -ne 0 ] \ && [ "$(wc -l < changed-test-definitions.txt)" -gt 0 ] \ - && [ "$(wc -l < changed-test-scripts.txt)" -eq 0 ] \ && [ "$(wc -l < other-changed-files.txt)" -eq 0 ] then # If only the perf tests were changed in the PR, we will run only these @@ -208,15 +207,15 @@ function run_tests test_files=$(ls "$test_prefix"/*.xml) fi - # For PRs w/o changes in test definitons and scripts, test only a subset of - # queries, and run them less times. If the corresponding environment variables - # are already set, keep those values. - if [ "$PR_TO_TEST" -ne 0 ] \ - && [ "$(wc -l < changed-test-definitions.txt)" -eq 0 ] \ - && [ "$(wc -l < changed-test-scripts.txt)" -eq 0 ] + # For PRs w/o changes in test definitons, test only a subset of queries, + # and run them less times. If the corresponding environment variables are + # already set, keep those values. + # + # NOTE: too high CHPC_RUNS/CHPC_MAX_QUERIES may hit internal CI timeout. + if [ "$PR_TO_TEST" -ne 0 ] && [ "$(wc -l < changed-test-definitions.txt)" -eq 0 ] then CHPC_RUNS=${CHPC_RUNS:-7} - CHPC_MAX_QUERIES=${CHPC_MAX_QUERIES:-20} + CHPC_MAX_QUERIES=${CHPC_MAX_QUERIES:-10} else CHPC_RUNS=${CHPC_RUNS:-13} CHPC_MAX_QUERIES=${CHPC_MAX_QUERIES:-0} @@ -319,14 +318,14 @@ function get_profiles wait - clickhouse-client --port $LEFT_SERVER_PORT --query "select * from system.query_log where type = 'QueryFinish' format TSVWithNamesAndTypes" > left-query-log.tsv ||: & + clickhouse-client --port $LEFT_SERVER_PORT --query "select * from system.query_log where type in ('QueryFinish', 'ExceptionWhileProcessing') format TSVWithNamesAndTypes" > left-query-log.tsv ||: & clickhouse-client --port $LEFT_SERVER_PORT --query "select * from system.query_thread_log format TSVWithNamesAndTypes" > left-query-thread-log.tsv ||: & clickhouse-client --port $LEFT_SERVER_PORT --query "select * from system.trace_log format TSVWithNamesAndTypes" > left-trace-log.tsv ||: & clickhouse-client --port $LEFT_SERVER_PORT --query "select arrayJoin(trace) addr, concat(splitByChar('/', addressToLine(addr))[-1], '#', demangle(addressToSymbol(addr)) ) name from system.trace_log group by addr format TSVWithNamesAndTypes" > left-addresses.tsv ||: & clickhouse-client --port $LEFT_SERVER_PORT --query "select * from system.metric_log format TSVWithNamesAndTypes" > left-metric-log.tsv ||: & clickhouse-client --port $LEFT_SERVER_PORT --query "select * from system.asynchronous_metric_log format TSVWithNamesAndTypes" > left-async-metric-log.tsv ||: & - clickhouse-client --port $RIGHT_SERVER_PORT --query "select * from system.query_log where type = 'QueryFinish' format TSVWithNamesAndTypes" > right-query-log.tsv ||: & + clickhouse-client --port $RIGHT_SERVER_PORT --query "select * from system.query_log where type in ('QueryFinish', 'ExceptionWhileProcessing') format TSVWithNamesAndTypes" > right-query-log.tsv ||: & clickhouse-client --port $RIGHT_SERVER_PORT --query "select * from system.query_thread_log format TSVWithNamesAndTypes" > right-query-thread-log.tsv ||: & clickhouse-client --port $RIGHT_SERVER_PORT --query "select * from system.trace_log format TSVWithNamesAndTypes" > right-trace-log.tsv ||: & clickhouse-client --port $RIGHT_SERVER_PORT --query "select arrayJoin(trace) addr, concat(splitByChar('/', addressToLine(addr))[-1], '#', demangle(addressToSymbol(addr)) ) name from system.trace_log group by addr format TSVWithNamesAndTypes" > right-addresses.tsv ||: & @@ -635,7 +634,7 @@ create view query_display_names as select * from create view partial_query_times as select * from file('analyze/partial-query-times.tsv', TSVWithNamesAndTypes, - 'test text, query_index int, time_stddev float, time_median float') + 'test text, query_index int, time_stddev float, time_median double') ; -- Report for partial queries that we could only run on the new server (e.g. diff --git a/docker/test/performance-comparison/config/users.d/perf-comparison-tweaks-users.xml b/docker/test/performance-comparison/config/users.d/perf-comparison-tweaks-users.xml index a9ae31bf38c..093834943a3 100644 --- a/docker/test/performance-comparison/config/users.d/perf-comparison-tweaks-users.xml +++ b/docker/test/performance-comparison/config/users.d/perf-comparison-tweaks-users.xml @@ -24,6 +24,13 @@ 60 + + + 0 + 0 + + 0 diff --git a/docker/test/performance-comparison/entrypoint.sh b/docker/test/performance-comparison/entrypoint.sh index 1295e5567fb..d87b95b1129 100755 --- a/docker/test/performance-comparison/entrypoint.sh +++ b/docker/test/performance-comparison/entrypoint.sh @@ -102,7 +102,6 @@ then base=$(git -C right/ch merge-base pr origin/master) git -C right/ch diff --name-only "$base" pr -- . | tee all-changed-files.txt git -C right/ch diff --name-only "$base" pr -- tests/performance | tee changed-test-definitions.txt - git -C right/ch diff --name-only "$base" pr -- docker/test/performance-comparison | tee changed-test-scripts.txt git -C right/ch diff --name-only "$base" pr -- :!tests/performance :!docker/test/performance-comparison | tee other-changed-files.txt fi diff --git a/docker/test/performance-comparison/perf.py b/docker/test/performance-comparison/perf.py index a6e7e397e32..301c5cc7d73 100755 --- a/docker/test/performance-comparison/perf.py +++ b/docker/test/performance-comparison/perf.py @@ -283,8 +283,11 @@ for query_index in queries_to_run: # test coverage. We disable profiler for normal runs because # it makes the results unstable. res = c.execute(q, query_id = prewarm_id, - settings = {'max_execution_time': args.max_query_seconds, - 'query_profiler_real_time_period_ns': 10000000}) + settings = { + 'max_execution_time': args.max_query_seconds, + 'query_profiler_real_time_period_ns': 10000000, + 'memory_profiler_step': '4Mi', + }) except clickhouse_driver.errors.Error as e: # Add query id to the exception to make debugging easier. e.args = (prewarm_id, *e.args) diff --git a/docker/test/stateful/Dockerfile b/docker/test/stateful/Dockerfile index c237a712f52..b6e9fad600c 100644 --- a/docker/test/stateful/Dockerfile +++ b/docker/test/stateful/Dockerfile @@ -9,6 +9,7 @@ RUN apt-get update -y \ COPY s3downloader /s3downloader +ENV S3_URL="https://clickhouse-datasets.s3.yandex.net" ENV DATASETS="hits visits" COPY run.sh / diff --git a/docker/test/stateful/run.sh b/docker/test/stateful/run.sh index 69b435857d9..a8cae760d55 100755 --- a/docker/test/stateful/run.sh +++ b/docker/test/stateful/run.sh @@ -56,7 +56,7 @@ function start() start # shellcheck disable=SC2086 # No quotes because I want to split it into words. -/s3downloader --dataset-names $DATASETS +/s3downloader --url-prefix "$S3_URL" --dataset-names $DATASETS chmod 777 -R /var/lib/clickhouse clickhouse-client --query "SHOW DATABASES" @@ -109,7 +109,7 @@ function run_tests() fi set +e - clickhouse-test --testname --shard --zookeeper --no-stateless --hung-check --print-time "${ADDITIONAL_OPTIONS[@]}" \ + clickhouse-test --testname --shard --zookeeper --check-zookeeper-session --no-stateless --hung-check --print-time "${ADDITIONAL_OPTIONS[@]}" \ "$SKIP_TESTS_OPTION" 2>&1 | ts '%Y-%m-%d %H:%M:%S' | tee test_output/test_result.txt set -e } diff --git a/docker/test/stateless/run.sh b/docker/test/stateless/run.sh index ce1d1b59a55..ad0a805488f 100755 --- a/docker/test/stateless/run.sh +++ b/docker/test/stateless/run.sh @@ -97,7 +97,7 @@ function run_tests() fi set +e - clickhouse-test --testname --shard --zookeeper --hung-check --print-time \ + clickhouse-test --testname --shard --zookeeper --check-zookeeper-session --hung-check --print-time \ --test-runs "$NUM_TRIES" "${ADDITIONAL_OPTIONS[@]}" 2>&1 \ | ts '%Y-%m-%d %H:%M:%S' \ | tee -a test_output/test_result.txt @@ -139,12 +139,17 @@ mv /var/log/clickhouse-server/stderr.log /test_output/ ||: if [[ -n "$WITH_COVERAGE" ]] && [[ "$WITH_COVERAGE" -eq 1 ]]; then tar -chf /test_output/clickhouse_coverage.tar.gz /profraw ||: fi -tar -chf /test_output/text_log_dump.tar /var/lib/clickhouse/data/system/text_log ||: -tar -chf /test_output/query_log_dump.tar /var/lib/clickhouse/data/system/query_log ||: -tar -chf /test_output/zookeeper_log_dump.tar /var/lib/clickhouse/data/system/zookeeper_log ||: -tar -chf /test_output/trace_log_dump.tar /var/lib/clickhouse/data/system/trace_log ||: + tar -chf /test_output/coordination.tar /var/lib/clickhouse/coordination ||: +# Replace the engine with Ordinary to avoid extra symlinks stuff in artifacts. +# (so that clickhouse-local --path can read it w/o extra care). +sed -i -e "s/ATTACH DATABASE _ UUID '[^']*'/ATTACH DATABASE system/" -e "s/Atomic/Ordinary/" /var/lib/clickhouse/metadata/system.sql +for table in text_log query_log zookeeper_log trace_log; do + sed -i "s/ATTACH TABLE _ UUID '[^']*'/ATTACH TABLE $table/" /var/lib/clickhouse/metadata/system/${table}.sql + tar -chf /test_output/${table}_dump.tar /var/lib/clickhouse/metadata/system.sql /var/lib/clickhouse/metadata/system/${table}.sql /var/lib/clickhouse/data/system/${table} ||: +done + if [[ -n "$USE_DATABASE_REPLICATED" ]] && [[ "$USE_DATABASE_REPLICATED" -eq 1 ]]; then grep -Fa "Fatal" /var/log/clickhouse-server/clickhouse-server1.log ||: grep -Fa "Fatal" /var/log/clickhouse-server/clickhouse-server2.log ||: diff --git a/docker/test/stress/Dockerfile b/docker/test/stress/Dockerfile index 3fe1b790d5a..e28d25c9485 100644 --- a/docker/test/stress/Dockerfile +++ b/docker/test/stress/Dockerfile @@ -26,4 +26,6 @@ COPY ./stress /stress COPY run.sh / ENV DATASETS="hits visits" +ENV S3_URL="https://clickhouse-datasets.s3.yandex.net" + CMD ["/bin/bash", "/run.sh"] diff --git a/docker/test/stress/run.sh b/docker/test/stress/run.sh index afdc026732f..04845f2a4d1 100755 --- a/docker/test/stress/run.sh +++ b/docker/test/stress/run.sh @@ -46,11 +46,11 @@ function configure() sudo chown root: /var/lib/clickhouse # Set more frequent update period of asynchronous metrics to more frequently update information about real memory usage (less chance of OOM). - echo "1" \ + echo "1" \ > /etc/clickhouse-server/config.d/asynchronous_metrics_update_period_s.xml # Set maximum memory usage as half of total memory (less chance of OOM). - echo "0.5" \ + echo "0.5" \ > /etc/clickhouse-server/config.d/max_server_memory_usage_to_ram_ratio.xml } @@ -112,7 +112,7 @@ configure start # shellcheck disable=SC2086 # No quotes because I want to split it into words. -/s3downloader --dataset-names $DATASETS +/s3downloader --url-prefix "$S3_URL" --dataset-names $DATASETS chmod 777 -R /var/lib/clickhouse clickhouse-client --query "ATTACH DATABASE IF NOT EXISTS datasets ENGINE = Ordinary" clickhouse-client --query "CREATE DATABASE IF NOT EXISTS test" @@ -183,8 +183,14 @@ done tar -chf /test_output/coordination.tar /var/lib/clickhouse/coordination ||: mv /var/log/clickhouse-server/stderr.log /test_output/ -tar -chf /test_output/query_log_dump.tar /var/lib/clickhouse/data/system/query_log ||: -tar -chf /test_output/trace_log_dump.tar /var/lib/clickhouse/data/system/trace_log ||: + +# Replace the engine with Ordinary to avoid extra symlinks stuff in artifacts. +# (so that clickhouse-local --path can read it w/o extra care). +sed -i -e "s/ATTACH DATABASE _ UUID '[^']*'/ATTACH DATABASE system/" -e "s/Atomic/Ordinary/" /var/lib/clickhouse/metadata/system.sql +for table in query_log trace_log; do + sed -i "s/ATTACH TABLE _ UUID '[^']*'/ATTACH TABLE $table/" /var/lib/clickhouse/metadata/system/${table}.sql + tar -chf /test_output/${table}_dump.tar /var/lib/clickhouse/metadata/system.sql /var/lib/clickhouse/metadata/system/${table}.sql /var/lib/clickhouse/data/system/${table} ||: +done # Write check result into check_status.tsv clickhouse-local --structure "test String, res String" -q "SELECT 'failure', test FROM table WHERE res != 'OK' order by (lower(test) like '%hung%') LIMIT 1" < /test_output/test_results.tsv > /test_output/check_status.tsv diff --git a/docker/test/style/Dockerfile b/docker/test/style/Dockerfile index 33cdb9db57a..a9c1eca8de4 100644 --- a/docker/test/style/Dockerfile +++ b/docker/test/style/Dockerfile @@ -10,7 +10,7 @@ RUN apt-get update && env DEBIAN_FRONTEND=noninteractive apt-get install --yes \ python3-pip \ pylint \ yamllint \ - && pip3 install codespell + && pip3 install codespell PyGithub boto3 unidiff COPY run.sh / COPY process_style_check_result.py / diff --git a/docs/_includes/install/universal.sh b/docs/_includes/install/universal.sh index eaea4cc69ed..ad0eb4979a3 100755 --- a/docs/_includes/install/universal.sh +++ b/docs/_includes/install/universal.sh @@ -50,7 +50,7 @@ URL="https://builds.clickhouse.com/master/${DIR}/clickhouse" echo echo "Will download ${URL}" echo -curl -O "${URL}" && chmod a+x clickhouse && +curl -O "${URL}" && chmod a+x clickhouse || exit 1 echo echo "Successfully downloaded the ClickHouse binary, you can run it as: ./clickhouse" diff --git a/docs/en/development/build-osx.md b/docs/en/development/build-osx.md index d188b4bb147..0cd69312bb6 100644 --- a/docs/en/development/build-osx.md +++ b/docs/en/development/build-osx.md @@ -3,9 +3,15 @@ toc_priority: 65 toc_title: Build on Mac OS X --- +# You don't have to build ClickHouse + +You can install ClickHouse as follows: https://clickhouse.com/#quick-start +Choose Mac x86 or M1. + # How to Build ClickHouse on Mac OS X {#how-to-build-clickhouse-on-mac-os-x} -Build should work on x86_64 (Intel) and arm64 (Apple Silicon) based macOS 10.15 (Catalina) and higher with recent Xcode's native AppleClang, or Homebrew's vanilla Clang or GCC compilers. +Build should work on x86_64 (Intel) and arm64 (Apple Silicon) based macOS 10.15 (Catalina) and higher with Homebrew's vanilla Clang. +It is always recommended to use `clang` compiler. It is possible to use XCode's `AppleClang` or `gcc` but it's strongly discouraged. ## Install Homebrew {#install-homebrew} @@ -45,18 +51,6 @@ git clone --recursive git@github.com:ClickHouse/ClickHouse.git ## Build ClickHouse {#build-clickhouse} -To build using Xcode's native AppleClang compiler: - -``` bash -cd ClickHouse -rm -rf build -mkdir build -cd build -cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. -cmake --build . --config RelWithDebInfo -cd .. -``` - To build using Homebrew's vanilla Clang compiler: ``` bash @@ -69,7 +63,19 @@ cmake --build . --config RelWithDebInfo cd .. ``` -To build using Homebrew's vanilla GCC compiler: +To build using Xcode's native AppleClang compiler (this option is strongly not recommended; use the option above): + +``` bash +cd ClickHouse +rm -rf build +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. +cmake --build . --config RelWithDebInfo +cd .. +``` + +To build using Homebrew's vanilla GCC compiler (this option is absolutely not recommended, I'm wondering why do we ever have it): ``` bash cd ClickHouse diff --git a/docs/en/engines/database-engines/replicated.md b/docs/en/engines/database-engines/replicated.md index 5ce73604207..bdc17d32393 100644 --- a/docs/en/engines/database-engines/replicated.md +++ b/docs/en/engines/database-engines/replicated.md @@ -35,6 +35,8 @@ The [system.clusters](../../operations/system-tables/clusters.md) system table c When creating a new replica of the database, this replica creates tables by itself. If the replica has been unavailable for a long time and has lagged behind the replication log — it checks its local metadata with the current metadata in ZooKeeper, moves the extra tables with data to a separate non-replicated database (so as not to accidentally delete anything superfluous), creates the missing tables, updates the table names if they have been renamed. The data is replicated at the `ReplicatedMergeTree` level, i.e. if the table is not replicated, the data will not be replicated (the database is responsible only for metadata). +[`ALTER TABLE ATTACH|FETCH|DROP|DROP DETACHED|DETACH PARTITION|PART`](../../sql-reference/statements/alter/partition.md) queries are allowed but not replicated. The database engine will only add/fetch/remove the partition/part to the current replica. However, if the table itself uses a Replicated table engine, then the data will be replicated after using `ATTACH`. + ## Usage Example {#usage-example} Creating a cluster with three hosts: diff --git a/docs/en/engines/table-engines/integrations/mongodb.md b/docs/en/engines/table-engines/integrations/mongodb.md index b8a9bb19a05..52876674475 100644 --- a/docs/en/engines/table-engines/integrations/mongodb.md +++ b/docs/en/engines/table-engines/integrations/mongodb.md @@ -36,7 +36,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name Create a table in ClickHouse which allows to read data from MongoDB collection: -``` text +``` sql CREATE TABLE mongo_table ( key UInt64, @@ -46,7 +46,7 @@ CREATE TABLE mongo_table To read from an SSL secured MongoDB server: -``` text +``` sql CREATE TABLE mongo_table_ssl ( key UInt64, diff --git a/docs/en/getting-started/install.md b/docs/en/getting-started/install.md index 06186842809..4a97ab6589d 100644 --- a/docs/en/getting-started/install.md +++ b/docs/en/getting-started/install.md @@ -27,11 +27,10 @@ It is recommended to use official pre-compiled `deb` packages for Debian or Ubun {% include 'install/deb.sh' %} ``` -You can replace `stable` with `lts` or `testing` to use different [“release trains”](../faq/operations/production.md) based on your needs. +You can replace `stable` with `lts` or `testing` to use different [release trains](../faq/operations/production.md) based on your needs. You can also download and install packages manually from [here](https://repo.clickhouse.com/deb/stable/main/). - #### Packages {#packages} - `clickhouse-common-static` — Installs ClickHouse compiled binary files. diff --git a/docs/en/interfaces/formats.md b/docs/en/interfaces/formats.md index 57459152129..a79abc05bbc 100644 --- a/docs/en/interfaces/formats.md +++ b/docs/en/interfaces/formats.md @@ -16,10 +16,13 @@ The supported formats are: | [TabSeparatedRaw](#tabseparatedraw) | ✔ | ✔ | | [TabSeparatedWithNames](#tabseparatedwithnames) | ✔ | ✔ | | [TabSeparatedWithNamesAndTypes](#tabseparatedwithnamesandtypes) | ✔ | ✔ | +| [TabSeparatedRawWithNames](#tabseparatedrawwithnames) | ✔ | ✔ | +| [TabSeparatedRawWithNamesAndTypes](#tabseparatedrawwithnamesandtypes) | ✔ | ✔ | | [Template](#format-template) | ✔ | ✔ | | [TemplateIgnoreSpaces](#templateignorespaces) | ✔ | ✗ | | [CSV](#csv) | ✔ | ✔ | | [CSVWithNames](#csvwithnames) | ✔ | ✔ | +| [CSVWithNamesAndTypes](#csvwithnamesandtypes) | ✔ | ✔ | | [CustomSeparated](#format-customseparated) | ✔ | ✔ | | [Values](#data-format-values) | ✔ | ✔ | | [Vertical](#vertical) | ✗ | ✔ | @@ -33,8 +36,10 @@ The supported formats are: | [JSONStringsEachRow](#jsonstringseachrow) | ✔ | ✔ | | [JSONStringsEachRowWithProgress](#jsonstringseachrowwithprogress) | ✗ | ✔ | | [JSONCompactEachRow](#jsoncompacteachrow) | ✔ | ✔ | +| [JSONCompactEachRowWithNames](#jsoncompacteachrowwithnames) | ✔ | ✔ | | [JSONCompactEachRowWithNamesAndTypes](#jsoncompacteachrowwithnamesandtypes) | ✔ | ✔ | | [JSONCompactStringsEachRow](#jsoncompactstringseachrow) | ✔ | ✔ | +| [JSONCompactStringsEachRowWithNames](#jsoncompactstringseachrowwithnames) | ✔ | ✔ | | [JSONCompactStringsEachRowWithNamesAndTypes](#jsoncompactstringseachrowwithnamesandtypes) | ✔ | ✔ | | [TSKV](#tskv) | ✔ | ✔ | | [Pretty](#pretty) | ✗ | ✔ | @@ -51,6 +56,7 @@ The supported formats are: | [ArrowStream](#data-format-arrow-stream) | ✔ | ✔ | | [ORC](#data-format-orc) | ✔ | ✔ | | [RowBinary](#rowbinary) | ✔ | ✔ | +| [RowBinaryWithNames](#rowbinarywithnamesandtypes) | ✔ | ✔ | | [RowBinaryWithNamesAndTypes](#rowbinarywithnamesandtypes) | ✔ | ✔ | | [Native](#native) | ✔ | ✔ | | [Null](#null) | ✗ | ✔ | @@ -127,6 +133,9 @@ Arrays are written as a list of comma-separated values in square brackets. Numbe [NULL](../sql-reference/syntax.md) is formatted according to setting [format_tsv_null_representation](../operations/settings/settings.md#settings-format_tsv_null_representation) (default value is `\N`). +If setting [input_format_tsv_empty_as_default](../operations/settings/settings.md#settings-input_format_tsv_empty_as_default) is enabled, +empty input fields are replaced with default values. For complex default expressions [input_format_defaults_for_omitted_fields](../operations/settings/settings.md#settings-input_format_defaults_for_omitted_fields) must be enabled too. + Each element of [Nested](../sql-reference/data-types/nested-data-structures/nested.md) structures is represented as array. For example: @@ -165,18 +174,35 @@ This format is also available under the name `TSVRaw`. ## TabSeparatedWithNames {#tabseparatedwithnames} Differs from the `TabSeparated` format in that the column names are written in the first row. -During parsing, the first row is completely ignored. You can’t use column names to determine their position or to check their correctness. -(Support for parsing the header row may be added in the future.) +If setting [input_format_with_names_use_header](../operations/settings/settings.md#settings-input_format_with_names_use_header) is set to 1, +the columns from input data will be mapped to the columns from the table by their names, columns with unknown names will be skipped if setting [input_format_skip_unknown_fields](../operations/settings/settings.md#settings-input_format_skip_unknown_fields) is set to 1. +Otherwise, the first row will be skipped. This format is also available under the name `TSVWithNames`. ## TabSeparatedWithNamesAndTypes {#tabseparatedwithnamesandtypes} Differs from the `TabSeparated` format in that the column names are written to the first row, while the column types are in the second row. -During parsing, the first and second rows are completely ignored. +The first row with names is processed the same way as in `TabSeparatedWithNames` format. +If setting [input_format_with_types_use_header](../operations/settings/settings.md#settings-input_format_with_types_use_header) is set to 1, +the types from input data will be compared with the types of the corresponding columns from the table. Otherwise, the second row will be skipped. This format is also available under the name `TSVWithNamesAndTypes`. +## TabSeparatedRawWithNames {#tabseparatedrawwithnames} + +Differs from `TabSeparatedWithNames` format in that the rows are written without escaping. +When parsing with this format, tabs or linefeeds are not allowed in each field. + +This format is also available under the name `TSVRawWithNames`. + +## TabSeparatedWithNamesAndTypes {#tabseparatedrawwithnamesandtypes} + +Differs from `TabSeparatedWithNamesAndTypes` format in that the rows are written without escaping. +When parsing with this format, tabs or linefeeds are not allowed in each field. + +This format is also available under the name `TSVRawWithNamesAndNames`. + ## Template {#format-template} This format allows specifying a custom format string with placeholders for values with a specified escaping rule. @@ -197,7 +223,7 @@ where `delimiter_i` is a delimiter between values (`$` symbol can be escaped as - `Raw` (without escaping, similarly to `TSVRaw`) - `None` (no escaping rule, see further) -If an escaping rule is omitted, then `None` will be used. `XML` and `Raw` are suitable only for output. +If an escaping rule is omitted, then `None` will be used. `XML` is suitable only for output. So, for the following format string: @@ -377,9 +403,8 @@ $ clickhouse-client --format_csv_delimiter="|" --query="INSERT INTO test.csv FOR When parsing, all values can be parsed either with or without quotes. Both double and single quotes are supported. Rows can also be arranged without quotes. In this case, they are parsed up to the delimiter character or line feed (CR or LF). In violation of the RFC, when parsing rows without quotes, the leading and trailing spaces and tabs are ignored. For the line feed, Unix (LF), Windows (CR LF) and Mac OS Classic (CR LF) types are all supported. -Empty unquoted input values are replaced with default values for the respective columns, if -[input_format_defaults_for_omitted_fields](../operations/settings/settings.md#session_settings-input_format_defaults_for_omitted_fields) -is enabled. +If setting [input_format_csv_empty_as_default](../operations/settings/settings.md#settings-input_format_csv_empty_as_default) is enabled, +empty unquoted input values are replaced with default values. For complex default expressions [input_format_defaults_for_omitted_fields](../operations/settings/settings.md#settings-input_format_defaults_for_omitted_fields) must be enabled too. `NULL` is formatted according to setting [format_csv_null_representation](../operations/settings/settings.md#settings-format_csv_null_representation) (default value is `\N`). @@ -387,7 +412,11 @@ The CSV format supports the output of totals and extremes the same way as `TabSe ## CSVWithNames {#csvwithnames} -Also prints the header row, similar to [TabSeparatedWithNames](#tabseparatedwithnames). +Also prints the header row with column names, similar to [TabSeparatedWithNames](#tabseparatedwithnames). + +## CSVWithNamesAndTypes {#csvwithnamesandtypes} + +Also prints two header rows with column names and types, similar to [TabSeparatedWithNamesAndTypes](#tabseparatedwithnamesandtypes). ## CustomSeparated {#format-customseparated} @@ -659,10 +688,21 @@ Differs from `JSONEachRow`/`JSONStringsEachRow` in that ClickHouse will also yie {"progress":{"read_rows":"3","read_bytes":"24","written_rows":"0","written_bytes":"0","total_rows_to_read":"3"}} ``` +## JSONCompactEachRowWithNames {#jsoncompacteachrowwithnames} + +Differs from `JSONCompactEachRow` format in that it also prints the header row with column names, similar to [TabSeparatedWithNames](#tabseparatedwithnames). + ## JSONCompactEachRowWithNamesAndTypes {#jsoncompacteachrowwithnamesandtypes} + +Differs from `JSONCompactEachRow` format in that it also prints two header rows with column names and types, similar to [TabSeparatedWithNamesAndTypes](#tabseparatedwithnamesandtypes). + +## JSONCompactStringsEachRowWithNames {#jsoncompactstringseachrowwithnames} + +Differs from `JSONCompactStringsEachRow` in that in that it also prints the header row with column names, similar to [TabSeparatedWithNames](#tabseparatedwithnames). + ## JSONCompactStringsEachRowWithNamesAndTypes {#jsoncompactstringseachrowwithnamesandtypes} -Differs from `JSONCompactEachRow`/`JSONCompactStringsEachRow` in that the column names and types are written as the first two rows. +Differs from `JSONCompactStringsEachRow` in that it also prints two header rows with column names and types, similar to [TabSeparatedWithNamesAndTypes](#tabseparatedwithnamesandtypes). ```json ["'hello'", "multiply(42, number)", "range(5)"] @@ -705,7 +745,7 @@ CREATE TABLE IF NOT EXISTS example_table - If `input_format_defaults_for_omitted_fields = 1`, then the default value for `x` equals `0`, but the default value of `a` equals `x * 2`. !!! note "Warning" - When inserting data with `insert_sample_with_metadata = 1`, ClickHouse consumes more computational resources, compared to insertion with `insert_sample_with_metadata = 0`. + When inserting data with `input_format_defaults_for_omitted_fields = 1`, ClickHouse consumes more computational resources, compared to insertion with `input_format_defaults_for_omitted_fields = 0`. ### Selecting Data {#selecting-data} @@ -912,6 +952,13 @@ Array is represented as a varint length (unsigned [LEB128](https://en.wikipedia. For [NULL](../sql-reference/syntax.md#null-literal) support, an additional byte containing 1 or 0 is added before each [Nullable](../sql-reference/data-types/nullable.md) value. If 1, then the value is `NULL` and this byte is interpreted as a separate value. If 0, the value after the byte is not `NULL`. +## RowBinaryWithNames {#rowbinarywithnames} + +Similar to [RowBinary](#rowbinary), but with added header: + +- [LEB128](https://en.wikipedia.org/wiki/LEB128)-encoded number of columns (N) +- N `String`s specifying column names + ## RowBinaryWithNamesAndTypes {#rowbinarywithnamesandtypes} Similar to [RowBinary](#rowbinary), but with added header: diff --git a/docs/en/interfaces/third-party/gui.md b/docs/en/interfaces/third-party/gui.md index 06474499ccd..593019bfb2e 100644 --- a/docs/en/interfaces/third-party/gui.md +++ b/docs/en/interfaces/third-party/gui.md @@ -129,6 +129,20 @@ Features: - Support monitor (processor, connection, query) - Support migrate data +### Bytebase {#bytebase} + +[Bytebase](https://bytebase.com) is a web-based, open source schema change and version control tool for teams. It supports various databases including ClickHouse. + +Features: + +- Schema review between developers and DBAs. +- Database-as-Code, version control the schema in VCS such GitLab and trigger the deployment upon code commit. +- Streamlined deployment with per-environment policy. +- Full migration history. +- Schema drift detection. +- Backup and restore. +- RBAC. + ## Commercial {#commercial} ### DataGrip {#datagrip} diff --git a/docs/en/introduction/adopters.md b/docs/en/introduction/adopters.md index 73db0b3c952..3006c08fce6 100644 --- a/docs/en/introduction/adopters.md +++ b/docs/en/introduction/adopters.md @@ -22,17 +22,21 @@ toc_title: Adopters | ApiRoad | API marketplace | Analytics | — | — | [Blog post, Nov 2018, Mar 2020](https://pixeljets.com/blog/clickhouse-vs-elasticsearch/) | | Appsflyer | Mobile analytics | Main product | — | — | [Talk in Russian, July 2019](https://www.youtube.com/watch?v=M3wbRlcpBbY) | | ArenaData | Data Platform | Main product | — | — | [Slides in Russian, December 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup38/indexes.pdf) | +| Argedor | ClickHouse support | — | — | — | [Official website](https://www.argedor.com/en/clickhouse/) | | Avito | Classifieds | Monitoring | — | — | [Meetup, April 2020](https://www.youtube.com/watch?v=n1tm4j4W8ZQ) | -| Badoo | Dating | Timeseries | — | — | [Slides in Russian, December 2019](https://presentations.clickhouse.com/meetup38/forecast.pdf) | +| Badoo | Dating | Timeseries | — | 1.6 mln events/sec (2018) | [Slides in Russian, December 2019](https://presentations.clickhouse.com/meetup38/forecast.pdf) | +| Beeline | Telecom | Data Platform | — | — | [Blog post, July 2021](https://habr.com/en/company/beeline/blog/567508/) | | Benocs | Network Telemetry and Analytics | Main Product | — | — | [Slides in English, October 2017](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup9/lpm.pdf) | | BIGO | Video | Computing Platform | — | — | [Blog Article, August 2020](https://www.programmersought.com/article/44544895251/) | -| Bloomberg | Finance, Media | Monitoring | — | — | [Slides, May 2018](https://www.slideshare.net/Altinity/http-analytics-for-6m-requests-per-second-using-clickhouse-by-alexander-bocharov) | +| BiliBili | Video sharing | — | — | — | [Blog post, June 2021](https://chowdera.com/2021/06/20210622012241476b.html) | +| Bloomberg | Finance, Media | Monitoring | — | — | [Job opening, September 2021](https://careers.bloomberg.com/job/detail/94913), [slides, May 2018](https://www.slideshare.net/Altinity/http-analytics-for-6m-requests-per-second-using-clickhouse-by-alexander-bocharov) | | Bloxy | Blockchain | Analytics | — | — | [Slides in Russian, August 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup17/4_bloxy.pptx) | | Bytedance | Social platforms | — | — | — | [The ClickHouse Meetup East, October 2020](https://www.youtube.com/watch?v=ckChUkC3Pns) | | CardsMobile | Finance | Analytics | — | — | [VC.ru](https://vc.ru/s/cardsmobile/143449-rukovoditel-gruppy-analiza-dannyh) | | CARTO | Business Intelligence | Geo analytics | — | — | [Geospatial processing with ClickHouse](https://carto.com/blog/geospatial-processing-with-clickhouse/) | | CERN | Research | Experiment | — | — | [Press release, April 2012](https://www.yandex.com/company/press_center/press_releases/2012/2012-04-10/) | | Checkly | Software Development | Analytics | — | — | [Tweet, October 2021](https://twitter.com/tim_nolet/status/1445810665743081474?s=20) | +| ChelPipe Group | Analytics | — | — | — | [Blog post, June 2021](https://vc.ru/trade/253172-tyazhelomu-proizvodstvu-user-friendly-sayt-internet-magazin-trub-dlya-chtpz) | | Cisco | Networking | Traffic analysis | — | — | [Lightning talk, October 2019](https://youtu.be/-hI1vDR2oPY?t=5057) | | Citadel Securities | Finance | — | — | — | [Contribution, March 2019](https://github.com/ClickHouse/ClickHouse/pull/4774) | | Citymobil | Taxi | Analytics | — | — | [Blog Post in Russian, March 2020](https://habr.com/en/company/citymobil/blog/490660/) | @@ -48,6 +52,7 @@ toc_title: Adopters | Deutsche Bank | Finance | BI Analytics | — | — | [Slides in English, October 2019](https://bigdatadays.ru/wp-content/uploads/2019/10/D2-H3-3_Yakunin-Goihburg.pdf) | | Deeplay | Gaming Analytics | — | — | — | [Job advertisement, 2020](https://career.habr.com/vacancies/1000062568) | | Diva-e | Digital consulting | Main Product | — | — | [Slides in English, September 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup29/ClickHouse-MeetUp-Unusual-Applications-sd-2019-09-17.pdf) | +| Ecommpay | Payment Processing | Logs | — | — | [Video, Nov 2019](https://www.youtube.com/watch?v=d3GdZTOWGLk) | | Ecwid | E-commerce SaaS | Metrics, Logging | — | — | [Slides in Russian, April 2019](https://nastachku.ru/var/files/1/presentation/backend/2_Backend_6.pdf) | | eBay | E-commerce | Logs, Metrics and Events | — | — | [Official website, Sep 2020](https://tech.ebayinc.com/engineering/ou-online-analytical-processing/) | | Exness | Trading | Metrics, Logging | — | — | [Talk in Russian, May 2019](https://youtu.be/_rpU-TvSfZ8?t=3215) | @@ -57,9 +62,11 @@ toc_title: Adopters | FunCorp | Games | | — | 14 bn records/day as of Jan 2021 | [Article](https://www.altinity.com/blog/migrating-from-redshift-to-clickhouse) | | Geniee | Ad network | Main product | — | — | [Blog post in Japanese, July 2017](https://tech.geniee.co.jp/entry/2017/07/20/160100) | | Genotek | Bioinformatics | Main product | — | — | [Video, August 2020](https://youtu.be/v3KyZbz9lEE) | +| Gigapipe | Managed ClickHouse | Main product | — | — | [Official website](https://gigapipe.com/) | | Glaber | Monitoring | Main product | — | — | [Website](https://glaber.io/) | | GraphCDN | CDN | Traffic Analytics | — | — | [Blog Post in English, August 2021](https://altinity.com/blog/delivering-insight-on-graphql-apis-with-clickhouse-at-graphcdn/) | | HUYA | Video Streaming | Analytics | — | — | [Slides in Chinese, October 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/7.%20ClickHouse万亿数据分析实践%20李本旺(sundy-li)%20虎牙.pdf) | +| Hydrolix | Cloud data platform | Main product | — | — | [Documentation](https://docs.hydrolix.io/guide/query) | | ICA | FinTech | Risk Management | — | — | [Blog Post in English, Sep 2020](https://altinity.com/blog/clickhouse-vs-redshift-performance-for-fintech-risk-management?utm_campaign=ClickHouse%20vs%20RedShift&utm_content=143520807&utm_medium=social&utm_source=twitter&hss_channel=tw-3894792263) | | Idealista | Real Estate | Analytics | — | — | [Blog Post in English, April 2019](https://clickhouse.com/blog/en/clickhouse-meetup-in-madrid-on-april-2-2019) | | Infobaleen | AI markting tool | Analytics | — | — | [Official site](https://infobaleen.com) | @@ -71,9 +78,11 @@ toc_title: Adopters | Ippon Technologies | Technology Consulting | — | — | — | [Talk in English, July 2020](https://youtu.be/GMiXCMFDMow?t=205) | | Ivi | Online Cinema | Analytics, Monitoring | — | — | [Article in Russian, Jan 2018](https://habr.com/en/company/ivi/blog/347408/) | | Jinshuju 金数据 | BI Analytics | Main product | — | — | [Slides in Chinese, October 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup24/3.%20金数据数据架构调整方案Public.pdf) | +| kakaocorp | Internet company | — | — | — | [if(kakao)2020 conference](https://if.kakao.com/session/117) | | Kodiak Data | Clouds | Main product | — | — | [Slides in Engish, April 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup13/kodiak_data.pdf) | | Kontur | Software Development | Metrics | — | — | [Talk in Russian, November 2018](https://www.youtube.com/watch?v=U4u4Bd0FtrY) | | Kuaishou | Video | — | — | — | [ClickHouse Meetup, October 2018](https://clickhouse.com/blog/en/2018/clickhouse-community-meetup-in-beijing-on-october-28-2018/) | +| KGK Global | Vehicle monitoring | — | — | — | [Press release, June 2021](https://zoom.cnews.ru/news/item/530921) | | Lawrence Berkeley National Laboratory | Research | Traffic analysis | 1 server | 11.8 TiB | [Slides in English, April 2019](https://www.smitasin.com/presentations/2019-04-17_DOE-NSM.pdf) | | LifeStreet | Ad network | Main product | 75 servers (3 replicas) | 5.27 PiB | [Blog post in Russian, February 2017](https://habr.com/en/post/322620/) | | Mail.ru Cloud Solutions | Cloud services | Main product | — | — | [Article in Russian](https://mcs.mail.ru/help/db-create/clickhouse#) | @@ -88,7 +97,10 @@ toc_title: Adopters | Netskope | Network Security | — | — | — | [Job advertisement, March 2021](https://www.mendeley.com/careers/job/senior-software-developer-backend-developer-1346348) | | NIC Labs | Network Monitoring | RaTA-DNS | — | — | [Blog post, March 2021](https://niclabs.cl/ratadns/2021/03/Clickhouse) | | NOC Project | Network Monitoring | Analytics | Main Product | — | [Official Website](https://getnoc.com/features/big-data/) | +| Noction | Network Technology | Main Product | — | — | [Official Website](https://www.noction.com/news/irp-3-11-remote-triggered-blackholing-capability) | Nuna Inc. | Health Data Analytics | — | — | — | [Talk in English, July 2020](https://youtu.be/GMiXCMFDMow?t=170) | +| Ok.ru | Social Network | — | 72 servers | 810 TB compressed, 50bn rows/day, 1.5 TB/day | [SmartData conference, Oct 2021](https://assets.ctfassets.net/oxjq45e8ilak/4JPHkbJenLgZhBGGyyonFP/57472ec6987003ec4078d0941740703b/____________________ClickHouse_______________________.pdf) | +| Omnicomm | Transportation Monitoring | — | — | — | [Facebook post, Oct 2021](https://www.facebook.com/OmnicommTeam/posts/2824479777774500) | | OneAPM | Monitorings and Data Analysis | Main product | — | — | [Slides in Chinese, October 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/8.%20clickhouse在OneAPM的应用%20杜龙.pdf) | | OZON | E-commerce | — | — | — | [Official website](https://job.ozon.ru/vacancy/razrabotchik-clickhouse-ekspluatatsiya-40991870/) | | Panelbear | Analytics | Monitoring and Analytics | — | — | [Tech Stack, November 2020](https://panelbear.com/blog/tech-stack/) | @@ -103,6 +115,7 @@ toc_title: Adopters | Qrator | DDoS protection | Main product | — | — | [Blog Post, March 2019](https://blog.qrator.net/en/clickhouse-ddos-mitigation_37/) | | Raiffeisenbank | Banking | Analytics | — | — | [Lecture in Russian, December 2020](https://cs.hse.ru/announcements/421965599.html) | | Rambler | Internet services | Analytics | — | — | [Talk in Russian, April 2018](https://medium.com/@ramblertop/разработка-api-clickhouse-для-рамблер-топ-100-f4c7e56f3141) | +| Replica | Urban Planning | Analytics | — | — | [Job advertisement](https://boards.greenhouse.io/replica/jobs/5547732002?gh_jid=5547732002) | | Retell | Speech synthesis | Analytics | — | — | [Blog Article, August 2020](https://vc.ru/services/153732-kak-sozdat-audiostati-na-vashem-sayte-i-zachem-eto-nuzhno) | | Rollbar | Software Development | Main Product | — | — | [Official Website](https://www.rollbar.com) | | Rspamd | Antispam | Analytics | — | — | [Official Website](https://rspamd.com/doc/modules/clickhouse.html) | @@ -116,6 +129,7 @@ toc_title: Adopters | Sentry | Software Development | Main product | — | — | [Blog Post in English, May 2019](https://blog.sentry.io/2019/05/16/introducing-snuba-sentrys-new-search-infrastructure) | | seo.do | Analytics | Main product | — | — | [Slides in English, November 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup35/CH%20Presentation-%20Metehan%20Çetinkaya.pdf) | | SGK | Government Social Security | Analytics | — | — | [Slides in English, November 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup35/ClickHouse%20Meetup-Ramazan%20POLAT.pdf) | +| SigNoz | Observability Platform | Main Product | — | — | [Source code](https://github.com/SigNoz/signoz) | | Sina | News | — | — | — | [Slides in Chinese, October 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/6.%20ClickHouse最佳实践%20高鹏_新浪.pdf) | | Sipfront | Software Development | Analytics | — | — | [Tweet, October 2021](https://twitter.com/andreasgranig/status/1446404332337913895?s=20) | | SMI2 | News | Analytics | — | — | [Blog Post in Russian, November 2017](https://habr.com/ru/company/smi2/blog/314558/) | @@ -129,12 +143,14 @@ toc_title: Adopters | Tencent | Big Data | Data processing | — | — | [Slides in Chinese, October 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup19/5.%20ClickHouse大数据集群应用_李俊飞腾讯网媒事业部.pdf) | | Tencent | Messaging | Logging | — | — | [Talk in Chinese, November 2019](https://youtu.be/T-iVQRuw-QY?t=5050) | | Tencent Music Entertainment (TME) | BigData | Data processing | — | — | [Blog in Chinese, June 2020](https://cloud.tencent.com/developer/article/1637840) | +| Tesla | Electric vehicle and clean energy company | — | — | — | [Vacancy description, March 2021](https://news.ycombinator.com/item?id=26306170) | +| Timeflow | Software | Analytics | — | — | [Blog](https://timeflow.systems/why-we-moved-from-druid-to-clickhouse/ ) | | Tinybird | Real-time Data Products | Data processing | — | — | [Official website](https://www.tinybird.co/) | -| Traffic Stars | AD network | — | — | — | [Slides in Russian, May 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup15/lightning/ninja.pdf) | +| Traffic Stars | AD network | — | 300 servers in Europe/US | 1.8 PiB, 700 000 insert rps (as of 2021) | [Slides in Russian, May 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup15/lightning/ninja.pdf) | | Uber | Taxi | Logging | — | — | [Slides, February 2020](https://presentations.clickhouse.com/meetup40/uber.pdf) | | UTMSTAT | Analytics | Main product | — | — | [Blog post, June 2020](https://vc.ru/tribuna/133956-striming-dannyh-iz-servisa-skvoznoy-analitiki-v-clickhouse) | | VKontakte | Social Network | Statistics, Logging | — | — | [Slides in Russian, August 2018](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup17/3_vk.pdf) | -| VMWare | Cloud | VeloCloud, SDN | — | — | [Product documentation](https://docs.vmware.com/en/vRealize-Operations-Manager/8.3/com.vmware.vcom.metrics.doc/GUID-A9AD72E1-C948-4CA2-971B-919385AB3CA8.html) | +| VMware | Cloud | VeloCloud, SDN | — | — | [Product documentation](https://docs.vmware.com/en/vRealize-Operations-Manager/8.3/com.vmware.vcom.metrics.doc/GUID-A9AD72E1-C948-4CA2-971B-919385AB3CA8.html) | | Walmart Labs | Internet, Retail | — | — | — | [Talk in English, July 2020](https://youtu.be/GMiXCMFDMow?t=144) | | Wargaming | Games | | — | — | [Interview](https://habr.com/en/post/496954/) | | Wildberries | E-commerce | | — | — | [Official website](https://it.wildberries.ru/) | @@ -148,24 +164,13 @@ toc_title: Adopters | Yandex Market | e-Commerce | Metrics, Logging | — | — | [Talk in Russian, January 2019](https://youtu.be/_l1qP0DyBcA?t=478) | | Yandex Metrica | Web analytics | Main product | 630 servers in one cluster, 360 servers in another cluster, 1862 servers in one department | 133 PiB / 8.31 PiB / 120 trillion records | [Slides, February 2020](https://presentations.clickhouse.com/meetup40/introduction/#13) | | Yotascale | Cloud | Data pipeline | — | 2 bn records/day | [LinkedIn (Accomplishments)](https://www.linkedin.com/in/adilsaleem/) | +| Zagrava Trading | — | — | — | — | [Job offer, May 2021](https://twitter.com/datastackjobs/status/1394707267082063874) | | ЦВТ | Software Development | Metrics, Logging | — | — | [Blog Post, March 2019, in Russian](https://vc.ru/dev/62715-kak-my-stroili-monitoring-na-prometheus-clickhouse-i-elk) | | МКБ | Bank | Web-system monitoring | — | — | [Slides in Russian, September 2019](https://github.com/ClickHouse/clickhouse-presentations/blob/master/meetup28/mkb.pdf) | | ЦФТ | Banking, Financial products, Payments | — | — | — | [Meetup in Russian, April 2020](https://team.cft.ru/events/162) | | Цифровой Рабочий | Industrial IoT, Analytics | — | — | — | [Blog post in Russian, March 2021](https://habr.com/en/company/croc/blog/548018/) | -| kakaocorp | Internet company | — | — | — | [if(kakao)2020 conference](https://if.kakao.com/session/117) | | ООО «МПЗ Богородский» | Agriculture | — | — | — | [Article in Russian, November 2020](https://cloud.yandex.ru/cases/okraina) | -| Tesla | Electric vehicle and clean energy company | — | — | — | [Vacancy description, March 2021](https://news.ycombinator.com/item?id=26306170) | -| KGK Global | Vehicle monitoring | — | — | — | [Press release, June 2021](https://zoom.cnews.ru/news/item/530921) | -| BiliBili | Video sharing | — | — | — | [Blog post, June 2021](https://chowdera.com/2021/06/20210622012241476b.html) | -| Gigapipe | Managed ClickHouse | Main product | — | — | [Official website](https://gigapipe.com/) | -| Hydrolix | Cloud data platform | Main product | — | — | [Documentation](https://docs.hydrolix.io/guide/query) | -| Argedor | ClickHouse support | — | — | — | [Official website](https://www.argedor.com/en/clickhouse/) | -| SigNoz | Observability Platform | Main Product | — | — | [Source code](https://github.com/SigNoz/signoz) | -| ChelPipe Group | Analytics | — | — | — | [Blog post, June 2021](https://vc.ru/trade/253172-tyazhelomu-proizvodstvu-user-friendly-sayt-internet-magazin-trub-dlya-chtpz) | -| Zagrava Trading | — | — | — | — | [Job offer, May 2021](https://twitter.com/datastackjobs/status/1394707267082063874) | -| Beeline | Telecom | Data Platform | — | — | [Blog post, July 2021](https://habr.com/en/company/beeline/blog/567508/) | -| Ecommpay | Payment Processing | Logs | — | — | [Video, Nov 2019](https://www.youtube.com/watch?v=d3GdZTOWGLk) | -| Omnicomm | Transportation Monitoring | — | — | — | [Facebook post, Oct 2021](https://www.facebook.com/OmnicommTeam/posts/2824479777774500) | -| Ok.ru | Social Network | — | 72 servers | 810 TB compressed, 50bn rows/day, 1.5 TB/day | [SmartData conference, Oct 2021](https://assets.ctfassets.net/oxjq45e8ilak/4JPHkbJenLgZhBGGyyonFP/57472ec6987003ec4078d0941740703b/____________________ClickHouse_______________________.pdf) | +| ДомКлик | Real Estate | — | — | — | [Article in Russian, October 2021](https://habr.com/ru/company/domclick/blog/585936/) | +| Deepl | Machine Learning | — | — | — | [Video, October 2021](https://www.youtube.com/watch?v=WIYJiPwxXdM&t=1182s) | [Original article](https://clickhouse.com/docs/en/introduction/adopters/) diff --git a/docs/en/operations/configuration-files.md b/docs/en/operations/configuration-files.md index f5073afcc23..cbc139dd958 100644 --- a/docs/en/operations/configuration-files.md +++ b/docs/en/operations/configuration-files.md @@ -7,7 +7,7 @@ toc_title: Configuration Files ClickHouse supports multi-file configuration management. The main server configuration file is `/etc/clickhouse-server/config.xml` or `/etc/clickhouse-server/config.yaml`. Other files must be in the `/etc/clickhouse-server/config.d` directory. Note, that any configuration file can be written either in XML or YAML, but mixing formats in one file is not supported. For example, you can have main configs as `config.xml` and `users.xml` and write additional files in `config.d` and `users.d` directories in `.yaml`. -All XML files should have the same root element, usually ``. As for YAML, `yandex:` should not be present, the parser will insert it automatically. +All XML files should have the same root element, usually ``. As for YAML, `clickhouse:` should not be present, the parser will insert it automatically. ## Override {#override} @@ -21,13 +21,13 @@ Some settings specified in the main configuration file can be overridden in othe You can also declare attributes as coming from environment variables by using `from_env="VARIABLE_NAME"`: ```xml - + - + ``` ## Substitution {#substitution} @@ -39,7 +39,7 @@ If you want to replace an entire element with a substitution use `include` as el XML substitution example: ```xml - + @@ -48,7 +48,7 @@ XML substitution example: - + ``` Substitutions can also be performed from ZooKeeper. To do this, specify the attribute `from_zk = "/path/to/node"`. The element value is replaced with the contents of the node at `/path/to/node` in ZooKeeper. You can also put an entire XML subtree on the ZooKeeper node and it will be fully inserted into the source element. @@ -72,7 +72,7 @@ $ cat /etc/clickhouse-server/users.d/alice.xml ``` ``` xml - + analytics @@ -83,7 +83,7 @@ $ cat /etc/clickhouse-server/users.d/alice.xml analytics - + ``` ## YAML examples {#example} diff --git a/docs/en/operations/external-authenticators/kerberos.md b/docs/en/operations/external-authenticators/kerberos.md index 5fe0b2bfc37..2e2a88dc7a8 100644 --- a/docs/en/operations/external-authenticators/kerberos.md +++ b/docs/en/operations/external-authenticators/kerberos.md @@ -23,32 +23,32 @@ To enable Kerberos, one should include `kerberos` section in `config.xml`. This Example (goes into `config.xml`): ```xml - + - + ``` With principal specification: ```xml - + HTTP/clickhouse.example.com@EXAMPLE.COM - + ``` With filtering by realm: ```xml - + EXAMPLE.COM - + ``` !!! warning "Note" @@ -80,7 +80,7 @@ Parameters: Example (goes into `users.xml`): ```xml - + @@ -91,7 +91,7 @@ Example (goes into `users.xml`): - + ``` !!! warning "Warning" diff --git a/docs/en/operations/external-authenticators/ldap.md b/docs/en/operations/external-authenticators/ldap.md index c33700f0e31..57e6ec1a087 100644 --- a/docs/en/operations/external-authenticators/ldap.md +++ b/docs/en/operations/external-authenticators/ldap.md @@ -14,7 +14,7 @@ To define LDAP server you must add `ldap_servers` section to the `config.xml`. **Example** ```xml - + @@ -45,7 +45,7 @@ To define LDAP server you must add `ldap_servers` section to the `config.xml`. no - + ``` Note, that you can define multiple LDAP servers inside the `ldap_servers` section using distinct names. @@ -90,7 +90,7 @@ At each login attempt, ClickHouse tries to "bind" to the specified DN defined by **Example** ```xml - + @@ -101,7 +101,7 @@ At each login attempt, ClickHouse tries to "bind" to the specified DN defined by - + ``` Note, that user `my_user` refers to `my_ldap_server`. This LDAP server must be configured in the main `config.xml` file as described previously. @@ -125,7 +125,7 @@ At each login attempt, ClickHouse tries to find the user definition locally and Goes into `config.xml`. ```xml - + @@ -156,7 +156,7 @@ Goes into `config.xml`. - + ``` Note that `my_ldap_server` referred in the `ldap` section inside the `user_directories` section must be a previously defined LDAP server that is configured in the `config.xml` (see [LDAP Server Definition](#ldap-server-definition)). diff --git a/docs/en/operations/performance-test.md b/docs/en/operations/performance-test.md index 2880793962a..a220575cb3c 100644 --- a/docs/en/operations/performance-test.md +++ b/docs/en/operations/performance-test.md @@ -23,7 +23,7 @@ chmod a+x ./hardware.sh ./hardware.sh ``` -3. Copy the output and send it to clickhouse-feedback@yandex-team.com +3. Copy the output and send it to feedback@clickhouse.com All the results are published here: https://clickhouse.com/benchmark/hardware/ diff --git a/docs/en/operations/server-configuration-parameters/settings.md b/docs/en/operations/server-configuration-parameters/settings.md index 19567ec29fb..6ec0d122e6a 100644 --- a/docs/en/operations/server-configuration-parameters/settings.md +++ b/docs/en/operations/server-configuration-parameters/settings.md @@ -69,6 +69,8 @@ If no conditions met for a data part, ClickHouse uses the `lz4` compression. ``` + + ## custom_settings_prefixes {#custom_settings_prefixes} List of prefixes for [custom settings](../../operations/settings/index.md#custom_settings). The prefixes must be separated with commas. @@ -482,16 +486,12 @@ Backlog (queue size of pending connections) of the listen socket. Default value: `4096` (as in linux [5.4+](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=19f92a030ca6d772ab44b22ee6a01378a8cb32d4)). Usually this value does not need to be changed, since: -- default value is large enough, -- and for accepting client's connections server has separate thread. +- default value is large enough, +- and for accepting client's connections server has separate thread. -So even if you have `TcpExtListenOverflows` (from `nstat`) non zero and this -counter grows for ClickHouse server it does not mean that this value need to be -increased, since: -- usually if 4096 is not enough it shows some internal ClickHouse scaling - issue, so it is better to report an issue. -- and it does not mean that the server can handle more connections later (and - even if it can, clients can already goes away / disconnect). +So even if you have `TcpExtListenOverflows` (from `nstat`) non zero and this counter grows for ClickHouse server it does not mean that this value need to be increased, since: +- usually if 4096 is not enough it shows some internal ClickHouse scaling issue, so it is better to report an issue. +- and it does not mean that the server can handle more connections later (and even if it could, by that moment clients may be gone or disconnected). Examples: @@ -643,7 +643,7 @@ On hosts with low RAM and swap, you possibly need setting `max_server_memory_usa ## max_concurrent_queries {#max-concurrent-queries} -The maximum number of simultaneously processed queries related to MergeTree table. Queries may be limited by other settings: [max_concurrent_queries_for_all_users](#max-concurrent-queries-for-all-users), [min_marks_to_honor_max_concurrent_queries](#min-marks-to-honor-max-concurrent-queries). +The maximum number of simultaneously processed queries related to MergeTree table. Queries may be limited by other settings: [max_concurrent_queries_for_user](#max-concurrent-queries-for-user), [max_concurrent_queries_for_all_users](#max-concurrent-queries-for-all-users), [min_marks_to_honor_max_concurrent_queries](#min-marks-to-honor-max-concurrent-queries). !!! info "Note" These settings can be modified at runtime and will take effect immediately. Queries that are already running will remain unchanged. @@ -659,6 +659,21 @@ Possible values: 100 ``` +## max_concurrent_queries_for_user {#max-concurrent-queries-for-user} + +The maximum number of simultaneously processed queries related to MergeTree table per user. + +Possible values: + +- Positive integer. +- 0 — Disabled. + +**Example** + +``` xml +5 +``` + ## max_concurrent_queries_for_all_users {#max-concurrent-queries-for-all-users} Throw exception if the value of this setting is less or equal than the current number of simultaneously processed queries. @@ -771,14 +786,14 @@ It is enabled by default. If it`s not, you can do this manually. To manually turn on metrics history collection [`system.metric_log`](../../operations/system-tables/metric_log.md), create `/etc/clickhouse-server/config.d/metric_log.xml` with the following content: ``` xml - + system metric_log
7500 1000
-
+ ``` **Disabling** @@ -786,9 +801,9 @@ To manually turn on metrics history collection [`system.metric_log`](../../opera To disable `metric_log` setting, you should create the following file `/etc/clickhouse-server/config.d/disable_metric_log.xml` with the following content: ``` xml - + - + ``` ## replicated_merge_tree {#server_configuration_parameters-replicated_merge_tree} @@ -1024,7 +1039,7 @@ Parameters: **Example** ```xml - + notice system @@ -1033,7 +1048,7 @@ Parameters: Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day - + ``` @@ -1275,6 +1290,7 @@ This section contains the following parameters: - [Replication](../../engines/table-engines/mergetree-family/replication.md) - [ZooKeeper Programmer’s Guide](http://zookeeper.apache.org/doc/current/zookeeperProgrammers.html) +- [Optional secured communication between ClickHouse and Zookeeper](../ssl-zookeeper.md#secured-communication-with-zookeeper) ## use_minimalistic_part_header_in_zookeeper {#server-settings-use_minimalistic_part_header_in_zookeeper} diff --git a/docs/en/operations/settings/settings.md b/docs/en/operations/settings/settings.md index b10d649a952..92f397b2c39 100644 --- a/docs/en/operations/settings/settings.md +++ b/docs/en/operations/settings/settings.md @@ -399,7 +399,7 @@ Default value: 1. ## input_format_defaults_for_omitted_fields {#session_settings-input_format_defaults_for_omitted_fields} -When performing `INSERT` queries, replace omitted input column values with default values of the respective columns. This option only applies to [JSONEachRow](../../interfaces/formats.md#jsoneachrow), [CSV](../../interfaces/formats.md#csv) and [TabSeparated](../../interfaces/formats.md#tabseparated) formats. +When performing `INSERT` queries, replace omitted input column values with default values of the respective columns. This option only applies to [JSONEachRow](../../interfaces/formats.md#jsoneachrow), [CSV](../../interfaces/formats.md#csv), [TabSeparated](../../interfaces/formats.md#tabseparated) formats and formats with `WithNames`/`WithNamesAndTypes` suffixes. !!! note "Note" When this option is enabled, extended table metadata are sent from server to client. It consumes additional computing resources on the server and can reduce performance. @@ -417,6 +417,12 @@ When enabled, replace empty input fields in TSV with default values. For complex Disabled by default. +## input_format_csv_empty_as_default {#settings-input-format-csv-empty-as-default} + +When enabled, replace empty input fields in CSV with default values. For complex default expressions `input_format_defaults_for_omitted_fields` must be enabled too. + +Enabled by default. + ## input_format_tsv_enum_as_number {#settings-input_format_tsv_enum_as_number} Enables or disables parsing enum values as enum ids for TSV input format. @@ -540,8 +546,40 @@ To improve insert performance, we recommend disabling this check if you are sure Supported formats: -- [CSVWithNames](../../interfaces/formats.md#csvwithnames) -- [TabSeparatedWithNames](../../interfaces/formats.md#tabseparatedwithnames) +- [CSVWithNames](../../interfaces/formats.md#csvwithnames) +- [CSVWithNames](../../interfaces/formats.md#csvwithnamesandtypes) +- [TabSeparatedWithNames](../../interfaces/formats.md#tabseparatedwithnames) +- [TabSeparatedWithNamesAndTypes](../../interfaces/formats.md#tabseparatedwithnamesandtypes) +- [JSONCompactEachRowWithNames](../../interfaces/formats.md#jsoncompacteachrowwithnames) +- [JSONCompactEachRowWithNamesAndTypes](../../interfaces/formats.md#jsoncompacteachrowwithnamesandtypes) +- [JSONCompactStringsEachRowWithNames](../../interfaces/formats.md#jsoncompactstringseachrowwithnames) +- [JSONCompactStringsEachRowWithNamesAndTypes](../../interfaces/formats.md#jsoncompactstringseachrowwithnamesandtypes) +- [RowBinaryWithNames](../../interfaces/formats.md#rowbinarywithnames-rowbinarywithnames) +- [RowBinaryWithNamesAndTypes](../../interfaces/formats.md#rowbinarywithnamesandtypes-rowbinarywithnamesandtypes) + +Possible values: + +- 0 — Disabled. +- 1 — Enabled. + +Default value: 1. + +## input_format_with_types_use_header {#settings-input-format-with-types-use-header} + +Controls whether format parser should check if data types from the input data match data types from the target table. + +Supported formats: + +- [CSVWithNames](../../interfaces/formats.md#csvwithnames) +- [CSVWithNames](../../interfaces/formats.md#csvwithnamesandtypes) +- [TabSeparatedWithNames](../../interfaces/formats.md#tabseparatedwithnames) +- [TabSeparatedWithNamesAndTypes](../../interfaces/formats.md#tabseparatedwithnamesandtypes) +- [JSONCompactEachRowWithNames](../../interfaces/formats.md#jsoncompacteachrowwithnames) +- [JSONCompactEachRowWithNamesAndTypes](../../interfaces/formats.md#jsoncompacteachrowwithnamesandtypes) +- [JSONCompactStringsEachRowWithNames](../../interfaces/formats.md#jsoncompactstringseachrowwithnames) +- [JSONCompactStringsEachRowWithNamesAndTypes](../../interfaces/formats.md#jsoncompactstringseachrowwithnamesandtypes) +- [RowBinaryWithNames](../../interfaces/formats.md#rowbinarywithnames-rowbinarywithnames) +- [RowBinaryWithNamesAndTypes](../../interfaces/formats.md#rowbinarywithnamesandtypes-rowbinarywithnamesandtypes) Possible values: @@ -1397,6 +1435,32 @@ Minimum count of executing same expression before it is get compiled. Default value: `3`. +## compile_aggregate_expressions {#compile_aggregate_expressions} + +Enables or disables JIT-compilation of aggregate functions to native code. Enabling this setting can improve the performance. + +Possible values: + +- 0 — Aggregation is done without JIT compilation. +- 1 — Aggregation is done using JIT compilation. + +Default value: `1`. + +**See Also** + +- [min_count_to_compile_aggregate_expression](#min_count_to_compile_aggregate_expression) + +## min_count_to_compile_aggregate_expression {#min_count_to_compile_aggregate_expression} + +The minimum number of identical aggregate expressions to start JIT-compilation. Works only if the [compile_aggregate_expressions](#compile_aggregate_expressions) setting is enabled. + +Possible values: + +- Positive integer. +- 0 — Identical aggregate expressions are always JIT-compiled. + +Default value: `3`. + ## output_format_json_quote_64bit_integers {#session_settings-output_format_json_quote_64bit_integers} Controls quoting of 64-bit or bigger [integers](../../sql-reference/data-types/int-uint.md) (like `UInt64` or `Int128`) when they are output in a [JSON](../../interfaces/formats.md#json) format. @@ -1747,9 +1811,11 @@ Do not merge aggregation states from different servers for distributed query pro Possible values: -- 0 — Disabled (final query processing is done on the initiator node). -- 1 - Do not merge aggregation states from different servers for distributed query processing (query completelly processed on the shard, initiator only proxy the data), can be used in case it is for certain that there are different keys on different shards. -- 2 - Same as `1` but applies `ORDER BY` and `LIMIT` (it is not possible when the query processed completelly on the remote node, like for `distributed_group_by_no_merge=1`) on the initiator (can be used for queries with `ORDER BY` and/or `LIMIT`). +- `0` — Disabled (final query processing is done on the initiator node). +- `1` - Do not merge aggregation states from different servers for distributed query processing (query completelly processed on the shard, initiator only proxy the data), can be used in case it is for certain that there are different keys on different shards. +- `2` - Same as `1` but applies `ORDER BY` and `LIMIT` (it is not possible when the query processed completelly on the remote node, like for `distributed_group_by_no_merge=1`) on the initiator (can be used for queries with `ORDER BY` and/or `LIMIT`). + +Default value: `0` **Example** @@ -1780,19 +1846,33 @@ FORMAT PrettyCompactMonoBlock └───────┘ ``` -Default value: 0 +## distributed_push_down_limit {#distributed-push-down-limit} -## distributed_push_down_limit (#distributed-push-down-limit} +Enables or disables [LIMIT](#limit) applying on each shard separatelly. -LIMIT will be applied on each shard separatelly. Usually you don't need to use it, since this will be done automatically if it is possible, i.e. for simple query SELECT FROM LIMIT. +This will allow to avoid: +- Sending extra rows over network; +- Processing rows behind the limit on the initiator. + +Starting from 21.9 version you cannot get inaccurate results anymore, since `distributed_push_down_limit` changes query execution only if at least one of the conditions met: +- [distributed_group_by_no_merge](#distributed-group-by-no-merge) > 0. +- Query **does not have** `GROUP BY`/`DISTINCT`/`LIMIT BY`, but it has `ORDER BY`/`LIMIT`. +- Query **has** `GROUP BY`/`DISTINCT`/`LIMIT BY` with `ORDER BY`/`LIMIT` and: + - [optimize_skip_unused_shards](#optimize-skip-unused-shards) is enabled. + - [optimize_distributed_group_by_sharding_key](#optimize-distributed-group-by-sharding-key) is enabled. Possible values: -- 0 - Disabled -- 1 - Enabled +- 0 — Disabled. +- 1 — Enabled. -!!! note "Note" - That with this setting the result of the query may be inaccurate. +Default value: `1`. + +See also: + +- [distributed_group_by_no_merge](#distributed-group-by-no-merge) +- [optimize_skip_unused_shards](#optimize-skip-unused-shards) +- [optimize_distributed_group_by_sharding_key](#optimize-distributed-group-by-sharding-key) ## optimize_skip_unused_shards_limit {#optimize-skip-unused-shards-limit} @@ -1900,6 +1980,7 @@ Default value: 0 See also: - [distributed_group_by_no_merge](#distributed-group-by-no-merge) +- [distributed_push_down_limit](#distributed-push-down-limit) - [optimize_skip_unused_shards](#optimize-skip-unused-shards) !!! note "Note" @@ -3810,3 +3891,101 @@ Default value: `0`. **See Also** - [optimize_move_to_prewhere](#optimize_move_to_prewhere) setting + +## describe_include_subcolumns {#describe_include_subcolumns} + +Enables describing subcolumns for a [DESCRIBE](../../sql-reference/statements/describe-table.md) query. For example, members of a [Tuple](../../sql-reference/data-types/tuple.md) or subcolumns of a [Map](../../sql-reference/data-types/map.md#map-subcolumns), [Nullable](../../sql-reference/data-types/nullable.md#finding-null) or an [Array](../../sql-reference/data-types/array.md#array-size) data type. + +Possible values: + +- 0 — Subcolumns are not included in `DESCRIBE` queries. +- 1 — Subcolumns are included in `DESCRIBE` queries. + +Default value: `0`. + +**Example** + +See an example for the [DESCRIBE](../../sql-reference/statements/describe-table.md) statement. + +## async_insert {#async-insert} + +Enables or disables asynchronous inserts. This makes sense only for insertion over HTTP protocol. Note that deduplication isn't working for such inserts. + +If enabled, the data is combined into batches before the insertion into tables, so it is possible to do small and frequent insertions into ClickHouse (up to 15000 queries per second) without buffer tables. + +The data is inserted either after the [async_insert_max_data_size](#async-insert-max-data-size) is exceeded or after [async_insert_busy_timeout_ms](#async-insert-busy-timeout-ms) milliseconds since the first `INSERT` query. If the [async_insert_stale_timeout_ms](#async-insert-stale-timeout-ms) is set to a non-zero value, the data is inserted after `async_insert_stale_timeout_ms` milliseconds since the last query. + +If [wait_for_async_insert](#wait-for-async-insert) is enabled, every client will wait for the data to be processed and flushed to the table. Otherwise, the query would be processed almost instantly, even if the data is not inserted. + +Possible values: + +- 0 — Insertions are made synchronously, one after another. +- 1 — Multiple asynchronous insertions enabled. + +Default value: `0`. + +## async_insert_threads {#async-insert-threads} + +The maximum number of threads for background data parsing and insertion. + +Possible values: + +- Positive integer. +- 0 — Asynchronous insertions are disabled. + +Default value: `16`. + +## wait_for_async_insert {#wait-for-async-insert} + +Enables or disables waiting for processing of asynchronous insertion. If enabled, server will return `OK` only after the data is inserted. Otherwise, it will return `OK` even if the data wasn't inserted. + +Possible values: + +- 0 — Server returns `OK` even if the data is not yet inserted. +- 1 — Server returns `OK` only after the data is inserted. + +Default value: `1`. + +## wait_for_async_insert_timeout {#wait-for-async-insert-timeout} + +The timeout in seconds for waiting for processing of asynchronous insertion. + +Possible values: + +- Positive integer. +- 0 — Disabled. + +Default value: [lock_acquire_timeout](#lock_acquire_timeout). + +## async_insert_max_data_size {#async-insert-max-data-size} + +The maximum size of the unparsed data in bytes collected per query before being inserted. + +Possible values: + +- Positive integer. +- 0 — Asynchronous insertions are disabled. + +Default value: `1000000`. + +## async_insert_busy_timeout_ms {#async-insert-busy-timeout-ms} + +The maximum timeout in milliseconds since the first `INSERT` query before inserting collected data. + +Possible values: + +- Positive integer. +- 0 — Timeout disabled. + +Default value: `200`. + +## async_insert_stale_timeout_ms {#async-insert-stale-timeout-ms} + +The maximum timeout in milliseconds since the last `INSERT` query before dumping collected data. If enabled, the settings prolongs the [async_insert_busy_timeout_ms](#async-insert-busy-timeout-ms) with every `INSERT` query as long as [async_insert_max_data_size](#async-insert-max-data-size) is not exceeded. + +Possible values: + +- Positive integer. +- 0 — Timeout disabled. + +Default value: `0`. diff --git a/docs/en/operations/ssl-zookeeper.md b/docs/en/operations/ssl-zookeeper.md new file mode 100644 index 00000000000..d6bc970e63f --- /dev/null +++ b/docs/en/operations/ssl-zookeeper.md @@ -0,0 +1,74 @@ +--- +toc_priority: 45 +toc_title: Secured communication with Zookeeper +--- + +# Optional secured communication between ClickHouse and Zookeeper {#secured-communication-with-zookeeper} + +You should specify `ssl.keyStore.location`, `ssl.keyStore.password` and `ssl.trustStore.location`, `ssl.trustStore.password` for communication with ClickHouse client over SSL. These options are available from Zookeeper version 3.5.2. + +You can add `zookeeper.crt` to trusted certificates. + +``` bash +sudo cp zookeeper.crt /usr/local/share/ca-certificates/zookeeper.crt +sudo update-ca-certificates +``` + +Client section in `config.xml` will look like: + +``` xml + + /etc/clickhouse-server/client.crt + /etc/clickhouse-server/client.key + true + true + sslv2,sslv3 + true + + RejectCertificateHandler + + +``` + +Add Zookeeper to ClickHouse config with some cluster and macros: + +``` xml + + + + localhost + 2281 + 1 + + + +``` + +Start `clickhouse-server`. In logs you should see: + +```text + ZooKeeper: initialized, hosts: secure://localhost:2281 +``` + +Prefix `secure://` indicates that connection is secured by SSL. + +To ensure traffic is encrypted run `tcpdump` on secured port: + +```bash +tcpdump -i any dst port 2281 -nnXS +``` + +And query in `clickhouse-client`: + +```sql +SELECT * FROM system.zookeeper WHERE path = '/'; +``` + +On unencrypted connection you will see in `tcpdump` output something like this: + +```text +..../zookeeper/q +uota. +``` + +On encrypted connection you should not see this. diff --git a/docs/en/operations/storing-data.md b/docs/en/operations/storing-data.md index bc764a909b8..beffd45bcbd 100644 --- a/docs/en/operations/storing-data.md +++ b/docs/en/operations/storing-data.md @@ -22,7 +22,7 @@ ClickHouse supports zero-copy replication for `S3` and `HDFS` disks, which means Configuration markup: ``` xml - + @@ -44,7 +44,7 @@ Configuration markup: 0 - + ``` Required parameters: @@ -96,7 +96,7 @@ Optional parameters: Example of disk configuration: ``` xml - + @@ -113,7 +113,7 @@ Example of disk configuration: - + ``` ## Storing Data on Web Server {#storing-data-on-webserver} @@ -127,7 +127,7 @@ Web server storage is supported only for the [MergeTree](../engines/table-engine A ready test case. You need to add this configuration to config: ``` xml - + @@ -145,7 +145,7 @@ A ready test case. You need to add this configuration to config: - + ``` And then execute this query: diff --git a/docs/en/operations/system-tables/columns.md b/docs/en/operations/system-tables/columns.md index de878cce793..5ba38ab3e67 100644 --- a/docs/en/operations/system-tables/columns.md +++ b/docs/en/operations/system-tables/columns.md @@ -24,6 +24,11 @@ Columns: - `is_in_primary_key` ([UInt8](../../sql-reference/data-types/int-uint.md)) — Flag that indicates whether the column is in the primary key expression. - `is_in_sampling_key` ([UInt8](../../sql-reference/data-types/int-uint.md)) — Flag that indicates whether the column is in the sampling key expression. - `compression_codec` ([String](../../sql-reference/data-types/string.md)) — Compression codec name. +- `character_octet_length` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — Maximum length in bytes for binary data, character data, or text data and images. In ClickHouse makes sense only for `FixedString` data type. Otherwise, the `NULL` value is returned. +- `numeric_precision` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — Accuracy of approximate numeric data, exact numeric data, integer data, or monetary data. In ClickHouse it is bitness for integer types and decimal precision for `Decimal` types. Otherwise, the `NULL` value is returned. +- `numeric_precision_radix` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — The base of the number system is the accuracy of approximate numeric data, exact numeric data, integer data or monetary data. In ClickHouse it's 2 for integer types and 10 for `Decimal` types. Otherwise, the `NULL` value is returned. +- `numeric_scale` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — The scale of approximate numeric data, exact numeric data, integer data, or monetary data. In ClickHouse makes sense only for `Decimal` types. Otherwise, the `NULL` value is returned. +- `datetime_precision` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — Decimal precision of `DateTime64` data type. For other data types, the `NULL` value is returned. **Example** @@ -34,10 +39,11 @@ SELECT * FROM system.columns LIMIT 2 FORMAT Vertical; ```text Row 1: ────── -database: system -table: aggregate_function_combinators -name: name +database: INFORMATION_SCHEMA +table: COLUMNS +name: table_catalog type: String +position: 1 default_kind: default_expression: data_compressed_bytes: 0 @@ -49,13 +55,19 @@ is_in_sorting_key: 0 is_in_primary_key: 0 is_in_sampling_key: 0 compression_codec: +character_octet_length: ᴺᵁᴸᴸ +numeric_precision: ᴺᵁᴸᴸ +numeric_precision_radix: ᴺᵁᴸᴸ +numeric_scale: ᴺᵁᴸᴸ +datetime_precision: ᴺᵁᴸᴸ Row 2: ────── -database: system -table: aggregate_function_combinators -name: is_internal -type: UInt8 +database: INFORMATION_SCHEMA +table: COLUMNS +name: table_schema +type: String +position: 2 default_kind: default_expression: data_compressed_bytes: 0 @@ -67,6 +79,11 @@ is_in_sorting_key: 0 is_in_primary_key: 0 is_in_sampling_key: 0 compression_codec: +character_octet_length: ᴺᵁᴸᴸ +numeric_precision: ᴺᵁᴸᴸ +numeric_precision_radix: ᴺᵁᴸᴸ +numeric_scale: ᴺᵁᴸᴸ +datetime_precision: ᴺᵁᴸᴸ ``` The `system.columns` table contains the following columns (the column type is shown in brackets): diff --git a/docs/en/operations/system-tables/databases.md b/docs/en/operations/system-tables/databases.md index c9fc8786333..45eebf2ae85 100644 --- a/docs/en/operations/system-tables/databases.md +++ b/docs/en/operations/system-tables/databases.md @@ -9,6 +9,7 @@ Columns: - `data_path` ([String](../../sql-reference/data-types/string.md)) — Data path. - `metadata_path` ([String](../../sql-reference/data-types/enum.md)) — Metadata path. - `uuid` ([UUID](../../sql-reference/data-types/uuid.md)) — Database UUID. +- `comment` ([String](../../sql-reference/data-types/enum.md)) — Database comment. The `name` column from this system table is used for implementing the `SHOW DATABASES` query. @@ -17,22 +18,20 @@ The `name` column from this system table is used for implementing the `SHOW DATA Create a database. ``` sql -CREATE DATABASE test +CREATE DATABASE test; ``` Check all of the available databases to the user. ``` sql -SELECT * FROM system.databases +SELECT * FROM system.databases; ``` ``` text -┌─name───────────────────────────┬─engine─┬─data_path──────────────────┬─metadata_path───────────────────────────────────────────────────────┬─────────────────────────────────uuid─┐ -│ _temporary_and_external_tables │ Memory │ /var/lib/clickhouse/ │ │ 00000000-0000-0000-0000-000000000000 │ -│ default │ Atomic │ /var/lib/clickhouse/store/ │ /var/lib/clickhouse/store/d31/d317b4bd-3595-4386-81ee-c2334694128a/ │ d317b4bd-3595-4386-81ee-c2334694128a │ -│ test │ Atomic │ /var/lib/clickhouse/store/ │ /var/lib/clickhouse/store/39b/39bf0cc5-4c06-4717-87fe-c75ff3bd8ebb/ │ 39bf0cc5-4c06-4717-87fe-c75ff3bd8ebb │ -│ system │ Atomic │ /var/lib/clickhouse/store/ │ /var/lib/clickhouse/store/1d1/1d1c869d-e465-4b1b-a51f-be033436ebf9/ │ 1d1c869d-e465-4b1b-a51f-be033436ebf9 │ -└────────────────────────────────┴────────┴────────────────────────────┴─────────────────────────────────────────────────────────────────────┴──────────────────────────────────────┘ +┌─name───────────────┬─engine─┬─data_path──────────────────┬─metadata_path───────────────────────────────────────────────────────┬─uuid─────────────────────────────────┬─comment─┐ +│ INFORMATION_SCHEMA │ Memory │ /var/lib/clickhouse/ │ │ 00000000-0000-0000-0000-000000000000 │ │ +│ default │ Atomic │ /var/lib/clickhouse/store/ │ /var/lib/clickhouse/store/d31/d317b4bd-3595-4386-81ee-c2334694128a/ │ 24363899-31d7-42a0-a436-389931d752a0 │ │ +│ information_schema │ Memory │ /var/lib/clickhouse/ │ │ 00000000-0000-0000-0000-000000000000 │ │ +│ system │ Atomic │ /var/lib/clickhouse/store/ │ /var/lib/clickhouse/store/1d1/1d1c869d-e465-4b1b-a51f-be033436ebf9/ │ 03e9f3d1-cc88-4a49-83e9-f3d1cc881a49 │ │ +└────────────────────┴────────┴────────────────────────────┴─────────────────────────────────────────────────────────────────────┴──────────────────────────────────────┴─────────┘ ``` - -[Original article](https://clickhouse.com/docs/en/operations/system-tables/databases) diff --git a/docs/en/operations/system-tables/index.md b/docs/en/operations/system-tables/index.md index 0cc5e834af1..5e8418d0af3 100644 --- a/docs/en/operations/system-tables/index.md +++ b/docs/en/operations/system-tables/index.md @@ -34,7 +34,7 @@ System log tables can be customized by creating a config file with the same name An example: ```xml - + system query_log
@@ -45,7 +45,7 @@ An example: --> 7500
-
+ ``` By default, table growth is unlimited. To control a size of a table, you can use [TTL](../../sql-reference/statements/alter/ttl.md#manipulations-with-table-ttl) settings for removing outdated log records. Also you can use the partitioning feature of `MergeTree`-engine tables. diff --git a/docs/en/operations/system-tables/information_schema.md b/docs/en/operations/system-tables/information_schema.md new file mode 100644 index 00000000000..df5b012f2b6 --- /dev/null +++ b/docs/en/operations/system-tables/information_schema.md @@ -0,0 +1,210 @@ +# INFORMATION_SCHEMA {#information-schema} + +`INFORMATION_SCHEMA` (`information_schema`) is a system database that contains views. Using these views, you can get information about the metadata of database objects. These views read data from the columns of the [system.columns](../../operations/system-tables/columns.md), [system.databases](../../operations/system-tables/databases.md) and [system.tables](../../operations/system-tables/tables.md) system tables. + +The structure and composition of system tables may change in different versions of the product, but the support of the `information_schema` makes it possible to change the structure of system tables without changing the method of access to metadata. Metadata requests do not depend on the DBMS used. + +``` sql +SHOW TABLES FROM INFORMATION_SCHEMA; +``` + +``` text +┌─name─────┐ +│ COLUMNS │ +│ SCHEMATA │ +│ TABLES │ +│ VIEWS │ +└──────────┘ +``` + +`INFORMATION_SCHEMA` contains the following views: + +- [COLUMNS](#columns) +- [SCHEMATA](#schemata) +- [TABLES](#tables) +- [VIEWS](#views) + +## COLUMNS {#columns} + +Contains columns read from the [system.columns](../../operations/system-tables/columns.md) system table and columns that are not supported in ClickHouse or do not make sense (always `NULL`), but must be by the standard. + +Columns: + +- `table_catalog` ([String](../../sql-reference/data-types/string.md)) — The name of the database in which the table is located. +- `table_schema` ([String](../../sql-reference/data-types/string.md)) — The name of the database in which the table is located. +- `table_name` ([String](../../sql-reference/data-types/string.md)) — Table name. +- `column_name` ([String](../../sql-reference/data-types/string.md)) — Column name. +- `ordinal_position` ([UInt64](../../sql-reference/data-types/int-uint.md)) — Ordinal position of a column in a table starting with 1. +- `column_default` ([String](../../sql-reference/data-types/string.md)) — Expression for the default value, or an empty string if it is not defined. +- `is_nullable` ([UInt8](../../sql-reference/data-types/int-uint.md)) — Flag that indicates whether the column type is `Nullable`. +- `data_type` ([String](../../sql-reference/data-types/string.md)) — Column type. +- `character_maximum_length` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — Maximum length in bytes for binary data, character data, or text data and images. In ClickHouse makes sense only for `FixedString` data type. Otherwise, the `NULL` value is returned. +- `character_octet_length` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — Maximum length in bytes for binary data, character data, or text data and images. In ClickHouse makes sense only for `FixedString` data type. Otherwise, the `NULL` value is returned. +- `numeric_precision` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — Accuracy of approximate numeric data, exact numeric data, integer data, or monetary data. In ClickHouse it is bitness for integer types and decimal precision for `Decimal` types. Otherwise, the `NULL` value is returned. +- `numeric_precision_radix` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — The base of the number system is the accuracy of approximate numeric data, exact numeric data, integer data or monetary data. In ClickHouse it's 2 for integer types and 10 for `Decimal` types. Otherwise, the `NULL` value is returned. +- `numeric_scale` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — The scale of approximate numeric data, exact numeric data, integer data, or monetary data. In ClickHouse makes sense only for `Decimal` types. Otherwise, the `NULL` value is returned. +- `datetime_precision` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — Decimal precision of `DateTime64` data type. For other data types, the `NULL` value is returned. +- `character_set_catalog` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. +- `character_set_schema` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. +- `character_set_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. +- `collation_catalog` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. +- `collation_schema` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. +- `collation_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. +- `domain_catalog` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. +- `domain_schema` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. +- `domain_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. + +**Example** + +Query: + +``` sql +SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (table_schema=currentDatabase() OR table_schema='') AND table_name NOT LIKE '%inner%' LIMIT 1 FORMAT Vertical; +``` + +Result: + +``` text +Row 1: +────── +table_catalog: default +table_schema: default +table_name: describe_example +column_name: id +ordinal_position: 1 +column_default: +is_nullable: 0 +data_type: UInt64 +character_maximum_length: ᴺᵁᴸᴸ +character_octet_length: ᴺᵁᴸᴸ +numeric_precision: 64 +numeric_precision_radix: 2 +numeric_scale: 0 +datetime_precision: ᴺᵁᴸᴸ +character_set_catalog: ᴺᵁᴸᴸ +character_set_schema: ᴺᵁᴸᴸ +character_set_name: ᴺᵁᴸᴸ +collation_catalog: ᴺᵁᴸᴸ +collation_schema: ᴺᵁᴸᴸ +collation_name: ᴺᵁᴸᴸ +domain_catalog: ᴺᵁᴸᴸ +domain_schema: ᴺᵁᴸᴸ +domain_name: ᴺᵁᴸᴸ +``` + +## SCHEMATA {#schemata} + +Contains columns read from the [system.databases](../../operations/system-tables/databases.md) system table and columns that are not supported in ClickHouse or do not make sense (always `NULL`), but must be by the standard. + +Columns: + +- `catalog_name` ([String](../../sql-reference/data-types/string.md)) — The name of the database. +- `schema_name` ([String](../../sql-reference/data-types/string.md)) — The name of the database. +- `schema_owner` ([String](../../sql-reference/data-types/string.md)) — Schema owner name, always `'default'`. +- `default_character_set_catalog` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. +- `default_character_set_schema` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. +- `default_character_set_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. +- `sql_path` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, not supported. + +**Example** + +Query: + +``` sql +SELECT * FROM information_schema.schemata WHERE schema_name ILIKE 'information_schema' LIMIT 1 FORMAT Vertical; +``` + +Result: + +``` text +Row 1: +────── +catalog_name: INFORMATION_SCHEMA +schema_name: INFORMATION_SCHEMA +schema_owner: default +default_character_set_catalog: ᴺᵁᴸᴸ +default_character_set_schema: ᴺᵁᴸᴸ +default_character_set_name: ᴺᵁᴸᴸ +sql_path: ᴺᵁᴸᴸ +``` + +## TABLES {#tables} + +Contains columns read from the [system.tables](../../operations/system-tables/tables.md) system table. + +Columns: + +- `table_catalog` ([String](../../sql-reference/data-types/string.md)) — The name of the database in which the table is located. +- `table_schema` ([String](../../sql-reference/data-types/string.md)) — The name of the database in which the table is located. +- `table_name` ([String](../../sql-reference/data-types/string.md)) — Table name. +- `table_type` ([Enum8](../../sql-reference/data-types/enum.md)) — Table type. Possible values: + - `BASE TABLE` + - `VIEW` + - `FOREIGN TABLE` + - `LOCAL TEMPORARY` + - `SYSTEM VIEW` + +**Example** + +Query: + +``` sql +SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE (table_schema = currentDatabase() OR table_schema = '') AND table_name NOT LIKE '%inner%' LIMIT 1 FORMAT Vertical; +``` + +Result: + +``` text +Row 1: +────── +table_catalog: default +table_schema: default +table_name: describe_example +table_type: BASE TABLE +``` + +## VIEWS {#views} + +Contains columns read from the [system.tables](../../operations/system-tables/tables.md) system table, when the table engine [View](../../engines/table-engines/special/view.md) is used. + +Columns: + +- `table_catalog` ([String](../../sql-reference/data-types/string.md)) — The name of the database in which the table is located. +- `table_schema` ([String](../../sql-reference/data-types/string.md)) — The name of the database in which the table is located. +- `table_name` ([String](../../sql-reference/data-types/string.md)) — Table name. +- `view_definition` ([String](../../sql-reference/data-types/string.md)) — `SELECT` query for view. +- `check_option` ([String](../../sql-reference/data-types/string.md)) — `NONE`, no checking. +- `is_updatable` ([Enum8](../../sql-reference/data-types/enum.md)) — `NO`, the view is not updated. +- `is_insertable_into` ([Enum8](../../sql-reference/data-types/enum.md)) — Shows whether the created view is [materialized](../../sql-reference/statements/create/view/#materialized). Possible values: + - `NO` — The created view is not materialized. + - `YES` — The created view is materialized. +- `is_trigger_updatable` ([Enum8](../../sql-reference/data-types/enum.md)) — `NO`, the trigger is not updated. +- `is_trigger_deletable` ([Enum8](../../sql-reference/data-types/enum.md)) — `NO`, the trigger is not deleted. +- `is_trigger_insertable_into` ([Enum8](../../sql-reference/data-types/enum.md)) — `NO`, no data is inserted into the trigger. + +**Example** + +Query: + +``` sql +CREATE VIEW v (n Nullable(Int32), f Float64) AS SELECT n, f FROM t; +CREATE MATERIALIZED VIEW mv ENGINE = Null AS SELECT * FROM system.one; +SELECT * FROM information_schema.views WHERE table_schema = currentDatabase() LIMIT 1 FORMAT Vertical; +``` + +Result: + +``` text +Row 1: +────── +table_catalog: default +table_schema: default +table_name: mv +view_definition: SELECT * FROM system.one +check_option: NONE +is_updatable: NO +is_insertable_into: YES +is_trigger_updatable: NO +is_trigger_deletable: NO +is_trigger_insertable_into: NO +``` diff --git a/docs/en/operations/system-tables/replicas.md b/docs/en/operations/system-tables/replicas.md index 64fc5957e69..ff1057ca8b1 100644 --- a/docs/en/operations/system-tables/replicas.md +++ b/docs/en/operations/system-tables/replicas.md @@ -8,43 +8,48 @@ Example: ``` sql SELECT * FROM system.replicas -WHERE table = 'visits' +WHERE table = 'test_table' FORMAT Vertical ``` ``` text +Query id: dc6dcbcb-dc28-4df9-ae27-4354f5b3b13e + Row 1: -────── -database: merge -table: visits -engine: ReplicatedCollapsingMergeTree -is_leader: 1 -can_become_leader: 1 -is_readonly: 0 -is_session_expired: 0 -future_parts: 1 -parts_to_check: 0 -zookeeper_path: /clickhouse/tables/01-06/visits -replica_name: example01-06-1.yandex.ru -replica_path: /clickhouse/tables/01-06/visits/replicas/example01-06-1.yandex.ru -columns_version: 9 -queue_size: 1 -inserts_in_queue: 0 -merges_in_queue: 1 -part_mutations_in_queue: 0 -queue_oldest_time: 2020-02-20 08:34:30 -inserts_oldest_time: 1970-01-01 00:00:00 -merges_oldest_time: 2020-02-20 08:34:30 -part_mutations_oldest_time: 1970-01-01 00:00:00 -oldest_part_to_get: -oldest_part_to_merge_to: 20200220_20284_20840_7 -oldest_part_to_mutate_to: -log_max_index: 596273 -log_pointer: 596274 -last_queue_update: 2020-02-20 08:34:32 -absolute_delay: 0 -total_replicas: 2 -active_replicas: 2 +─────── +database: db +table: test_table +engine: ReplicatedMergeTree +is_leader: 1 +can_become_leader: 1 +is_readonly: 0 +is_session_expired: 0 +future_parts: 0 +parts_to_check: 0 +zookeeper_path: /test/test_table +replica_name: r1 +replica_path: /test/test_table/replicas/r1 +columns_version: -1 +queue_size: 27 +inserts_in_queue: 27 +merges_in_queue: 0 +part_mutations_in_queue: 0 +queue_oldest_time: 2021-10-12 14:48:48 +inserts_oldest_time: 2021-10-12 14:48:48 +merges_oldest_time: 1970-01-01 03:00:00 +part_mutations_oldest_time: 1970-01-01 03:00:00 +oldest_part_to_get: 1_17_17_0 +oldest_part_to_merge_to: +oldest_part_to_mutate_to: +log_max_index: 206 +log_pointer: 207 +last_queue_update: 2021-10-12 14:50:08 +absolute_delay: 99 +total_replicas: 5 +active_replicas: 5 +last_queue_update_exception: +zookeeper_exception: +replica_is_active: {'r1':1,'r2':1} ``` Columns: @@ -82,6 +87,8 @@ The next 4 columns have a non-zero value only where there is an active session w - `absolute_delay` (`UInt64`) - How big lag in seconds the current replica has. - `total_replicas` (`UInt8`) - The total number of known replicas of this table. - `active_replicas` (`UInt8`) - The number of replicas of this table that have a session in ZooKeeper (i.e., the number of functioning replicas). +- `last_queue_update_exception` (`String`) - When the queue contains broken entries. Especially important when ClickHouse breaks backward compatibility between versions and log entries written by newer versions aren't parseable by old versions. +- `zookeeper_exception` (`String`) - The last exception message, got if the error happened when fetching the info from ZooKeeper. - `replica_is_active` ([Map(String, UInt8)](../../sql-reference/data-types/map.md)) — Map between replica name and is replica active. If you request all the columns, the table may work a bit slowly, since several reads from ZooKeeper are made for each row. diff --git a/docs/en/operations/system-tables/tables.md b/docs/en/operations/system-tables/tables.md index f7da8a39856..0ccf69bc048 100644 --- a/docs/en/operations/system-tables/tables.md +++ b/docs/en/operations/system-tables/tables.md @@ -30,6 +30,8 @@ Columns: - `engine_full` ([String](../../sql-reference/data-types/string.md)) - Parameters of the table engine. +- `as_select` ([String](../../sql-reference/data-types/string.md)) - `SELECT` query for view. + - `partition_key` ([String](../../sql-reference/data-types/string.md)) - The partition key expression specified in the table. - `sorting_key` ([String](../../sql-reference/data-types/string.md)) - The sorting key expression specified in the table. @@ -56,6 +58,7 @@ Columns: - `comment` ([String](../../sql-reference/data-types/string.md)) - The comment for the table. +- `has_own_data` ([UInt8](../../sql-reference/data-types/int-uint.md)) — Flag that indicates whether the table itself stores some data on disk or only accesses some other source. The `system.tables` table is used in `SHOW TABLES` query implementation. @@ -80,6 +83,7 @@ dependencies_database: [] dependencies_table: [] create_table_query: CREATE TABLE base.t1 (`n` UInt64) ENGINE = MergeTree ORDER BY n SETTINGS index_granularity = 8192 engine_full: MergeTree ORDER BY n SETTINGS index_granularity = 8192 +as_select: SELECT database AS table_catalog partition_key: sorting_key: n primary_key: n @@ -90,6 +94,7 @@ total_bytes: 99 lifetime_rows: ᴺᵁᴸᴸ lifetime_bytes: ᴺᵁᴸᴸ comment: +has_own_data: 0 Row 2: ────── @@ -105,6 +110,7 @@ dependencies_database: [] dependencies_table: [] create_table_query: CREATE TABLE default.`53r93yleapyears` (`id` Int8, `febdays` Int8) ENGINE = MergeTree ORDER BY id SETTINGS index_granularity = 8192 engine_full: MergeTree ORDER BY id SETTINGS index_granularity = 8192 +as_select: SELECT name AS catalog_name partition_key: sorting_key: id primary_key: id @@ -115,6 +121,5 @@ total_bytes: 155 lifetime_rows: ᴺᵁᴸᴸ lifetime_bytes: ᴺᵁᴸᴸ comment: +has_own_data: 0 ``` - -[Original article](https://clickhouse.com/docs/en/operations/system-tables/tables) diff --git a/docs/en/operations/tips.md b/docs/en/operations/tips.md index 5cbbe71b3e0..54c66bb8d13 100644 --- a/docs/en/operations/tips.md +++ b/docs/en/operations/tips.md @@ -70,7 +70,7 @@ For HDD, enable the write cache. ## File System {#file-system} -Ext4 is the most reliable option. Set the mount options `noatime, nobarrier`. +Ext4 is the most reliable option. Set the mount options `noatime`. XFS is also suitable, but it hasn’t been as thoroughly tested with ClickHouse. Most other file systems should also work fine. File systems with delayed allocation work better. diff --git a/docs/en/operations/utilities/clickhouse-copier.md b/docs/en/operations/utilities/clickhouse-copier.md index 3e729a3a3dd..de3443fb845 100644 --- a/docs/en/operations/utilities/clickhouse-copier.md +++ b/docs/en/operations/utilities/clickhouse-copier.md @@ -47,7 +47,7 @@ Parameters: ## Format of Zookeeper.xml {#format-of-zookeeper-xml} ``` xml - + trace 100M @@ -60,13 +60,13 @@ Parameters: 2181 - + ``` ## Configuration of Copying Tasks {#configuration-of-copying-tasks} ``` xml - + @@ -179,7 +179,7 @@ Parameters: ... - + ``` `clickhouse-copier` tracks the changes in `/task/path/description` and applies them on the fly. For instance, if you change the value of `max_workers`, the number of processes running tasks will also change. diff --git a/docs/en/sql-reference/aggregate-functions/reference/entropy.md b/docs/en/sql-reference/aggregate-functions/reference/entropy.md new file mode 100644 index 00000000000..5ebb678e6b5 --- /dev/null +++ b/docs/en/sql-reference/aggregate-functions/reference/entropy.md @@ -0,0 +1,43 @@ +--- +toc_priority: 302 +--- + +# entropy {#entropy} + +Calculates [Shannon entropy](https://en.wikipedia.org/wiki/Entropy_(information_theory)) of a column of values. + +**Syntax** + +``` sql +entropy(val) +``` + +**Arguments** + +- `val` — Column of values of any type. + +**Returned value** + +- Shannon entropy. + +Type: [Float64](../../../sql-reference/data-types/float.md). + +**Example** + +Query: + +``` sql +CREATE TABLE entropy (`vals` UInt32,`strings` String) ENGINE = Memory; + +INSERT INTO entropy VALUES (1, 'A'), (1, 'A'), (1,'A'), (1,'A'), (2,'B'), (2,'B'), (2,'C'), (2,'D'); + +SELECT entropy(vals), entropy(strings) FROM entropy; +``` + +Result: + +``` text +┌─entropy(vals)─┬─entropy(strings)─┐ +│ 1 │ 1.75 │ +└───────────────┴──────────────────┘ +``` diff --git a/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md b/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md index c4a359efca4..effcc614930 100644 --- a/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md +++ b/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md @@ -26,7 +26,7 @@ You can view the list of external dictionaries and their statuses in the `system The configuration looks like this: ``` xml - + ... @@ -36,7 +36,7 @@ The configuration looks like this: ... - + ``` Corresponding [DDL-query](../../../sql-reference/statements/create/dictionary.md): @@ -53,15 +53,17 @@ LAYOUT(LAYOUT_TYPE(param value)) -- layout settings - [flat](#flat) - [hashed](#dicts-external_dicts_dict_layout-hashed) - [sparse_hashed](#dicts-external_dicts_dict_layout-sparse_hashed) -- [cache](#cache) -- [ssd_cache](#ssd-cache) -- [direct](#direct) -- [range_hashed](#range-hashed) - [complex_key_hashed](#complex-key-hashed) +- [complex_key_sparse_hashed](#complex-key-sparse-hashed) +- [hashed_array](#dicts-external_dicts_dict_layout-hashed-array) +- [complex_key_hashed_array](#complex-key-hashed-array) +- [range_hashed](#range-hashed) - [complex_key_range_hashed](#complex-key-range-hashed) +- [cache](#cache) - [complex_key_cache](#complex-key-cache) - [ssd_cache](#ssd-cache) -- [ssd_complex_key_cache](#complex-key-ssd-cache) +- [complex_key_ssd_cache](#complex-key-ssd-cache) +- [direct](#direct) - [complex_key_direct](#complex-key-direct) - [ip_trie](#ip-trie) @@ -151,13 +153,15 @@ Configuration example: ``` +or + ``` sql LAYOUT(COMPLEX_KEY_HASHED()) ``` ### complex_key_sparse_hashed {#complex-key-sparse-hashed} -This type of storage is for use with composite [keys](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-structure.md). Similar to `sparse_hashed`. +This type of storage is for use with composite [keys](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-structure.md). Similar to [sparse_hashed](#dicts-external_dicts_dict_layout-sparse_hashed). Configuration example: @@ -167,13 +171,15 @@ Configuration example: ``` +or + ``` sql LAYOUT(COMPLEX_KEY_SPARSE_HASHED()) ``` ### hashed_array {#dicts-external_dicts_dict_layout-hashed-array} -The dictionary is completely stored in memory. Each attribute is stored in array. Key attribute is stored in the form of hashed table where value is index in attributes array. The dictionary can contain any number of elements with any identifiers In practice, the number of keys can reach tens of millions of items. +The dictionary is completely stored in memory. Each attribute is stored in an array. The key attribute is stored in the form of a hashed table where value is an index in the attributes array. The dictionary can contain any number of elements with any identifiers. In practice, the number of keys can reach tens of millions of items. All types of sources are supported. When updating, data (from a file or from a table) is read in its entirety. @@ -194,7 +200,7 @@ LAYOUT(HASHED_ARRAY()) ### complex_key_hashed_array {#complex-key-hashed-array} -This type of storage is for use with composite [keys](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-structure.md). Similar to `hashed_array`. +This type of storage is for use with composite [keys](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-structure.md). Similar to [hashed_array](#dicts-external_dicts_dict_layout-hashed-array). Configuration example: @@ -204,11 +210,12 @@ Configuration example: ``` +or + ``` sql LAYOUT(COMPLEX_KEY_HASHED_ARRAY()) ``` - ### range_hashed {#range-hashed} The dictionary is stored in memory in the form of a hash table with an ordered array of ranges and their corresponding values. @@ -282,7 +289,7 @@ Details of the algorithm: Configuration example: ``` xml - + ... @@ -310,7 +317,7 @@ Configuration example: - + ``` or @@ -356,8 +363,9 @@ When searching for a dictionary, the cache is searched first. For each block of If keys are not found in dictionary, then update cache task is created and added into update queue. Update queue properties can be controlled with settings `max_update_queue_size`, `update_queue_push_timeout_milliseconds`, `query_wait_timeout_milliseconds`, `max_threads_for_updates`. -For cache dictionaries, the expiration [lifetime](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-lifetime.md) of data in the cache can be set. If more time than `lifetime` has passed since loading the data in a cell, the cell’s value is not used and key becomes expired, and it is re-requested the next time it needs to be used this behaviour can be configured with setting `allow_read_expired_keys`. -This is the least effective of all the ways to store dictionaries. The speed of the cache depends strongly on correct settings and the usage scenario. A cache type dictionary performs well only when the hit rates are high enough (recommended 99% and higher). You can view the average hit rate in the `system.dictionaries` table. +For cache dictionaries, the expiration [lifetime](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-lifetime.md) of data in the cache can be set. If more time than `lifetime` has passed since loading the data in a cell, the cell’s value is not used and key becomes expired. The key is re-requested the next time it needs to be used. This behaviour can be configured with setting `allow_read_expired_keys`. + +This is the least effective of all the ways to store dictionaries. The speed of the cache depends strongly on correct settings and the usage scenario. A cache type dictionary performs well only when the hit rates are high enough (recommended 99% and higher). You can view the average hit rate in the [system.dictionaries](../../../operations/system-tables/dictionaries.md) table. If setting `allow_read_expired_keys` is set to 1, by default 0. Then dictionary can support asynchronous updates. If a client requests keys and all of them are in cache, but some of them are expired, then dictionary will return expired keys for a client and request them asynchronously from the source. @@ -545,4 +553,3 @@ dictGetString('prefix', 'asn', tuple(IPv6StringToNum('2001:db8::1'))) Other types are not supported yet. The function returns the attribute for the prefix that corresponds to this IP address. If there are overlapping prefixes, the most specific one is returned. Data must completely fit into RAM. - diff --git a/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md b/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md index a1d787a37ea..e9746e59d1d 100644 --- a/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md +++ b/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md @@ -10,7 +10,7 @@ An external dictionary can be connected from many different sources. If dictionary is configured using xml-file, the configuration looks like this: ``` xml - + ... @@ -21,7 +21,7 @@ If dictionary is configured using xml-file, the configuration looks like this: ... ... - + ``` In case of [DDL-query](../../../sql-reference/statements/create/dictionary.md), equal configuration will looks like: @@ -311,7 +311,7 @@ Configuring `/etc/odbc.ini` (or `~/.odbc.ini` if you signed in under a user that The dictionary configuration in ClickHouse: ``` xml - + table_name @@ -340,7 +340,7 @@ The dictionary configuration in ClickHouse: - + ``` or @@ -416,7 +416,7 @@ Remarks: Configuring the dictionary in ClickHouse: ``` xml - + test @@ -446,7 +446,7 @@ Configuring the dictionary in ClickHouse: - + ``` or diff --git a/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts.md b/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts.md index d229336c58d..00025c70c60 100644 --- a/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts.md +++ b/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts.md @@ -26,7 +26,7 @@ The [dictionaries](../../../operations/system-tables/dictionaries.md#system_tabl The dictionary configuration file has the following format: ``` xml - + An optional element with any content. Ignored by the ClickHouse server. @@ -38,7 +38,7 @@ The dictionary configuration file has the following format: - + ``` You can [configure](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict.md) any number of dictionaries in the same file. diff --git a/docs/en/sql-reference/functions/arithmetic-functions.md b/docs/en/sql-reference/functions/arithmetic-functions.md index 3187f13b5b9..40fadf34eab 100644 --- a/docs/en/sql-reference/functions/arithmetic-functions.md +++ b/docs/en/sql-reference/functions/arithmetic-functions.md @@ -82,3 +82,76 @@ An exception is thrown when dividing by zero or when dividing a minimal negative Returns the least common multiple of the numbers. An exception is thrown when dividing by zero or when dividing a minimal negative number by minus one. +## max2 {#max2} + +Compares two values and returns the maximum. The returned value is converted to [Float64](../../sql-reference/data-types/float.md). + +**Syntax** + +```sql +max2(value1, value2) +``` + +**Arguments** + +- `value1` — First value. [Int/UInt](../../sql-reference/data-types/int-uint.md) or [Float](../../sql-reference/data-types/float.md). +- `value2` — Second value. [Int/UInt](../../sql-reference/data-types/int-uint.md) or [Float](../../sql-reference/data-types/float.md). + +**Returned value** + +- The maximum of two values. + +Type: [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT max2(-1, 2); +``` + +Result: + +```text +┌─max2(-1, 2)─┐ +│ 2 │ +└─────────────┘ +``` + +## min2 {#min2} + +Compares two values and returns the minimum. The returned value is converted to [Float64](../../sql-reference/data-types/float.md). + +**Syntax** + +```sql +max2(value1, value2) +``` + +**Arguments** + +- `value1` — First value. [Int/UInt](../../sql-reference/data-types/int-uint.md) or [Float](../../sql-reference/data-types/float.md). +- `value2` — Second value. [Int/UInt](../../sql-reference/data-types/int-uint.md) or [Float](../../sql-reference/data-types/float.md). + +**Returned value** + +- The minimum of two values. + +Type: [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT min2(-1, 2); +``` + +Result: + +```text +┌─min2(-1, 2)─┐ +│ -1 │ +└─────────────┘ +``` diff --git a/docs/en/sql-reference/functions/ext-dict-functions.md b/docs/en/sql-reference/functions/ext-dict-functions.md index 54b72e77f01..0e8352d2d1e 100644 --- a/docs/en/sql-reference/functions/ext-dict-functions.md +++ b/docs/en/sql-reference/functions/ext-dict-functions.md @@ -53,7 +53,7 @@ The first column is `id`, the second column is `c1`. Configure the external dictionary: ``` xml - + ext-dict-test @@ -77,7 +77,7 @@ Configure the external dictionary: 0 - + ``` Perform the query: @@ -113,7 +113,7 @@ The first column is `id`, the second is `c1`, the third is `c2`. Configure the external dictionary: ``` xml - + ext-dict-mult @@ -142,7 +142,7 @@ Configure the external dictionary: 0 - + ``` Perform the query: diff --git a/docs/en/sql-reference/functions/geo/s2.md b/docs/en/sql-reference/functions/geo/s2.md index d669b1c8b32..f8736bcc61a 100644 --- a/docs/en/sql-reference/functions/geo/s2.md +++ b/docs/en/sql-reference/functions/geo/s2.md @@ -2,13 +2,13 @@ toc_title: S2 Geometry --- -# Functions for Working with S2 Index {#s2Index} +# Functions for Working with S2 Index {#s2index} [S2](https://s2geometry.io/) is a geographical indexing system where all geographical data is represented on a three-dimensional sphere (similar to a globe). -In the S2 library points are represented as unit length vectors called S2 point indices (points on the surface of a three dimensional unit sphere) as opposed to traditional (latitude, longitude) pairs. +In the S2 library points are represented as the S2 Index - a specific number which encodes internally a point on the surface of a unit sphere, unlike traditional (latitude, longitude) pairs. To get the S2 point index for a given point specified in the format (latitude, longitude) use the [geoToS2](#geotos2) function. Also, you can use the [s2ToGeo](#s2togeo) function for getting geographical coordinates corresponding to the specified S2 point index. -## geoToS2 {#geoToS2} +## geoToS2 {#geotos2} Returns [S2](#s2index) point index corresponding to the provided coordinates `(longitude, latitude)`. @@ -34,7 +34,7 @@ Type: [UInt64](../../../sql-reference/data-types/int-uint.md). Query: ``` sql -SELECT geoToS2(37.79506683, 55.71290588) as s2Index; +SELECT geoToS2(37.79506683, 55.71290588) AS s2Index; ``` Result: @@ -45,7 +45,7 @@ Result: └─────────────────────┘ ``` -## s2ToGeo {#s2ToGeo} +## s2ToGeo {#s2togeo} Returns geo coordinates `(longitude, latitude)` corresponding to the provided [S2](#s2index) point index. @@ -57,20 +57,20 @@ s2ToGeo(s2index) **Arguments** -- `s2Index` — S2 Index. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2index` — S2 Index. [UInt64](../../../sql-reference/data-types/int-uint.md). **Returned values** - A tuple consisting of two values: `tuple(lon,lat)`. -Type: `lon` - [Float64](../../../sql-reference/data-types/float.md). `lat` — [Float64](../../../sql-reference/data-types/float.md). +Type: `lon` — [Float64](../../../sql-reference/data-types/float.md). `lat` — [Float64](../../../sql-reference/data-types/float.md). **Example** Query: ``` sql -SELECT s2ToGeo(4704772434919038107) as s2Coodrinates; +SELECT s2ToGeo(4704772434919038107) AS s2Coodrinates; ``` Result: @@ -81,9 +81,9 @@ Result: └──────────────────────────────────────┘ ``` -## s2GetNeighbors {#s2GetNeighbors} +## s2GetNeighbors {#s2getneighbors} -Returns S2 neighbor indices corresponding to the provided [S2](#s2index)). Each cell in the S2 system is a quadrilateral bounded by four geodesics. So, each cell has 4 neighbors. +Returns S2 neighbor indixes corresponding to the provided [S2](#s2index). Each cell in the S2 system is a quadrilateral bounded by four geodesics. So, each cell has 4 neighbors. **Syntax** @@ -97,16 +97,16 @@ s2GetNeighbors(s2index) **Returned values** -- An array consisting of the 4 neighbor indices: `array[s2index1, s2index3, s2index2, s2index4]`. +- An array consisting of 4 neighbor indexes: `array[s2index1, s2index3, s2index2, s2index4]`. -Type: Each S2 index is [UInt64](../../../sql-reference/data-types/int-uint.md). +Type: [UInt64](../../../sql-reference/data-types/int-uint.md). **Example** Query: ``` sql - select s2GetNeighbors(5074766849661468672) AS s2Neighbors; +SELECT s2GetNeighbors(5074766849661468672) AS s2Neighbors; ``` Result: @@ -117,9 +117,9 @@ Result: └───────────────────────────────────────────────────────────────────────────────────┘ ``` -## s2CellsIntersect {#s2CellsIntersect} +## s2CellsIntersect {#s2cellsintersect} -Determines if the two provided [S2](#s2index)) cell indices intersect or not. +Determines if the two provided [S2](#s2index) cells intersect or not. **Syntax** @@ -133,8 +133,8 @@ s2CellsIntersect(s2index1, s2index2) **Returned values** -- 1 — If the S2 cell indices intersect. -- 0 — If the S2 cell indices don't intersect. +- 1 — If the cells intersect. +- 0 — If the cells don't intersect. Type: [UInt8](../../../sql-reference/data-types/int-uint.md). @@ -143,7 +143,7 @@ Type: [UInt8](../../../sql-reference/data-types/int-uint.md). Query: ``` sql - select s2CellsIntersect(9926595209846587392, 9926594385212866560) as intersect; +SELECT s2CellsIntersect(9926595209846587392, 9926594385212866560) AS intersect; ``` Result: @@ -154,11 +154,9 @@ Result: └───────────┘ ``` -## s2CapContains {#s2CapContains} +## s2CapContains {#s2capcontains} -A cap represents a portion of the sphere that has been cut off by a plane. It is defined by a point on a sphere and a radius in degrees. - -Determines if a cap contains a s2 point index. +Determines if a cap contains a S2 point. A cap represents a part of the sphere that has been cut off by a plane. It is defined by a point on a sphere and a radius in degrees. **Syntax** @@ -168,9 +166,9 @@ s2CapContains(center, degrees, point) **Arguments** -- `center` - S2 point index corresponding to the cap. [UInt64](../../../sql-reference/data-types/int-uint.md). - - `degrees` - Radius of the cap in degrees. [Float64](../../../sql-reference/data-types/float.md). - - `point` - S2 point index. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `center` — S2 point index corresponding to the cap. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `degrees` — Radius of the cap in degrees. [Float64](../../../sql-reference/data-types/float.md). +- `point` — S2 point index. [UInt64](../../../sql-reference/data-types/int-uint.md). **Returned values** @@ -184,7 +182,7 @@ Type: [UInt8](../../../sql-reference/data-types/int-uint.md). Query: ``` sql -select s2CapContains(1157339245694594829, 1.0, 1157347770437378819) as capContains; +SELECT s2CapContains(1157339245694594829, 1.0, 1157347770437378819) AS capContains; ``` Result: @@ -195,11 +193,9 @@ Result: └─────────────┘ ``` -## s2CapUnion {#s2CapUnion} +## s2CapUnion {#s2capunion} -A cap represents a portion of the sphere that has been cut off by a plane. It is defined by a point on a sphere and a radius in degrees. - -Determines the smallest cap that contains the given two input caps. +Determines the smallest cap that contains the given two input caps. A cap represents a portion of the sphere that has been cut off by a plane. It is defined by a point on a sphere and a radius in degrees. **Syntax** @@ -209,13 +205,13 @@ s2CapUnion(center1, radius1, center2, radius2) **Arguments** -- `center1`, `center2` - S2 point indices corresponding to the two input caps. [UInt64](../../../sql-reference/data-types/int-uint.md). - - `radius1`, `radius2` - Radii of the two input caps in degrees. [Float64](../../../sql-reference/data-types/float.md). +- `center1`, `center2` — S2 point indixes corresponding to the two input caps. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `radius1`, `radius2` — Radius of the two input caps in degrees. [Float64](../../../sql-reference/data-types/float.md). **Returned values** -- `center` - S2 point index corresponding the center of the smallest cap containing the two input caps. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). - - `radius` - Radius of the smallest cap containing the two input caps. Type: [Float64](../../../sql-reference/data-types/float.md). +- `center` — S2 point index corresponding the center of the smallest cap containing the two input caps. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). +- `radius` — Radius of the smallest cap containing the two input caps. Type: [Float64](../../../sql-reference/data-types/float.md). **Example** @@ -233,11 +229,9 @@ Result: └────────────────────────────────────────┘ ``` -## s2RectAdd{#s2RectAdd} +## s2RectAdd {#s2rectadd} -In the S2 system, a rectangle is represented by a type of S2Region called a S2LatLngRect that represents a rectangle in latitude-longitude space. - -Increases the size of the bounding rectangle to include the given S2 point index. +Increases the size of the bounding rectangle to include the given S2 point. In the S2 system, a rectangle is represented by a type of S2Region called a `S2LatLngRect` that represents a rectangle in latitude-longitude space. **Syntax** @@ -247,21 +241,21 @@ s2RectAdd(s2pointLow, s2pointHigh, s2Point) **Arguments** -- `s2PointLow` - Low S2 point index corresponding to the rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). -- `s2PointHigh` - High S2 point index corresponding to the rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). -- `s2Point` - Target S2 point index that the bound rectangle should be grown to include. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2PointLow` — Low S2 point index corresponding to the rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2PointHigh` — High S2 point index corresponding to the rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2Point` — Target S2 point index that the bound rectangle should be grown to include. [UInt64](../../../sql-reference/data-types/int-uint.md). **Returned values** -- `s2PointLow` - Low S2 cell id corresponding to the grown rectangle. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). - - `s2PointHigh` - Hight S2 cell id corresponding to the grown rectangle. Type: [UInt64](../../../sql-reference/data-types/float.md). +- `s2PointLow` — Low S2 cell id corresponding to the grown rectangle. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2PointHigh` — Hight S2 cell id corresponding to the grown rectangle. Type: [UInt64](../../../sql-reference/data-types/float.md). **Example** Query: ``` sql -SELECT s2RectAdd(5178914411069187297, 5177056748191934217, 5179056748191934217) as rectAdd; +SELECT s2RectAdd(5178914411069187297, 5177056748191934217, 5179056748191934217) AS rectAdd; ``` Result: @@ -272,11 +266,9 @@ Result: └───────────────────────────────────────────┘ ``` -## s2RectContains{#s2RectContains} +## s2RectContains {#s2rectcontains} -In the S2 system, a rectangle is represented by a type of S2Region called a S2LatLngRect that represents a rectangle in latitude-longitude space. - -Determines if a given rectangle contains a S2 point index. +Determines if a given rectangle contains a S2 point. In the S2 system, a rectangle is represented by a type of S2Region called a `S2LatLngRect` that represents a rectangle in latitude-longitude space. **Syntax** @@ -286,9 +278,9 @@ s2RectContains(s2PointLow, s2PointHi, s2Point) **Arguments** -- `s2PointLow` - Low S2 point index corresponding to the rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). -- `s2PointHigh` - High S2 point index corresponding to the rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). -- `s2Point` - Target S2 point index. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2PointLow` — Low S2 point index corresponding to the rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2PointHigh` — High S2 point index corresponding to the rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2Point` — Target S2 point index. [UInt64](../../../sql-reference/data-types/int-uint.md). **Returned values** @@ -300,7 +292,7 @@ s2RectContains(s2PointLow, s2PointHi, s2Point) Query: ``` sql -SELECT s2RectContains(5179062030687166815, 5177056748191934217, 5177914411069187297) AS rectContains +SELECT s2RectContains(5179062030687166815, 5177056748191934217, 5177914411069187297) AS rectContains; ``` Result: @@ -311,11 +303,9 @@ Result: └──────────────┘ ``` -## s2RectUinion{#s2RectUnion} +## s2RectUinion {#s2rectunion} -In the S2 system, a rectangle is represented by a type of S2Region called a S2LatLngRect that represents a rectangle in latitude-longitude space. - -Returns the smallest rectangle containing the union of this rectangle and the given rectangle. +Returns the smallest rectangle containing the union of this rectangle and the given rectangle. In the S2 system, a rectangle is represented by a type of S2Region called a `S2LatLngRect` that represents a rectangle in latitude-longitude space. **Syntax** @@ -325,20 +315,20 @@ s2RectUnion(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi) **Arguments** -- `s2Rect1PointLow`, `s2Rect1PointHi` - Low and High S2 point indices corresponding to the first rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). -- `s2Rect2PointLow`, `s2Rect2PointHi` - Low and High S2 point indices corresponding to the second rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2Rect1PointLow`, `s2Rect1PointHi` — Low and High S2 point indexes corresponding to the first rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2Rect2PointLow`, `s2Rect2PointHi` — Low and High S2 point indexes corresponding to the second rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). **Returned values** -- `s2UnionRect2PointLow` - Low S2 cell id corresponding to the union rectangle. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). -- `s2UnionRect2PointHi` - High S2 cell id corresponding to the union rectangle. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2UnionRect2PointLow` — Low S2 cell id corresponding to the union rectangle. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2UnionRect2PointHi` — High S2 cell id corresponding to the union rectangle. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). **Example** Query: ``` sql -SELECT s2RectUnion(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectUnion +SELECT s2RectUnion(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectUnion; ``` Result: @@ -349,9 +339,9 @@ Result: └───────────────────────────────────────────┘ ``` -## s2RectIntersection{#s2RectIntersection} +## s2RectIntersection {#s2rectintersection} -Returns the smallest Rectangle containing the intersection of this rectangle and the given rectangle. +Returns the smallest rectangle containing the intersection of this rectangle and the given rectangle. In the S2 system, a rectangle is represented by a type of S2Region called a `S2LatLngRect` that represents a rectangle in latitude-longitude space. **Syntax** @@ -361,20 +351,20 @@ s2RectIntersection(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2Poin **Arguments** -- `s2Rect1PointLow`, `s2Rect1PointHi` - Low and High S2 point indices corresponding to the first rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). -- `s2Rect2PointLow`, `s2Rect2PointHi` - Low and High S2 point indices corresponding to the second rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2Rect1PointLow`, `s2Rect1PointHi` — Low and High S2 point indexes corresponding to the first rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2Rect2PointLow`, `s2Rect2PointHi` — Low and High S2 point indexes corresponding to the second rectangle. [UInt64](../../../sql-reference/data-types/int-uint.md). **Returned values** -- `s2UnionRect2PointLow` - Low S2 cell id corresponding to the rectangle containing the intersection of the given rectangles. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). -- `s2UnionRect2PointHi` - Hi S2 cell id corresponding to the rectangle containing the intersection of the given rectangles. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2UnionRect2PointLow` — Low S2 cell id corresponding to the rectangle containing the intersection of the given rectangles. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2UnionRect2PointHi` — High S2 cell id corresponding to the rectangle containing the intersection of the given rectangles. Type: [UInt64](../../../sql-reference/data-types/int-uint.md). **Example** Query: ``` sql -SELECT s2RectIntersection(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectIntersection +SELECT s2RectIntersection(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectIntersection; ``` Result: diff --git a/docs/en/sql-reference/functions/json-functions.md b/docs/en/sql-reference/functions/json-functions.md index fc49d3a810d..f3617082522 100644 --- a/docs/en/sql-reference/functions/json-functions.md +++ b/docs/en/sql-reference/functions/json-functions.md @@ -306,6 +306,77 @@ Result: └───────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` +## JSON_EXISTS(json, path) {#json-exists} + +If the value exists in the JSON document, `1` will be returned. + +If the value does not exist, `0` will be returned. + +Examples: + +``` sql +SELECT JSON_EXISTS('{"hello":1}', '$.hello'); +SELECT JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world'); +SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[*]'); +SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[0]'); +``` + +!!! note "Note" + before version 21.11 the order of arguments was wrong, i.e. JSON_EXISTS(path, json) + +## JSON_QUERY(json, path) {#json-query} + +Parses a JSON and extract a value as JSON array or JSON object. + +If the value does not exist, an empty string will be returned. + +Example: + +``` sql +SELECT JSON_QUERY('{"hello":"world"}', '$.hello'); +SELECT JSON_QUERY('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]'); +SELECT JSON_QUERY('{"hello":2}', '$.hello'); +SELECT toTypeName(JSON_QUERY('{"hello":2}', '$.hello')); +``` + +Result: + +``` text +["world"] +[0, 1, 4, 0, -1, -4] +[2] +String +``` +!!! note "Note" + before version 21.11 the order of arguments was wrong, i.e. JSON_QUERY(path, json) + +## JSON_VALUE(json, path) {#json-value} + +Parses a JSON and extract a value as JSON scalar. + +If the value does not exist, an empty string will be returned. + +Example: + +``` sql +SELECT JSON_VALUE('{"hello":"world"}', '$.hello'); +SELECT JSON_VALUE('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]'); +SELECT JSON_VALUE('{"hello":2}', '$.hello'); +SELECT toTypeName(JSON_VALUE('{"hello":2}', '$.hello')); +``` + +Result: + +``` text +"world" +0 +2 +String +``` + +!!! note "Note" + before version 21.11 the order of arguments was wrong, i.e. JSON_VALUE(path, json) + ## toJSONString {#tojsonstring} Serializes a value to its JSON representation. Various data types and nested structures are supported. diff --git a/docs/en/sql-reference/functions/machine-learning-functions.md b/docs/en/sql-reference/functions/machine-learning-functions.md index 4d9322526df..b823340058e 100644 --- a/docs/en/sql-reference/functions/machine-learning-functions.md +++ b/docs/en/sql-reference/functions/machine-learning-functions.md @@ -15,82 +15,4 @@ The [stochasticLinearRegression](../../sql-reference/aggregate-functions/referen ## stochasticLogisticRegression {#stochastic-logistic-regression} -The [stochasticLogisticRegression](../../sql-reference/aggregate-functions/reference/stochasticlogisticregression.md#agg_functions-stochasticlogisticregression) aggregate function implements stochastic gradient descent method for binary classification problem. Uses `evalMLMethod` to predict on new data. - -## bayesAB {#bayesab} - -Compares test groups (variants) and calculates for each group the probability to be the best one. The first group is used as a control group. - -**Syntax** - -``` sql -bayesAB(distribution_name, higher_is_better, variant_names, x, y) -``` - -**Arguments** - -- `distribution_name` — Name of the probability distribution. [String](../../sql-reference/data-types/string.md). Possible values: - - - `beta` for [Beta distribution](https://en.wikipedia.org/wiki/Beta_distribution) - - `gamma` for [Gamma distribution](https://en.wikipedia.org/wiki/Gamma_distribution) - -- `higher_is_better` — Boolean flag. [Boolean](../../sql-reference/data-types/boolean.md). Possible values: - - - `0` — lower values are considered to be better than higher - - `1` — higher values are considered to be better than lower - -- `variant_names` — Variant names. [Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md)). - -- `x` — Numbers of tests for the corresponding variants. [Array](../../sql-reference/data-types/array.md)([Float64](../../sql-reference/data-types/float.md)). - -- `y` — Numbers of successful tests for the corresponding variants. [Array](../../sql-reference/data-types/array.md)([Float64](../../sql-reference/data-types/float.md)). - -!!! note "Note" - All three arrays must have the same size. All `x` and `y` values must be non-negative constant numbers. `y` cannot be larger than `x`. - -**Returned values** - -For each variant the function calculates: -- `beats_control` — long-term probability to out-perform the first (control) variant -- `to_be_best` — long-term probability to out-perform all other variants - -Type: JSON. - -**Example** - -Query: - -``` sql -SELECT bayesAB('beta', 1, ['Control', 'A', 'B'], [3000., 3000., 3000.], [100., 90., 110.]) FORMAT PrettySpace; -``` - -Result: - -``` text -{ - "data":[ - { - "variant_name":"Control", - "x":3000, - "y":100, - "beats_control":0, - "to_be_best":0.22619 - }, - { - "variant_name":"A", - "x":3000, - "y":90, - "beats_control":0.23469, - "to_be_best":0.04671 - }, - { - "variant_name":"B", - "x":3000, - "y":110, - "beats_control":0.7580899999999999, - "to_be_best":0.7271 - } - ] -} -``` - +The [stochasticLogisticRegression](../../sql-reference/aggregate-functions/reference/stochasticlogisticregression.md#agg_functions-stochasticlogisticregression) aggregate function implements stochastic gradient descent method for binary classification problem. Uses `evalMLMethod` to predict on new data. \ No newline at end of file diff --git a/docs/en/sql-reference/functions/other-functions.md b/docs/en/sql-reference/functions/other-functions.md index 6864ba7705b..11c1e9ad3cf 100644 --- a/docs/en/sql-reference/functions/other-functions.md +++ b/docs/en/sql-reference/functions/other-functions.md @@ -2427,3 +2427,39 @@ Type: [UInt32](../../sql-reference/data-types/int-uint.md). **See Also** - [shardNum()](#shard-num) function example also contains `shardCount()` function call. + +## getOSKernelVersion {#getoskernelversion} + +Returns a string with the current OS kernel version. + +**Syntax** + +``` sql +getOSKernelVersion() +``` + +**Arguments** + +- None. + +**Returned value** + +- The current OS kernel version. + +Type: [String](../../sql-reference/data-types/string.md). + +**Example** + +Query: + +``` sql +SELECT getOSKernelVersion(); +``` + +Result: + +``` text +┌─getOSKernelVersion()────┐ +│ Linux 4.15.0-55-generic │ +└─────────────────────────┘ +``` diff --git a/docs/en/sql-reference/functions/splitting-merging-functions.md b/docs/en/sql-reference/functions/splitting-merging-functions.md index 718d5a977b9..b8ec276c7f9 100644 --- a/docs/en/sql-reference/functions/splitting-merging-functions.md +++ b/docs/en/sql-reference/functions/splitting-merging-functions.md @@ -213,7 +213,7 @@ SELECT splitByNonAlpha(' 1! a, b. '); ## arrayStringConcat(arr\[, separator\]) {#arraystringconcatarr-separator} -Concatenates the strings listed in the array with the separator.’separator’ is an optional parameter: a constant string, set to an empty string by default. +Concatenates string representations of values listed in the array with the separator. `separator` is an optional parameter: a constant string, set to an empty string by default. Returns the string. ## alphaTokens(s) {#alphatokenss} @@ -270,3 +270,70 @@ Result: │ [['abc','123'],['8','"hkl"']] │ └───────────────────────────────────────────────────────────────────────┘ ``` + +## ngrams {#ngrams} + +Splits the UTF-8 string into n-grams of `ngramsize` symbols. + +**Syntax** + +``` sql +ngrams(string, ngramsize) +``` + +**Arguments** + +- `string` — String. [String](../../sql-reference/data-types/string.md) or [FixedString](../../sql-reference/data-types/fixedstring.md). +- `ngramsize` — The size of an n-gram. [UInt](../../sql-reference/data-types/int-uint.md). + +**Returned values** + +- Array with n-grams. + +Type: [Array](../../sql-reference/data-types/array.md)([FixedString](../../sql-reference/data-types/fixedstring.md)). + +**Example** + +Query: + +``` sql +SELECT ngrams('ClickHouse', 3); +``` + +Result: + +``` text +┌─ngrams('ClickHouse', 3)───────────────────────────┐ +│ ['Cli','lic','ick','ckH','kHo','Hou','ous','use'] │ +└───────────────────────────────────────────────────┘ +``` + +## tokens {#tokens} + +Splits a string into tokens using non-alphanumeric ASCII characters as separators. + +**Arguments** + +- `input_string` — Any set of bytes represented as the [String](../../sql-reference/data-types/string.md) data type object. + +**Returned value** + +- The resulting array of tokens from input string. + +Type: [Array](../data-types/array.md). + +**Example** + +Query: + +``` sql +SELECT tokens('test1,;\\ test2,;\\ test3,;\\ test4') AS tokens; +``` + +Result: + +``` text +┌─tokens────────────────────────────┐ +│ ['test1','test2','test3','test4'] │ +└───────────────────────────────────┘ +``` \ No newline at end of file diff --git a/docs/en/sql-reference/functions/string-functions.md b/docs/en/sql-reference/functions/string-functions.md index 05c291bb41d..a30cacde519 100644 --- a/docs/en/sql-reference/functions/string-functions.md +++ b/docs/en/sql-reference/functions/string-functions.md @@ -313,32 +313,6 @@ SELECT toValidUTF8('\x61\xF0\x80\x80\x80b'); └───────────────────────┘ ``` -## tokens {#tokens} - -Split string into tokens using non-alpha numeric ASCII characters as separators. - -**Arguments** - -- `input_string` — Any set of bytes represented as the [String](../../sql-reference/data-types/string.md) data type object. - -**Returned value** - -- The resulting array of tokens from input string. - -Type: [Array](../data-types/array.md). - -**Example** - -``` sql -SELECT tokens('test1,;\\ test2,;\\ test3,;\\ test4') AS tokens; -``` - -``` text -┌─tokens────────────────────────────┐ -│ ['test1','test2','test3','test4'] │ -└───────────────────────────────────┘ -``` - ## repeat {#repeat} Repeats a string as many times as specified and concatenates the replicated values as a single string. @@ -810,6 +784,150 @@ Result: └─────┘ ``` +## normalizeUTF8NFC {#normalizeutf8nfc} + +Converts a string to [NFC normalized form](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms), assuming the string contains a set of bytes that make up a UTF-8 encoded text. + +**Syntax** + +``` sql +normalizeUTF8NFC(words) +``` + +**Arguments** + +- `words` — Input string that contains UTF-8 encoded text. [String](../../sql-reference/data-types/string.md). + +**Returned value** + +- String transformed to NFC normalization form. + +Type: [String](../../sql-reference/data-types/string.md). + +**Example** + +Query: + +``` sql +SELECT length('â'), normalizeUTF8NFC('â') AS nfc, length(nfc) AS nfc_len; +``` + +Result: + +``` text +┌─length('â')─┬─nfc─┬─nfc_len─┐ +│ 2 │ â │ 2 │ +└─────────────┴─────┴─────────┘ +``` + +## normalizeUTF8NFD {#normalizeutf8nfd} + +Converts a string to [NFD normalized form](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms), assuming the string contains a set of bytes that make up a UTF-8 encoded text. + +**Syntax** + +``` sql +normalizeUTF8NFD(words) +``` + +**Arguments** + +- `words` — Input string that contains UTF-8 encoded text. [String](../../sql-reference/data-types/string.md). + +**Returned value** + +- String transformed to NFD normalization form. + +Type: [String](../../sql-reference/data-types/string.md). + +**Example** + +Query: + +``` sql +SELECT length('â'), normalizeUTF8NFD('â') AS nfd, length(nfd) AS nfd_len; +``` + +Result: + +``` text +┌─length('â')─┬─nfd─┬─nfd_len─┐ +│ 2 │ â │ 3 │ +└─────────────┴─────┴─────────┘ +``` + +## normalizeUTF8NFKC {#normalizeutf8nfkc} + +Converts a string to [NFKC normalized form](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms), assuming the string contains a set of bytes that make up a UTF-8 encoded text. + +**Syntax** + +``` sql +normalizeUTF8NFKC(words) +``` + +**Arguments** + +- `words` — Input string that contains UTF-8 encoded text. [String](../../sql-reference/data-types/string.md). + +**Returned value** + +- String transformed to NFKC normalization form. + +Type: [String](../../sql-reference/data-types/string.md). + +**Example** + +Query: + +``` sql +SELECT length('â'), normalizeUTF8NFKC('â') AS nfkc, length(nfkc) AS nfkc_len; +``` + +Result: + +``` text +┌─length('â')─┬─nfkc─┬─nfkc_len─┐ +│ 2 │ â │ 2 │ +└─────────────┴──────┴──────────┘ +``` + +## normalizeUTF8NFKD {#normalizeutf8nfkd} + +Converts a string to [NFKD normalized form](https://en.wikipedia.org/wiki/Unicode_equivalence#Normal_forms), assuming the string contains a set of bytes that make up a UTF-8 encoded text. + +**Syntax** + +``` sql +normalizeUTF8NFKD(words) +``` + +**Arguments** + +- `words` — Input string that contains UTF-8 encoded text. [String](../../sql-reference/data-types/string.md). + +**Returned value** + +- String transformed to NFKD normalization form. + +Type: [String](../../sql-reference/data-types/string.md). + +**Example** + +Query: + +``` sql +SELECT length('â'), normalizeUTF8NFKD('â') AS nfkd, length(nfkd) AS nfkd_len; +``` + +Result: + +``` text +┌─length('â')─┬─nfkd─┬─nfkd_len─┐ +│ 2 │ â │ 3 │ +└─────────────┴──────┴──────────┘ +``` + ## encodeXMLComponent {#encode-xml-component} Escapes characters to place string into XML text node or attribute. diff --git a/docs/en/sql-reference/functions/tuple-functions.md b/docs/en/sql-reference/functions/tuple-functions.md index 39e59ae2ba9..b72b75d6de6 100644 --- a/docs/en/sql-reference/functions/tuple-functions.md +++ b/docs/en/sql-reference/functions/tuple-functions.md @@ -165,3 +165,878 @@ Result: │ 2 │ └─────────────────┘ ``` + +## tupleToNameValuePairs {#tupletonamevaluepairs} + +Turns a named tuple into an array of (name, value) pairs. For a `Tuple(a T, b T, ..., c T)` returns `Array(Tuple(String, T), ...)` +in which the `Strings` represents the named fields of the tuple and `T` are the values associated with those names. All values in the tuple should be of the same type. + +**Syntax** + +``` sql +tupleToNameValuePairs(tuple) + +**Arguments** + +- `tuple` — Named tuple. [Tuple](../../sql-reference/data-types/tuple.md) with any types of values. + +**Returned value** + +- An array with (name, value) pairs. + +Type: [Array](../../sql-reference/data-types/array.md)([Tuple](../../sql-reference/data-types/tuple.md)([String](../../sql-reference/data-types/string.md), ...)). + +**Example** + +Query: + +``` sql +CREATE TABLE tupletest (`col` Tuple(user_ID UInt64, session_ID UInt64) ENGINE = Memory; + +INSERT INTO tupletest VALUES (tuple( 100, 2502)), (tuple(1,100)); + +SELECT tupleToNameValuePairs(col) FROM tupletest; +``` + +Result: + +``` text +┌─tupleToNameValuePairs(col)────────────┐ +│ [('user_ID',100),('session_ID',2502)] │ +│ [('user_ID',1),('session_ID',100)] │ +└───────────────────────────────────────┘ +``` + +It is possible to transform colums to rows using this function: + +``` sql +CREATE TABLE tupletest (`col` Tuple(CPU Float64, Memory Float64, Disk Float64)) ENGINE = Memory; + +INSERT INTO tupletest VALUES(tuple(3.3, 5.5, 6.6)); + +SELECT arrayJoin(tupleToNameValuePairs(col))FROM tupletest; +``` + +Result: + +``` text +┌─arrayJoin(tupleToNameValuePairs(col))─┐ +│ ('CPU',3.3) │ +│ ('Memory',5.5) │ +│ ('Disk',6.6) │ +└───────────────────────────────────────┘ +``` + +If you pass a simple tuple to the function, ClickHouse uses the indexes of the values as their names: + +``` sql +SELECT tupleToNameValuePairs(tuple(3, 2, 1)); +``` + +Result: + +``` text +┌─tupleToNameValuePairs(tuple(3, 2, 1))─┐ +│ [('1',3),('2',2),('3',1)] │ +└───────────────────────────────────────┘ + +## tuplePlus {#tupleplus} + +Calculates the sum of corresponding values of two tuples of the same size. + +**Syntax** + +```sql +tuplePlus(tuple1, tuple2) +``` + +Alias: `vectorSum`. + +**Arguments** + +- `tuple1` — First tuple. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — Second tuple. [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Tuple with the sum. + +Type: [Tuple](../../sql-reference/data-types/tuple.md). + +**Example** + +Query: + +```sql +SELECT tuplePlus((1, 2), (2, 3)); +``` + +Result: + +```text +┌─tuplePlus((1, 2), (2, 3))─┐ +│ (3,5) │ +└───────────────────────────┘ +``` + +## tupleMinus {#tupleminus} + +Calculates the subtraction of corresponding values of two tuples of the same size. + +**Syntax** + +```sql +tupleMinus(tuple1, tuple2) +``` + +Alias: `vectorDifference`. + +**Arguments** + +- `tuple1` — First tuple. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — Second tuple. [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Tuple with the result of subtraction. + +Type: [Tuple](../../sql-reference/data-types/tuple.md). + +**Example** + +Query: + +```sql +SELECT tupleMinus((1, 2), (2, 3)); +``` + +Result: + +```text +┌─tupleMinus((1, 2), (2, 3))─┐ +│ (-1,-1) │ +└────────────────────────────┘ +``` + +## tupleMultiply {#tuplemultiply} + +Calculates the multiplication of corresponding values of two tuples of the same size. + +**Syntax** + +```sql +tupleMultiply(tuple1, tuple2) +``` + +**Arguments** + +- `tuple1` — First tuple. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — Second tuple. [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Tuple with the multiplication. + +Type: [Tuple](../../sql-reference/data-types/tuple.md). + +**Example** + +Query: + +```sql +SELECT tupleMultiply((1, 2), (2, 3)); +``` + +Result: + +```text +┌─tupleMultiply((1, 2), (2, 3))─┐ +│ (2,6) │ +└───────────────────────────────┘ +``` + +## tupleDivide {#tupledivide} + +Calculates the division of corresponding values of two tuples of the same size. Note that division by zero will return `inf`. + +**Syntax** + +```sql +tupleDivide(tuple1, tuple2) +``` + +**Arguments** + +- `tuple1` — First tuple. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — Second tuple. [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Tuple with the result of division. + +Type: [Tuple](../../sql-reference/data-types/tuple.md). + +**Example** + +Query: + +```sql +SELECT tupleDivide((1, 2), (2, 3)); +``` + +Result: + +```text +┌─tupleDivide((1, 2), (2, 3))─┐ +│ (0.5,0.6666666666666666) │ +└─────────────────────────────┘ +``` + +## tupleNegate {#tuplenegate} + +Calculates the negation of the tuple values. + +**Syntax** + +```sql +tupleNegate(tuple) +``` + +**Arguments** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Tuple with the result of negation. + +Type: [Tuple](../../sql-reference/data-types/tuple.md). + +**Example** + +Query: + +```sql +SELECT tupleNegate((1, 2)); +``` + +Result: + +```text +┌─tupleNegate((1, 2))─┐ +│ (-1,-2) │ +└─────────────────────┘ +``` + +## tupleMultiplyByNumber {#tuplemultiplybynumber} + +Returns a tuple with all values multiplied by a number. + +**Syntax** + +```sql +tupleMultiplyByNumber(tuple, number) +``` + +**Arguments** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). +- `number` — Multiplier. [Int/UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) or [Decimal](../../sql-reference/data-types/decimal.md). + +**Returned value** + +- Tuple with multiplied values. + +Type: [Tuple](../../sql-reference/data-types/tuple.md). + +**Example** + +Query: + +```sql +SELECT tupleMultiplyByNumber((1, 2), -2.1); +``` + +Result: + +```text +┌─tupleMultiplyByNumber((1, 2), -2.1)─┐ +│ (-2.1,-4.2) │ +└─────────────────────────────────────┘ +``` + +## tupleDivideByNumber {#tupledividebynumber} + +Returns a tuple with all values divided by a number. Note that division by zero will return `inf`. + +**Syntax** + +```sql +tupleDivideByNumber(tuple, number) +``` + +**Arguments** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). +- `number` — Divider. [Int/UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) or [Decimal](../../sql-reference/data-types/decimal.md). + +**Returned value** + +- Tuple with divided values. + +Type: [Tuple](../../sql-reference/data-types/tuple.md). + +**Example** + +Query: + +```sql +SELECT tupleDivideByNumber((1, 2), 0.5); +``` + +Result: + +```text +┌─tupleDivideByNumber((1, 2), 0.5)─┐ +│ (2,4) │ +└──────────────────────────────────┘ +``` + +## dotProduct {#dotproduct} + +Calculates the scalar product of two tuples of the same size. + +**Syntax** + +```sql +dotProduct(tuple1, tuple2) +``` + +Alias: `scalarProduct`. + +**Arguments** + +- `tuple1` — First tuple. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — Second tuple. [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Scalar product. + +Type: [Int/UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) or [Decimal](../../sql-reference/data-types/decimal.md). + +**Example** + +Query: + +```sql +SELECT dotProduct((1, 2), (2, 3)); +``` + +Result: + +```text +┌─dotProduct((1, 2), (2, 3))─┐ +│ 8 │ +└────────────────────────────┘ +``` + +## L1Norm {#l1norm} + +Calculates the sum of absolute values of a tuple. + +**Syntax** + +```sql +L1Norm(tuple) +``` + +Alias: `normL1`. + +**Arguments** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- L1-norm or [taxicab geometry](https://en.wikipedia.org/wiki/Taxicab_geometry) distance. + +Type: [UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) or [Decimal](../../sql-reference/data-types/decimal.md). + +**Example** + +Query: + +```sql +SELECT L1Norm((1, 2)); +``` + +Result: + +```text +┌─L1Norm((1, 2))─┐ +│ 3 │ +└────────────────┘ +``` + +## L2Norm {#l2norm} + +Calculates the square root of the sum of the squares of the tuple values. + +**Syntax** + +```sql +L2Norm(tuple) +``` + +Alias: `normL2`. + +**Arguments** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- L2-norm or [Euclidean distance](https://en.wikipedia.org/wiki/Euclidean_distance). + +Type: [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT L2Norm((1, 2)); +``` + +Result: + +```text +┌───L2Norm((1, 2))─┐ +│ 2.23606797749979 │ +└──────────────────┘ +``` + +## LinfNorm {#linfnorm} + +Calculates the maximum of absolute values of a tuple. + +**Syntax** + +```sql +LinfNorm(tuple) +``` + +Alias: `normLinf`. + +**Arguments** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Linf-norm or the maximum absolute value. + +Type: [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT LinfNorm((1, -2)); +``` + +Result: + +```text +┌─LinfNorm((1, -2))─┐ +│ 2 │ +└───────────────────┘ +``` + +## LpNorm {#lpnorm} + +Calculates the root of `p`-th power of the sum of the absolute values of a tuple in the power of `p`. + +**Syntax** + +```sql +LpNorm(tuple, p) +``` + +Alias: `normLp`. + +**Arguments** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). +- `p` — The power. Possible values: real number in `[1; inf)`. [UInt](../../sql-reference/data-types/int-uint.md) or [Float](../../sql-reference/data-types/float.md). + +**Returned value** + +- [Lp-norm](https://en.wikipedia.org/wiki/Norm_(mathematics)#p-norm) + +Type: [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT LpNorm((1, -2), 2); +``` + +Result: + +```text +┌─LpNorm((1, -2), 2)─┐ +│ 2.23606797749979 │ +└────────────────────┘ +``` + +## L1Distance {#l1distance} + +Calculates the distance between two points (the values of the tuples are the coordinates) in `L1` space (1-norm ([taxicab geometry](https://en.wikipedia.org/wiki/Taxicab_geometry) distance)). + +**Syntax** + +```sql +L1Distance(tuple1, tuple2) +``` + +Alias: `distanceL1`. + +**Arguments** + +- `tuple1` — First tuple. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple1` — Second tuple. [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- 1-norm distance. + +Type: [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT L1Distance((1, 2), (2, 3)); +``` + +Result: + +```text +┌─L1Distance((1, 2), (2, 3))─┐ +│ 2 │ +└────────────────────────────┘ +``` + +## L2Distance {#l2distance} + +Calculates the distance between two points (the values of the tuples are the coordinates) in Euclidean space ([Euclidean distance](https://en.wikipedia.org/wiki/Euclidean_distance)). + +**Syntax** + +```sql +L2Distance(tuple1, tuple2) +``` + +Alias: `distanceL2`. + +**Arguments** + +- `tuple1` — First tuple. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple1` — Second tuple. [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- 2-norm distance. + +Type: [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT L2Distance((1, 2), (2, 3)); +``` + +Result: + +```text +┌─L2Distance((1, 2), (2, 3))─┐ +│ 1.4142135623730951 │ +└────────────────────────────┘ +``` + +## LinfDistance {#linfdistance} + +Calculates the distance between two points (the values of the tuples are the coordinates) in `L_{inf}` space ([maximum norm](https://en.wikipedia.org/wiki/Norm_(mathematics)#Maximum_norm_(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm))). + +**Syntax** + +```sql +LinfDistance(tuple1, tuple2) +``` + +Alias: `distanceLinf`. + +**Arguments** + +- `tuple1` — First tuple. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple1` — Second tuple. [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Infinity-norm distance. + +Type: [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT LinfDistance((1, 2), (2, 3)); +``` + +Result: + +```text +┌─LinfDistance((1, 2), (2, 3))─┐ +│ 1 │ +└──────────────────────────────┘ +``` + +## LpDistance {#lpdistance} + +Calculates the distance between two points (the values of the tuples are the coordinates) in `Lp` space ([p-norm distance](https://en.wikipedia.org/wiki/Norm_(mathematics)#p-norm)). + +**Syntax** + +```sql +LpDistance(tuple1, tuple2, p) +``` + +Alias: `distanceLp`. + +**Arguments** + +- `tuple1` — First tuple. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple1` — Second tuple. [Tuple](../../sql-reference/data-types/tuple.md). +- `p` — The power. Possible values: real number from `[1; inf)`. [UInt](../../sql-reference/data-types/int-uint.md) or [Float](../../sql-reference/data-types/float.md). + +**Returned value** + +- p-norm distance. + +Type: [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT LpDistance((1, 2), (2, 3), 3); +``` + +Result: + +```text +┌─LpDistance((1, 2), (2, 3), 3)─┐ +│ 1.2599210498948732 │ +└───────────────────────────────┘ +``` + +## L1Normalize {#l1normalize} + +Calculates the unit vector of a given vector (the values of the tuple are the coordinates) in `L1` space ([taxicab geometry](https://en.wikipedia.org/wiki/Taxicab_geometry)). + +**Syntax** + +```sql +L1Normalize(tuple) +``` + +Alias: `normalizeL1`. + +**Arguments** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Unit vector. + +Type: [Tuple](../../sql-reference/data-types/tuple.md) of [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT L1Normalize((1, 2)); +``` + +Result: + +```text +┌─L1Normalize((1, 2))─────────────────────┐ +│ (0.3333333333333333,0.6666666666666666) │ +└─────────────────────────────────────────┘ +``` + +## L2Normalize {#l2normalize} + +Calculates the unit vector of a given vector (the values of the tuple are the coordinates) in Euclidean space (using [Euclidean distance](https://en.wikipedia.org/wiki/Euclidean_distance)). + +**Syntax** + +```sql +L2Normalize(tuple) +``` + +Alias: `normalizeL1`. + +**Arguments** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Unit vector. + +Type: [Tuple](../../sql-reference/data-types/tuple.md) of [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT L2Normalize((3, 4)); +``` + +Result: + +```text +┌─L2Normalize((3, 4))─┐ +│ (0.6,0.8) │ +└─────────────────────┘ +``` + +## LinfNormalize {#linfnormalize} + +Calculates the unit vector of a given vector (the values of the tuple are the coordinates) in `L_{inf}` space (using [maximum norm](https://en.wikipedia.org/wiki/Norm_(mathematics)#Maximum_norm_(special_case_of:_infinity_norm,_uniform_norm,_or_supremum_norm))). + +**Syntax** + +```sql +LinfNormalize(tuple) +``` + +Alias: `normalizeLinf `. + +**Arguments** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Unit vector. + +Type: [Tuple](../../sql-reference/data-types/tuple.md) of [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT LinfNormalize((3, 4)); +``` + +Result: + +```text +┌─LinfNormalize((3, 4))─┐ +│ (0.75,1) │ +└───────────────────────┘ +``` + +## LpNormalize {#lpnormalize} + +Calculates the unit vector of a given vector (the values of the tuple are the coordinates) in `Lp` space (using [p-norm](https://en.wikipedia.org/wiki/Norm_(mathematics)#p-norm)). + +**Syntax** + +```sql +LpNormalize(tuple, p) +``` + +Alias: `normalizeLp `. + +**Arguments** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). +- `p` — The power. Possible values: any number from [1;inf). [UInt](../../sql-reference/data-types/int-uint.md) or [Float](../../sql-reference/data-types/float.md). + +**Returned value** + +- Unit vector. + +Type: [Tuple](../../sql-reference/data-types/tuple.md) of [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT LpNormalize((3, 4),5); +``` + +Result: + +```text +┌─LpNormalize((3, 4), 5)──────────────────┐ +│ (0.7187302630182624,0.9583070173576831) │ +└─────────────────────────────────────────┘ +``` + +## cosineDistance {#cosinedistance} + +Calculates the cosine distance between two vectors (the values of the tuples are the coordinates). The less the returned value is, the more similar are the vectors. + +**Syntax** + +```sql +cosineDistance(tuple1, tuple2) +``` + +**Arguments** + +- `tuple1` — First tuple. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — Second tuple. [Tuple](../../sql-reference/data-types/tuple.md). + +**Returned value** + +- Cosine of the angle between two vectors substracted from one. + +Type: [Float](../../sql-reference/data-types/float.md). + +**Example** + +Query: + +```sql +SELECT cosineDistance((1, 2), (2, 3)); +``` + +Result: + +```text +┌─cosineDistance((1, 2), (2, 3))─┐ +│ 0.007722123286332261 │ +└────────────────────────────────┘ +``` diff --git a/docs/en/sql-reference/functions/tuple-map-functions.md b/docs/en/sql-reference/functions/tuple-map-functions.md index 6ddac9a0530..47e33806930 100644 --- a/docs/en/sql-reference/functions/tuple-map-functions.md +++ b/docs/en/sql-reference/functions/tuple-map-functions.md @@ -22,7 +22,7 @@ map(key1, value1[, key2, value2, ...]) **Returned value** -- Data structure as `key:value` pairs. +- Data structure as `key:value` pairs. Type: [Map(key, value)](../../sql-reference/data-types/map.md). @@ -165,9 +165,6 @@ Result: ## mapPopulateSeries {#function-mappopulateseries} Fills missing keys in the maps (key and value array pair), where keys are integers. Also, it supports specifying the max key, which is used to extend the keys array. -Arguments are [maps](../../sql-reference/data-types/map.md) or two [arrays](../../sql-reference/data-types/array.md#data-type-array), where the first array represent keys, and the second array contains values for the each key. - -For array arguments the number of elements in `keys` and `values` must be the same for each row. **Syntax** @@ -178,12 +175,17 @@ mapPopulateSeries(map[, max]) Generates a map (a tuple with two arrays or a value of `Map` type, depending on the arguments), where keys are a series of numbers, from minimum to maximum keys (or `max` argument if it specified) taken from the map with a step size of one, and corresponding values. If the value is not specified for the key, then it uses the default value in the resulting map. For repeated keys, only the first value (in order of appearing) gets associated with the key. +For array arguments the number of elements in `keys` and `values` must be the same for each row. + **Arguments** +Arguments are [maps](../../sql-reference/data-types/map.md) or two [arrays](../../sql-reference/data-types/array.md#data-type-array), where the first array represent keys, and the second array contains values for the each key. + Mapped arrays: - `keys` — Array of keys. [Array](../../sql-reference/data-types/array.md#data-type-array)([Int](../../sql-reference/data-types/int-uint.md#uint-ranges)). - `values` — Array of values. [Array](../../sql-reference/data-types/array.md#data-type-array)([Int](../../sql-reference/data-types/int-uint.md#uint-ranges)). +- `max` — Maximum key value. Optional. [Int8, Int16, Int32, Int64, Int128, Int256](../../sql-reference/data-types/int-uint.md#int-ranges). or @@ -191,14 +193,14 @@ or **Returned value** -- Depending on the arguments returns a [map](../../sql-reference/data-types/map.md) or a [tuple](../../sql-reference/data-types/tuple.md#tuplet1-t2) of two [arrays](../../sql-reference/data-types/array.md#data-type-array): keys in sorted order, and values the corresponding keys. +- Depending on the arguments returns a [map](../../sql-reference/data-types/map.md) or a [tuple](../../sql-reference/data-types/tuple.md#tuplet1-t2) of two [arrays](../../sql-reference/data-types/array.md#data-type-array): keys in sorted order, and values the corresponding keys. **Example** Query with mapped arrays: ```sql -select mapPopulateSeries([1,2,4], [11,22,44], 5) as res, toTypeName(res) as type; +SELECT mapPopulateSeries([1,2,4], [11,22,44], 5) AS res, toTypeName(res) AS type; ``` Result: @@ -350,6 +352,83 @@ Result: │ ['eleven','11'] │ │ ['twelve','6.0'] │ └──────────────────┘ -``` +``` + +## mapContainsKeyLike {#mapContainsKeyLike} + +**Syntax** + +```sql +mapContainsKeyLike(map, pattern) +``` + +**Parameters** + +- `map` — Map. [Map](../../sql-reference/data-types/map.md). +- `pattern` - String pattern to match. + +**Returned value** + +- `1` if `map` contains `key` like specified pattern, `0` if not. + +**Example** + +Query: + +```sql +CREATE TABLE test (a Map(String,String)) ENGINE = Memory; + +INSERT INTO test VALUES ({'abc':'abc','def':'def'}), ({'hij':'hij','klm':'klm'}); + +SELECT mapContainsKeyLike(a, 'a%') FROM test; +``` + +Result: + +```text +┌─mapContainsKeyLike(a, 'a%')─┐ +│ 1 │ +│ 0 │ +└─────────────────────────────┘ +``` + +## mapExtractKeyLike {#mapExtractKeyLike} + +**Syntax** + +```sql +mapExtractKeyLike(map, pattern) +``` + +**Parameters** + +- `map` — Map. [Map](../../sql-reference/data-types/map.md). +- `pattern` - String pattern to match. + +**Returned value** + +- A map contained elements the key of which matchs the specified pattern. If there are no elements matched the pattern, it will return an empty map. + +**Example** + +Query: + +```sql +CREATE TABLE test (a Map(String,String)) ENGINE = Memory; + +INSERT INTO test VALUES ({'abc':'abc','def':'def'}), ({'hij':'hij','klm':'klm'}); + +SELECT mapExtractKeyLike(a, 'a%') FROM test; +``` + +Result: + +```text +┌─mapExtractKeyLike(a, 'a%')─┐ +│ {'abc':'abc'} │ +│ {} │ +└────────────────────────────┘ +``` + [Original article](https://clickhouse.com/docs/en/sql-reference/functions/tuple-map-functions/) diff --git a/docs/en/sql-reference/operators/index.md b/docs/en/sql-reference/operators/index.md index dbda5f5dd69..efbc600fdd4 100644 --- a/docs/en/sql-reference/operators/index.md +++ b/docs/en/sql-reference/operators/index.md @@ -17,20 +17,30 @@ ClickHouse transforms operators to their corresponding functions at the query pa `-a` – The `negate (a)` function. +For tuple negation: [tupleNegate](../../sql-reference/functions/tuple-functions.md#tuplenegate). + ## Multiplication and Division Operators {#multiplication-and-division-operators} `a * b` – The `multiply (a, b)` function. +For multiplying tuple by number: [tupleMultiplyByNumber](../../sql-reference/functions/tuple-functions.md#tuplemultiplybynumber), for scalar profuct: [dotProduct](../../sql-reference/functions/tuple-functions.md#dotproduct). + `a / b` – The `divide(a, b)` function. +For dividing tuple by number: [tupleDivideByNumber](../../sql-reference/functions/tuple-functions.md#tupledividebynumber). + `a % b` – The `modulo(a, b)` function. ## Addition and Subtraction Operators {#addition-and-subtraction-operators} `a + b` – The `plus(a, b)` function. +For tuple addiction: [tuplePlus](../../sql-reference/functions/tuple-functions.md#tupleplus). + `a - b` – The `minus(a, b)` function. +For tuple subtraction: [tupleMinus](../../sql-reference/functions/tuple-functions.md#tupleminus). + ## Comparison Operators {#comparison-operators} `a = b` – The `equals(a, b)` function. @@ -71,6 +81,53 @@ ClickHouse transforms operators to their corresponding functions at the query pa `a GLOBAL NOT IN ...` – The `globalNotIn(a, b)` function. +`a = ANY (subquery)` – The `in(a, subquery)` function. + +`a != ANY (subquery)` – The same as `a NOT IN (SELECT singleValueOrNull(*) FROM subquery)`. + +`a = ALL (subquery)` – The same as `a IN (SELECT singleValueOrNull(*) FROM subquery)`. + +`a != ALL (subquery)` – The `notIn(a, subquery)` function. + + +**Examples** + +Query with ALL: + +``` sql +SELECT number AS a FROM numbers(10) WHERE a > ALL (SELECT number FROM numbers(3, 3)); +``` + +Result: + +``` text +┌─a─┐ +│ 6 │ +│ 7 │ +│ 8 │ +│ 9 │ +└───┘ +``` + +Query with ANY: + +``` sql +SELECT number AS a FROM numbers(10) WHERE a > ANY (SELECT number FROM numbers(3, 3)); +``` + +Result: + +``` text +┌─a─┐ +│ 4 │ +│ 5 │ +│ 6 │ +│ 7 │ +│ 8 │ +│ 9 │ +└───┘ +``` + ## Operators for Working with Dates and Times {#operators-datetime} ### EXTRACT {#operator-extract} diff --git a/docs/en/sql-reference/statements/alter/projection.md b/docs/en/sql-reference/statements/alter/projection.md index 429241ebf13..96cd8f5d607 100644 --- a/docs/en/sql-reference/statements/alter/projection.md +++ b/docs/en/sql-reference/statements/alter/projection.md @@ -7,7 +7,7 @@ toc_title: PROJECTION The following operations with [projections](../../../engines/table-engines/mergetree-family/mergetree.md#projections) are available: -- `ALTER TABLE [db].name ADD PROJECTION name AS SELECT [GROUP BY] [ORDER BY]` - Adds projection description to tables metadata. +- `ALTER TABLE [db].name ADD PROJECTION name ( SELECT [GROUP BY] [ORDER BY] )` - Adds projection description to tables metadata. - `ALTER TABLE [db].name DROP PROJECTION name` - Removes projection description from tables metadata and deletes projection files from disk. diff --git a/docs/en/sql-reference/statements/create/database.md b/docs/en/sql-reference/statements/create/database.md index 3c6f73d54db..787bbc02346 100644 --- a/docs/en/sql-reference/statements/create/database.md +++ b/docs/en/sql-reference/statements/create/database.md @@ -8,7 +8,7 @@ toc_title: DATABASE Creates a new database. ``` sql -CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)] +CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)] [COMMENT 'Comment'] ``` ## Clauses {#clauses} @@ -26,4 +26,33 @@ ClickHouse creates the `db_name` database on all the servers of a specified clus ### ENGINE {#engine} -[MySQL](../../../engines/database-engines/mysql.md) allows you to retrieve data from the remote MySQL server. By default, ClickHouse uses its own [database engine](../../../engines/database-engines/index.md). There’s also a [lazy](../../../engines/database-engines/lazy.md) engine. +By default, ClickHouse uses its own [Atomic](../../../engines/database-engines/atomic.md) database engine. There are also [Lazy](../../../engines/database-engines/lazy.md), [MySQL](../../../engines/database-engines/mysql.md), [PostgresSQL](../../../engines/database-engines/postgresql.md), [MaterializedMySQL](../../../engines/database-engines/materialized-mysql.md), [MaterializedPostgreSQL](../../../engines/database-engines/materialized-postgresql.md), [Replicated](../../../engines/database-engines/replicated.md), [SQLite](../../../engines/database-engines/sqlite.md). + +### COMMENT {#comment} + +You can add a comment to the database when you creating it. + +The comment is supported for all database engines. + +**Syntax** + +``` sql +CREATE DATABASE db_name ENGINE = engine(...) COMMENT 'Comment' +``` + +**Example** + +Query: + +``` sql +CREATE DATABASE db_comment ENGINE = Memory COMMENT 'The temporary database'; +SELECT name, comment FROM system.databases WHERE name = 'db_comment'; +``` + +Result: + +```text +┌─name───────┬─comment────────────────┐ +│ db_comment │ The temporary database │ +└────────────┴────────────────────────┘ +``` diff --git a/docs/en/sql-reference/statements/describe-table.md b/docs/en/sql-reference/statements/describe-table.md index bc197bf0f72..823a31ed313 100644 --- a/docs/en/sql-reference/statements/describe-table.md +++ b/docs/en/sql-reference/statements/describe-table.md @@ -3,18 +3,67 @@ toc_priority: 42 toc_title: DESCRIBE --- -# DESCRIBE TABLE Statement {#misc-describe-table} +# DESCRIBE TABLE {#misc-describe-table} + +Returns information about table columns. + +**Syntax** ``` sql DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format] ``` -Returns the following `String` type columns: +The `DESCRIBE` statement returns a row for each table column with the following [String](../../sql-reference/data-types/string.md) values: -- `name` — Column name. -- `type`— Column type. -- `default_type` — Clause that is used in [default expression](../../sql-reference/statements/create/table.md#create-default-values) (`DEFAULT`, `MATERIALIZED` or `ALIAS`). Column contains an empty string, if the default expression isn’t specified. -- `default_expression` — Value specified in the `DEFAULT` clause. -- `comment_expression` — Comment text. +- `name` — A column name. +- `type` — A column type. +- `default_type` — A clause that is used in the column [default expression](../../sql-reference/statements/create/table.md#create-default-values): `DEFAULT`, `MATERIALIZED` or `ALIAS`. If there is no default expression, then empty string is returned. +- `default_expression` — An expression specified after the `DEFAULT` clause. +- `comment` — A [column comment](../../sql-reference/statements/alter/column.md#alter_comment-column). +- `codec_expression` — A [codec](../../sql-reference/statements/create/table.md#codecs) that is applied to the column. +- `ttl_expression` — A [TTL](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl) expression. +- `is_subcolumn` — A flag that equals `1` for internal subcolumns. It is included into the result only if subcolumn description is enabled by the [describe_include_subcolumns](../../operations/settings/settings.md#describe_include_subcolumns) setting. -Nested data structures are output in “expanded” format. Each column is shown separately, with the name after a dot. +All columns in [Nested](../../sql-reference/data-types/nested-data-structures/nested.md) data structures are described separately. The name of each column is prefixed with a parent column name and a dot. + +To show internal subcolumns of other data types, use the [describe_include_subcolumns](../../operations/settings/settings.md#describe_include_subcolumns) setting. + +**Example** + +Query: + +``` sql +CREATE TABLE describe_example ( + id UInt64, text String DEFAULT 'unknown' CODEC(ZSTD), + user Tuple (name String, age UInt8) +) ENGINE = MergeTree() ORDER BY id; + +DESCRIBE TABLE describe_example; +DESCRIBE TABLE describe_example SETTINGS describe_include_subcolumns=1; +``` + +Result: + +``` text +┌─name─┬─type──────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐ +│ id │ UInt64 │ │ │ │ │ │ +│ text │ String │ DEFAULT │ 'unknown' │ │ ZSTD(1) │ │ +│ user │ Tuple(name String, age UInt8) │ │ │ │ │ │ +└──────┴───────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘ +``` + +The second query additionally shows subcolumns: + +``` text +┌─name──────┬─type──────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┬─is_subcolumn─┐ +│ id │ UInt64 │ │ │ │ │ │ 0 │ +│ text │ String │ DEFAULT │ 'unknown' │ │ ZSTD(1) │ │ 0 │ +│ user │ Tuple(name String, age UInt8) │ │ │ │ │ │ 0 │ +│ user.name │ String │ │ │ │ │ │ 1 │ +│ user.age │ UInt8 │ │ │ │ │ │ 1 │ +└───────────┴───────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┴──────────────┘ +``` + +**See Also** + +- [describe_include_subcolumns](../../operations/settings/settings.md#describe_include_subcolumns) setting. diff --git a/docs/en/sql-reference/statements/insert-into.md b/docs/en/sql-reference/statements/insert-into.md index 31b4d30835f..cc166686793 100644 --- a/docs/en/sql-reference/statements/insert-into.md +++ b/docs/en/sql-reference/statements/insert-into.md @@ -119,3 +119,14 @@ Performance will not decrease if: - Data is added in real time. - You upload data that is usually sorted by time. +It's also possible to asynchronously insert data in small but frequent inserts. The data from such insertions is combined into batches and then safely inserted into a table. To enable the asynchronous mode, switch on the [async_insert](../../operations/settings/settings.md#async-insert) setting. Note that asynchronous insertions are supported only over HTTP protocol, and deduplication is not supported for them. + +**See Also** + +- [async_insert](../../operations/settings/settings.md#async-insert) +- [async_insert_threads](../../operations/settings/settings.md#async-insert-threads) +- [wait_for_async_insert](../../operations/settings/settings.md#wait-for-async-insert) +- [wait_for_async_insert_timeout](../../operations/settings/settings.md#wait-for-async-insert-timeout) +- [async_insert_max_data_size](../../operations/settings/settings.md#async-insert-max-data-size) +- [async_insert_busy_timeout_ms](../../operations/settings/settings.md#async-insert-busy-timeout-ms) +- [async_insert_stale_timeout_ms](../../operations/settings/settings.md#async-insert-stale-timeout-ms) diff --git a/docs/en/sql-reference/statements/select/except.md b/docs/en/sql-reference/statements/select/except.md new file mode 100644 index 00000000000..e6d9b365a91 --- /dev/null +++ b/docs/en/sql-reference/statements/select/except.md @@ -0,0 +1,69 @@ +--- +toc_title: EXCEPT +--- + +# EXCEPT Clause {#except-clause} + +The `EXCEPT` clause returns only those rows that result from the first query without the second. The queries must match the number of columns, order, and type. The result of `EXCEPT` can contain duplicate rows. + +Multiple `EXCEPT` statements are executed left to right if parenthesis are not specified. The `EXCEPT` operator has the same priority as the `UNION` clause and lower priority than the `INTERSECT` clause. + +``` sql +SELECT column1 [, column2 ] +FROM table1 +[WHERE condition] + +EXCEPT + +SELECT column1 [, column2 ] +FROM table2 +[WHERE condition] + +``` +The condition could be any expression based on your requirements. + +**Examples** + +Query: + +``` sql +SELECT number FROM numbers(1,10) EXCEPT SELECT number FROM numbers(3,6); +``` + +Result: + +``` text +┌─number─┐ +│ 1 │ +│ 2 │ +│ 9 │ +│ 10 │ +└────────┘ +``` + +Query: + +``` sql +CREATE TABLE t1(one String, two String, three String) ENGINE=Memory(); +CREATE TABLE t2(four String, five String, six String) ENGINE=Memory(); + +INSERT INTO t1 VALUES ('q', 'm', 'b'), ('s', 'd', 'f'), ('l', 'p', 'o'), ('s', 'd', 'f'), ('s', 'd', 'f'), ('k', 't', 'd'), ('l', 'p', 'o'); +INSERT INTO t2 VALUES ('q', 'm', 'b'), ('b', 'd', 'k'), ('s', 'y', 't'), ('s', 'd', 'f'), ('m', 'f', 'o'), ('k', 'k', 'd'); + +SELECT * FROM t1 EXCEPT SELECT * FROM t2; +``` + +Result: + +``` text +┌─one─┬─two─┬─three─┐ +│ l │ p │ o │ +│ k │ t │ d │ +│ l │ p │ o │ +└─────┴─────┴───────┘ +``` + +**See Also** + +- [UNION](union.md#union-clause) +- [INTERSECT](intersect.md#intersect-clause) diff --git a/docs/en/sql-reference/statements/select/index.md b/docs/en/sql-reference/statements/select/index.md index 0427764475a..39d12f880e4 100644 --- a/docs/en/sql-reference/statements/select/index.md +++ b/docs/en/sql-reference/statements/select/index.md @@ -49,6 +49,8 @@ Specifics of each optional clause are covered in separate sections, which are li - [LIMIT clause](../../../sql-reference/statements/select/limit.md) - [OFFSET clause](../../../sql-reference/statements/select/offset.md) - [UNION clause](../../../sql-reference/statements/select/union.md) +- [INTERSECT clause](../../../sql-reference/statements/select/intersect.md) +- [EXCEPT clause](../../../sql-reference/statements/select/except.md) - [INTO OUTFILE clause](../../../sql-reference/statements/select/into-outfile.md) - [FORMAT clause](../../../sql-reference/statements/select/format.md) diff --git a/docs/en/sql-reference/statements/select/intersect.md b/docs/en/sql-reference/statements/select/intersect.md new file mode 100644 index 00000000000..2243a35e4d8 --- /dev/null +++ b/docs/en/sql-reference/statements/select/intersect.md @@ -0,0 +1,73 @@ +--- +toc_title: INTERSECT +--- + +# INTERSECT Clause {#intersect-clause} + +The `INTERSECT` clause returns only those rows that result from both the first and the second queries. The queries must match the number of columns, order, and type. The result of `INTERSECT` can contain duplicate rows. + +Multiple `INTERSECT` statements are executes left to right if parenthesis are not specified. The `INTERSECT` operator has a higher priority than the `UNION` and `EXCEPT` clause. + + +``` sql +SELECT column1 [, column2 ] +FROM table1 +[WHERE condition] + +INTERSECT + +SELECT column1 [, column2 ] +FROM table2 +[WHERE condition] + +``` +The condition could be any expression based on your requirements. + +**Examples** + +Query: + +``` sql +SELECT number FROM numbers(1,10) INTERSECT SELECT number FROM numbers(3,6); +``` + +Result: + +``` text +┌─number─┐ +│ 3 │ +│ 4 │ +│ 5 │ +│ 6 │ +│ 7 │ +│ 8 │ +└────────┘ +``` + +Query: + +``` sql +CREATE TABLE t1(one String, two String, three String) ENGINE=Memory(); +CREATE TABLE t2(four String, five String, six String) ENGINE=Memory(); + +INSERT INTO t1 VALUES ('q', 'm', 'b'), ('s', 'd', 'f'), ('l', 'p', 'o'), ('s', 'd', 'f'), ('s', 'd', 'f'), ('k', 't', 'd'), ('l', 'p', 'o'); +INSERT INTO t2 VALUES ('q', 'm', 'b'), ('b', 'd', 'k'), ('s', 'y', 't'), ('s', 'd', 'f'), ('m', 'f', 'o'), ('k', 'k', 'd'); + +SELECT * FROM t1 INTERSECT SELECT * FROM t2; +``` + +Result: + +``` text +┌─one─┬─two─┬─three─┐ +│ q │ m │ b │ +│ s │ d │ f │ +│ s │ d │ f │ +│ s │ d │ f │ +└─────┴─────┴───────┘ +``` + +**See Also** + +- [UNION](union.md#union-clause) +- [EXCEPT](except.md#except-clause) diff --git a/docs/ja/interfaces/formats.md b/docs/ja/interfaces/formats.md index bebfd438c1e..b34c467c980 100644 --- a/docs/ja/interfaces/formats.md +++ b/docs/ja/interfaces/formats.md @@ -559,7 +559,7 @@ CREATE TABLE IF NOT EXISTS example_table - もし `input_format_defaults_for_omitted_fields = 1` のデフォルト値 `x` 等しい `0` しかし、デフォルト値は `a` 等しい `x * 2`. !!! note "警告" - データを挿入するとき `insert_sample_with_metadata = 1`,ClickHouseは、挿入と比較して、より多くの計算リソースを消費します `insert_sample_with_metadata = 0`. + データを挿入するとき `input_format_defaults_for_omitted_fields = 1`,ClickHouseは、挿入と比較して、より多くの計算リソースを消費します `input_format_defaults_for_omitted_fields = 0`. ### データの選択 {#selecting-data} diff --git a/docs/ja/operations/configuration-files.md b/docs/ja/operations/configuration-files.md index f170ceab907..e22fc96d3b5 100644 --- a/docs/ja/operations/configuration-files.md +++ b/docs/ja/operations/configuration-files.md @@ -10,7 +10,7 @@ toc_title: "\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB" ClickHouseは複数のファイル構成管理をサポートします。 主サーバ設定ファイルで指定することがで `/etc/clickhouse-server/config.xml`. その他のファイルは `/etc/clickhouse-server/config.d` ディレクトリ。 !!! note "注" - すべての構成ファイルはXML形式である必要があります。 また、通常は同じルート要素を持つ必要があります ``. + すべての構成ファイルはXML形式である必要があります。 また、通常は同じルート要素を持つ必要があります ``. メイン構成ファイルで指定された一部の設定は、他の構成ファイルで上書きできます。 その `replace` または `remove` これらの構成ファイルの要素に属性を指定できます。 @@ -36,7 +36,7 @@ $ cat /etc/clickhouse-server/users.d/alice.xml ``` ``` xml - + analytics @@ -47,7 +47,7 @@ $ cat /etc/clickhouse-server/users.d/alice.xml analytics - + ``` 各設定ファイルでは、サーバともある `file-preprocessed.xml` 起動時のファイル。 これらのファイルには、完了したすべての置換と上書きが含まれており、情報提供を目的としています。 設定ファイルでZooKeeperの置換が使用されていても、サーバーの起動時にZooKeeperが使用できない場合、サーバーは前処理されたファイルから設定をロードします。 diff --git a/docs/ja/operations/system-tables.md b/docs/ja/operations/system-tables.md index 4a18028c084..cdeeed7b584 100644 --- a/docs/ja/operations/system-tables.md +++ b/docs/ja/operations/system-tables.md @@ -335,14 +335,14 @@ SELECT * FROM system.metrics LIMIT 10 メトリック履歴の収集を有効にするには `system.metric_log`,作成 `/etc/clickhouse-server/config.d/metric_log.xml` 次の内容を使って: ``` xml - + system metric_log
7500 1000
-
+ ``` **例** diff --git a/docs/ja/operations/tips.md b/docs/ja/operations/tips.md index 1967654af79..b5c67f0e17f 100644 --- a/docs/ja/operations/tips.md +++ b/docs/ja/operations/tips.md @@ -78,7 +78,7 @@ HDDの場合、ライトキャッシュを有効にします。 ## ファイルシス {#file-system} -Ext4は最も信頼性の高いオプションです。 マウントオプションの設定 `noatime, nobarrier`. +Ext4は最も信頼性の高いオプションです。 マウントオプションの設定 `noatime`. XFSも適していますが、ClickHouseで徹底的にテストされていません。 他のほとんどのファイルシステム仕様。 ファイルシステムの遅配ます。 diff --git a/docs/ja/operations/utilities/clickhouse-copier.md b/docs/ja/operations/utilities/clickhouse-copier.md index 4d825f02b76..614984af42b 100644 --- a/docs/ja/operations/utilities/clickhouse-copier.md +++ b/docs/ja/operations/utilities/clickhouse-copier.md @@ -46,7 +46,7 @@ $ clickhouse-copier copier --daemon --config zookeeper.xml --task-path /task/pat ## 飼育係の形式。xml {#format-of-zookeeper-xml} ``` xml - + trace 100M @@ -59,13 +59,13 @@ $ clickhouse-copier copier --daemon --config zookeeper.xml --task-path /task/pat 2181 - + ``` ## コピータスクの構成 {#configuration-of-copying-tasks} ``` xml - + @@ -168,7 +168,7 @@ $ clickhouse-copier copier --daemon --config zookeeper.xml --task-path /task/pat ... - + ``` `clickhouse-copier` の変更を追跡します `/task/path/description` そしてその場でそれらを適用します。 たとえば、次の値を変更すると `max_workers`、タスクを実行しているプロセスの数も変更されます。 diff --git a/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md b/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md index 3286cf04113..4aef036b3bd 100644 --- a/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md +++ b/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md @@ -28,7 +28,7 @@ ClickHouseは、辞書のエラーに対して例外を生成します。 エラ 設定は次のようになります: ``` xml - + ... @@ -38,7 +38,7 @@ ClickHouseは、辞書のエラーに対して例外を生成します。 エラ ... - + ``` 対応する [DDL-クエリ](../../statements/create.md#create-dictionary-query): @@ -208,7 +208,7 @@ dictGetT('dict_name', 'attr_name', id, date) 設定例: ``` xml - + ... @@ -237,7 +237,7 @@ dictGetT('dict_name', 'attr_name', id, date) - + ``` または diff --git a/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md b/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md index 5aefd7050e3..e61218b8d1d 100644 --- a/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md +++ b/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md @@ -12,7 +12,7 @@ toc_title: "\u5916\u90E8\u8F9E\u66F8\u306E\u30BD\u30FC\u30B9" 辞書がxml-fileを使用して構成されている場合、構成は次のようになります: ``` xml - + ... @@ -23,7 +23,7 @@ toc_title: "\u5916\u90E8\u8F9E\u66F8\u306E\u30BD\u30FC\u30B9" ... ... - + ``` の場合 [DDL-クエリ](../../statements/create.md#create-dictionary-query)、等しい構成は次のようになります: @@ -272,7 +272,7 @@ $ sudo apt-get install -y unixodbc odbcinst odbc-postgresql ClickHouseの辞書構成: ``` xml - + table_name @@ -301,7 +301,7 @@ ClickHouseの辞書構成: - + ``` または @@ -367,7 +367,7 @@ $ sudo apt-get install tdsodbc freetds-bin sqsh ClickHouseでの辞書の構成: ``` xml - + test @@ -397,7 +397,7 @@ ClickHouseでの辞書の構成: - + ``` または diff --git a/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts.md b/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts.md index 4f90ac18267..725b77af7af 100644 --- a/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts.md +++ b/docs/ja/sql-reference/dictionaries/external-dictionaries/external-dicts.md @@ -28,7 +28,7 @@ toc_title: "\u4E00\u822C\u7684\u306A\u8AAC\u660E" 辞書構成ファイルの形式は次のとおりです: ``` xml - + An optional element with any content. Ignored by the ClickHouse server. @@ -40,7 +40,7 @@ toc_title: "\u4E00\u822C\u7684\u306A\u8AAC\u660E" - + ``` あなたはできる [設定](external-dicts-dict.md) 同じファイル内の任意の数の辞書。 diff --git a/docs/ja/sql-reference/functions/ext-dict-functions.md b/docs/ja/sql-reference/functions/ext-dict-functions.md index 6a90d99a5f0..0d21322eda3 100644 --- a/docs/ja/sql-reference/functions/ext-dict-functions.md +++ b/docs/ja/sql-reference/functions/ext-dict-functions.md @@ -50,7 +50,7 @@ ClickHouseは、属性の値を解析できない場合、または値が属性 外部辞書の構成: ``` xml - + ext-dict-test @@ -74,7 +74,7 @@ ClickHouseは、属性の値を解析できない場合、または値が属性 0 - + ``` クエリの実行: diff --git a/docs/ru/engines/table-engines/integrations/mongodb.md b/docs/ru/engines/table-engines/integrations/mongodb.md index 700377ac564..35c100b7837 100644 --- a/docs/ru/engines/table-engines/integrations/mongodb.md +++ b/docs/ru/engines/table-engines/integrations/mongodb.md @@ -15,7 +15,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name name1 [type1], name2 [type2], ... -) ENGINE = MongoDB(host:port, database, collection, user, password); +) ENGINE = MongoDB(host:port, database, collection, user, password [, options]); ``` **Параметры движка** @@ -30,11 +30,13 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name - `password` — пароль пользователя. +- `options` — MongoDB connection string options (optional parameter). + ## Примеры использования {#usage-example} -Таблица в ClickHouse для чтения данных из колекции MongoDB: +Создание таблицы в ClickHouse для чтения данных из коллекции MongoDB: -``` text +``` sql CREATE TABLE mongo_table ( key UInt64, @@ -42,6 +44,18 @@ CREATE TABLE mongo_table ) ENGINE = MongoDB('mongo1:27017', 'test', 'simple_table', 'testuser', 'clickhouse'); ``` +Чтение с сервера MongoDB, защищенного SSL: + +``` sql +CREATE TABLE mongo_table_ssl +( + key UInt64, + data String +) ENGINE = MongoDB('mongo2:27017', 'test', 'simple_table', 'testuser', 'clickhouse', 'ssl=true'); +``` + + + Запрос к таблице: ``` sql diff --git a/docs/ru/getting-started/install.md b/docs/ru/getting-started/install.md index 5cb75c12155..a12773a75b0 100644 --- a/docs/ru/getting-started/install.md +++ b/docs/ru/getting-started/install.md @@ -29,7 +29,7 @@ grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not su Также эти пакеты можно скачать и установить вручную отсюда: https://repo.clickhouse.com/deb/stable/main/. -Если вы хотите использовать наиболее свежую версию, замените `stable` на `testing` (рекомендуется для тестовых окружений). +Чтобы использовать различные [версии ClickHouse](../faq/operations/production.md) в зависимости от ваших потребностей, вы можете заменить `stable` на `lts` или `testing`. Также вы можете вручную скачать и установить пакеты из [репозитория](https://repo.clickhouse.com/deb/stable/main/). diff --git a/docs/ru/operations/configuration-files.md b/docs/ru/operations/configuration-files.md index 343fffdfaa5..9a3beef22ab 100644 --- a/docs/ru/operations/configuration-files.md +++ b/docs/ru/operations/configuration-files.md @@ -8,7 +8,7 @@ toc_title: "Конфигурационные файлы" ClickHouse поддерживает многофайловое управление конфигурацией. Основной конфигурационный файл сервера — `/etc/clickhouse-server/config.xml` или `/etc/clickhouse-server/config.yaml`. Остальные файлы должны находиться в директории `/etc/clickhouse-server/config.d`. Обратите внимание, что конфигурационные файлы могут быть записаны в форматах XML или YAML, но смешение этих форматов в одном файле не поддерживается. Например, можно хранить основные конфигурационные файлы как `config.xml` и `users.xml`, а дополнительные файлы записать в директории `config.d` и `users.d` в формате `.yaml`. -Все XML файлы должны иметь одинаковый корневой элемент, обычно ``. Для YAML элемент `yandex:` должен отсутствовать, так как парсер вставляет его автоматически. +Все XML файлы должны иметь одинаковый корневой элемент, обычно ``. Для YAML элемент `clickhouse:` должен отсутствовать, так как парсер вставляет его автоматически. ## Переопределение {#override} @@ -22,13 +22,13 @@ ClickHouse поддерживает многофайловое управлен Также возможно указать атрибуты как переменные среды с помощью `from_env="VARIABLE_NAME"`: ```xml - + - + ``` ## Подстановки {#substitution} @@ -40,7 +40,7 @@ ClickHouse поддерживает многофайловое управлен Пример подстановки XML: ```xml - + @@ -49,7 +49,7 @@ ClickHouse поддерживает многофайловое управлен - + ``` Подстановки могут также выполняться из ZooKeeper. Для этого укажите у элемента атрибут `from_zk = "/path/to/node"`. Значение элемента заменится на содержимое узла `/path/to/node` в ZooKeeper. В ZooKeeper-узел также можно положить целое XML-поддерево, оно будет целиком вставлено в исходный элемент. @@ -66,7 +66,7 @@ $ cat /etc/clickhouse-server/users.d/alice.xml ``` ``` xml - + analytics @@ -77,7 +77,7 @@ $ cat /etc/clickhouse-server/users.d/alice.xml analytics - + ``` Для каждого конфигурационного файла, сервер при запуске генерирует также файлы `file-preprocessed.xml`. Эти файлы содержат все выполненные подстановки и переопределения, и предназначены для информационных целей. Если в конфигурационных файлах были использованы ZooKeeper-подстановки, но при старте сервера ZooKeeper недоступен, то сервер загрузит конфигурацию из preprocessed-файла. diff --git a/docs/ru/operations/external-authenticators/kerberos.md b/docs/ru/operations/external-authenticators/kerberos.md index 2d31e355bba..eeff1cb6011 100644 --- a/docs/ru/operations/external-authenticators/kerberos.md +++ b/docs/ru/operations/external-authenticators/kerberos.md @@ -24,32 +24,32 @@ ClickHouse предоставляет возможность аутентифи Примеры, как должен выглядеть файл `config.xml`: ```xml - + - + ``` Или, с указанием принципала: ```xml - + HTTP/clickhouse.example.com@EXAMPLE.COM - + ``` Или, с фильтрацией по реалм: ```xml - + EXAMPLE.COM - + ``` !!! Warning "Важно" @@ -81,7 +81,7 @@ ClickHouse предоставляет возможность аутентифи Пример, как выглядит конфигурация Kerberos в `users.xml`: ```xml - + @@ -92,7 +92,7 @@ ClickHouse предоставляет возможность аутентифи - + ``` diff --git a/docs/ru/operations/external-authenticators/ldap.md b/docs/ru/operations/external-authenticators/ldap.md index 7b4bab0290c..3a8f2c05ae8 100644 --- a/docs/ru/operations/external-authenticators/ldap.md +++ b/docs/ru/operations/external-authenticators/ldap.md @@ -14,7 +14,7 @@ **Пример** ```xml - + @@ -45,7 +45,7 @@ no - + ``` Обратите внимание, что можно определить несколько LDAP серверов внутри секции `ldap_servers`, используя различные имена. @@ -90,7 +90,7 @@ **Пример** ```xml - + @@ -101,7 +101,7 @@ - + ``` Обратите внимание, что пользователь `my_user` ссылается на `my_ldap_server`. Этот LDAP сервер должен быть настроен в основном файле `config.xml`, как это было описано ранее. @@ -125,7 +125,7 @@ CREATE USER my_user IDENTIFIED WITH ldap SERVER 'my_ldap_server'; В `config.xml`. ```xml - + @@ -156,7 +156,7 @@ CREATE USER my_user IDENTIFIED WITH ldap SERVER 'my_ldap_server'; - + ``` Обратите внимание, что `my_ldap_server`, указанный в секции `ldap` внутри секции `user_directories`, должен быть настроен в файле `config.xml`, как это было описано ранее. (см. [Определение LDAP сервера](#ldap-server-definition)). diff --git a/docs/ru/operations/server-configuration-parameters/settings.md b/docs/ru/operations/server-configuration-parameters/settings.md index 35062d5cb48..c8e3dadae97 100644 --- a/docs/ru/operations/server-configuration-parameters/settings.md +++ b/docs/ru/operations/server-configuration-parameters/settings.md @@ -467,6 +467,26 @@ ClickHouse проверяет условия для `min_part_size` и `min_part 127.0.0.1 ``` +## listen_backlog {#server_configuration_parameters-listen_backlog} + +Бэклог (размер очереди соединений, ожидающих принятия) прослушивающего сокета. + +Значение по умолчанию: `4096` (как в linux [5.4+](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=19f92a030ca6d772ab44b22ee6a01378a8cb32d4)). + +Обычно это значение незачем менять по следующим причинам: +- значение по умолчанию достаточно велико, +- для принятия соединения клиента у сервера есть отдельный поток. + +Так что даже если у вас `TcpExtListenOverflows` (из `nstat`) ненулевой и растет для сервера ClickHouse, это не повод увеличивать значение по умолчанию, поскольку: +- обычно если 4096 недостаточно, это говорит о внутренних проблемах ClickHouse с масштабированием, так что лучше сообщить о проблеме, +- и это не значит, что сервер сможет принять еще больше подключений в дальнейшем (а если и сможет, клиенты, вероятно, уже отсоединятся). + +Примеры: + +``` xml +4096 +``` + ## logger {#server_configuration_parameters-logger} Настройки логирования. @@ -611,7 +631,7 @@ ClickHouse проверяет условия для `min_part_size` и `min_part ## max_concurrent_queries {#max-concurrent-queries} -Определяет максимальное количество одновременно обрабатываемых запросов, связанных с таблицей семейства `MergeTree`. Запросы также могут быть ограничены настройками: [max_concurrent_queries_for_all_users](#max-concurrent-queries-for-all-users), [min_marks_to_honor_max_concurrent_queries](#min-marks-to-honor-max-concurrent-queries). +Определяет максимальное количество одновременно обрабатываемых запросов, связанных с таблицей семейства `MergeTree`. Запросы также могут быть ограничены настройками: [max_concurrent_queries_for_user](#max-concurrent-queries-for-user), [max_concurrent_queries_for_all_users](#max-concurrent-queries-for-all-users), [min_marks_to_honor_max_concurrent_queries](#min-marks-to-honor-max-concurrent-queries). !!! info "Примечание" Параметры этих настроек могут быть изменены во время выполнения запросов и вступят в силу немедленно. Запросы, которые уже запущены, выполнятся без изменений. @@ -627,6 +647,21 @@ ClickHouse проверяет условия для `min_part_size` и `min_part 100 ``` +## max_concurrent_queries_for_user {#max-concurrent-queries-for-user} + +Определяет максимальное количество одновременно обрабатываемых запросов, связанных с таблицей семейства `MergeTree`, для пользователя. + +Возможные значения: + +- Положительное целое число. +- 0 — выключена. + +**Пример** + +``` xml +5 +``` + ## max_concurrent_queries_for_all_users {#max-concurrent-queries-for-all-users} Если значение этой настройки меньше или равно текущему количеству одновременно обрабатываемых запросов, то будет сгенерировано исключение. @@ -739,14 +774,14 @@ ClickHouse проверяет условия для `min_part_size` и `min_part Чтобы вручную включить сбор истории метрик в таблице [`system.metric_log`](../../operations/system-tables/metric_log.md), создайте `/etc/clickhouse-server/config.d/metric_log.xml` следующего содержания: ``` xml - + system metric_log
7500 1000
-
+ ``` **Выключение** @@ -754,9 +789,9 @@ ClickHouse проверяет условия для `min_part_size` и `min_part Чтобы отключить настройку `metric_log` , создайте файл `/etc/clickhouse-server/config.d/disable_metric_log.xml` следующего содержания: ``` xml - + - + ``` ## replicated\_merge\_tree {#server_configuration_parameters-replicated_merge_tree} @@ -992,7 +1027,7 @@ ClickHouse проверяет условия для `min_part_size` и `min_part **Пример** ```xml - + notice system @@ -1001,7 +1036,7 @@ ClickHouse проверяет условия для `min_part_size` и `min_part Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day - + ``` diff --git a/docs/ru/operations/settings/settings-users.md b/docs/ru/operations/settings/settings-users.md index 6a10e518817..4570ce38bad 100644 --- a/docs/ru/operations/settings/settings-users.md +++ b/docs/ru/operations/settings/settings-users.md @@ -28,7 +28,7 @@ toc_title: "Настройки пользователей" profile_name default - + default diff --git a/docs/ru/operations/settings/settings.md b/docs/ru/operations/settings/settings.md index 71b6ac513fc..e3f5f2e002d 100644 --- a/docs/ru/operations/settings/settings.md +++ b/docs/ru/operations/settings/settings.md @@ -1361,6 +1361,32 @@ load_balancing = round_robin Значение по умолчанию: `3`. +## compile_aggregate_expressions {#compile_aggregate_expressions} + +Включает или отключает компиляцию агрегатных функций в нативный код во время выполнения запроса. Включение этой настройки может улучшить производительность выполнения запросов. + +Возможные значения: + +- 0 — агрегатные функции не компилируются в нативный код. +- 1 — агрегатные функции компилируются в нативный код в процессе выполнения запроса. + +Значение по умолчанию: `1`. + +**См. также** + +- [min_count_to_compile_aggregate_expression](#min_count_to_compile_aggregate_expression) + +## min_count_to_compile_aggregate_expression {#min_count_to_compile_aggregate_expression} + +Минимальное количество вызовов агрегатной функции с одинаковым выражением, при котором функция будет компилироваться в нативный код в ходе выполнения запроса. Работает только если включена настройка [compile_aggregate_expressions](#compile_aggregate_expressions). + +Возможные значения: + +- Целое положительное число. +- 0 — агрегатные функциии всегда компилируются в ходе выполнения запроса. + +Значение по умолчанию: `3`. + ## input_format_skip_unknown_fields {#input-format-skip-unknown-fields} Если значение равно true, то при выполнении INSERT входные данные из столбцов с неизвестными именами будут пропущены. В противном случае эта ситуация создаст исключение. @@ -1705,6 +1731,32 @@ ClickHouse генерирует исключение Значение по умолчанию: 0. +## distributed_push_down_limit {#distributed-push-down-limit} + +Включает или отключает [LIMIT](#limit), применяемый к каждому шарду по отдельности. + +Это позволяет избежать: +- отправки дополнительных строк по сети; +- обработки строк за пределами ограничения для инициатора. + +Начиная с версии 21.9 вы больше не сможете получить неточные результаты, так как `distributed_push_down_limit` изменяет выполнение запроса только в том случае, если выполнено хотя бы одно из условий: +- `distributed_group_by_no_merge` > 0. +- запрос **не содержит** `GROUP BY`/`DISTINCT`/`LIMIT BY`, но содержит `ORDER BY`/`LIMIT`. +- запрос **содержит** `GROUP BY`/`DISTINCT`/`LIMIT BY` с `ORDER BY`/`LIMIT` и: + - включена настройка [optimize_skip_unused_shards](#optimize-skip-unused-shards). + - включена настройка `optimize_distributed_group_by_sharding_key`. + +Возможные значения: + +- 0 — выключена. +- 1 — включена. + +Значение по умолчанию: `1`. + +См. также: + +- [optimize_skip_unused_shards](#optimize-skip-unused-shards) + ## optimize_skip_unused_shards {#optimize-skip-unused-shards} Включает или отключает пропуск неиспользуемых шардов для запросов [SELECT](../../sql-reference/statements/select/index.md) , в которых условие ключа шардирования задано в секции `WHERE/PREWHERE`. Предполагается, что данные распределены с помощью ключа шардирования, в противном случае запрос выдаст неверный результат. @@ -3640,3 +3692,102 @@ SELECT * FROM positional_arguments ORDER BY 2,3; **См. также** - настройка [optimize_move_to_prewhere](#optimize_move_to_prewhere) + +## describe_include_subcolumns {#describe_include_subcolumns} + +Включает или отключает описание подстолбцов при выполнении запроса [DESCRIBE](../../sql-reference/statements/describe-table.md). Настройка действует, например, на элементы [Tuple](../../sql-reference/data-types/tuple.md) или подстолбцы типов [Map](../../sql-reference/data-types/map.md#map-subcolumns), [Nullable](../../sql-reference/data-types/nullable.md#finding-null) или [Array](../../sql-reference/data-types/array.md#array-size). + +Возможные значения: + +- 0 — подстолбцы не включаются в результат запросов `DESCRIBE`. +- 1 — подстолбцы включаются в результат запросов `DESCRIBE`. + +Значение по умолчанию: `0`. + +**Пример** + +Смотрите пример запроса [DESCRIBE](../../sql-reference/statements/describe-table.md). + +## async_insert {#async-insert} + +Включает или отключает асинхронные вставки. Работает только для вставок по протоколу HTTP. Обратите внимание, что при таких вставках дедупликация не производится. + +Если включено, данные собираются в пачки перед вставкой в таблицу. Это позволяет производить мелкие и частые вставки в ClickHouse (до 15000 запросов в секунду) без промежуточных таблиц. + +Вставка данных происходит либо как только объем вставляемых данных превышает [async_insert_max_data_size](#async-insert-max-data-size), либо через [async_insert_busy_timeout_ms](#async-insert-busy-timeout-ms) миллисекунд после первого запроса `INSERT`. Если в [async_insert_stale_timeout_ms](#async-insert-stale-timeout-ms) задано ненулевое значение, то данные вставляются через `async_insert_stale_timeout_ms` миллисекунд после последнего запроса. + +Если включен параметр [wait_for_async_insert](#wait-for-async-insert), каждый клиент ждет, пока данные будут сброшены в таблицу. Иначе запрос будет обработан почти моментально, даже если данные еще не вставлены. + +Возможные значения: + +- 0 — вставки производятся синхронно, один запрос за другим. +- 1 — включены множественные асинхронные вставки. + +Значение по умолчанию: `0`. + +## async_insert_threads {#async-insert-threads} + +Максимальное число потоков для фоновой обработки и вставки данных. + +Возможные значения: + +- Положительное целое число. +- 0 — асинхронные вставки отключены. + +Значение по умолчанию: `16`. + +## wait_for_async_insert {#wait-for-async-insert} + +Включает или отключает ожидание обработки асинхронных вставок. Если включено, клиент выведет `OK` только после того, как данные вставлены. Иначе будет выведен `OK`, даже если вставка не произошла. + +Возможные значения: + +- 0 — сервер возвращает `OK` даже если вставка данных еще не завершена. +- 1 — сервер возвращает `OK` только после завершения вставки данных. + +Значение по умолчанию: `1`. + +## wait_for_async_insert_timeout {#wait-for-async-insert-timeout} + +Время ожидания в секундах, выделяемое для обработки асинхронной вставки. + +Возможные значения: + +- Положительное целое число. +- 0 — ожидание отключено. + +Значение по умолчанию: [lock_acquire_timeout](#lock_acquire_timeout). + +## async_insert_max_data_size {#async-insert-max-data-size} + +Максимальный размер необработанных данных (в байтах), собранных за запрос, перед их вставкой. + +Возможные значения: + +- Положительное целое число. +- 0 — асинхронные вставки отключены. + +Значение по умолчанию: `1000000`. + +## async_insert_busy_timeout_ms {#async-insert-busy-timeout-ms} + +Максимальное время ожидания в миллисекундах после первого запроса `INSERT` и перед вставкой данных. + +Возможные значения: + +- Положительное целое число. +- 0 — ожидание отключено. + +Значение по умолчанию: `200`. + +## async_insert_stale_timeout_ms {#async-insert-stale-timeout-ms} + +Максимальное время ожидания в миллисекундах после последнего запроса `INSERT` и перед вставкой данных. Если установлено ненулевое значение, [async_insert_busy_timeout_ms](#async-insert-busy-timeout-ms) будет продлеваться с каждым запросом `INSERT`, пока не будет превышен [async_insert_max_data_size](#async-insert-max-data-size). + +Возможные значения: + +- Положительное целое число. +- 0 — ожидание отключено. + +Значение по умолчанию: `0`. + diff --git a/docs/ru/operations/storing-data.md b/docs/ru/operations/storing-data.md index ca9b60bded8..a544c7202e1 100644 --- a/docs/ru/operations/storing-data.md +++ b/docs/ru/operations/storing-data.md @@ -19,7 +19,7 @@ toc_title: "Хранение данных на внешних дисках" Пример конфигурации: ``` xml - + @@ -41,7 +41,7 @@ toc_title: "Хранение данных на внешних дисках" 0 - + ``` Обязательные параметры: @@ -93,7 +93,7 @@ toc_title: "Хранение данных на внешних дисках" Пример конфигурации: ``` xml - + @@ -110,7 +110,7 @@ toc_title: "Хранение данных на внешних дисках" - + ``` ## Хранение данных на веб-сервере {#storing-data-on-webserver} @@ -124,7 +124,7 @@ toc_title: "Хранение данных на внешних дисках" Готовый тестовый пример. Добавьте эту конфигурацию в config: ``` xml - + @@ -142,7 +142,7 @@ toc_title: "Хранение данных на внешних дисках" - + ``` А затем выполните этот запрос: diff --git a/docs/ru/operations/system-tables/columns.md b/docs/ru/operations/system-tables/columns.md index a896360b3f9..b5108386ce8 100644 --- a/docs/ru/operations/system-tables/columns.md +++ b/docs/ru/operations/system-tables/columns.md @@ -24,6 +24,11 @@ Cтолбцы: - `is_in_primary_key` ([UInt8](../../sql-reference/data-types/int-uint.md)) — флаг, показывающий включение столбца в первичный ключ. - `is_in_sampling_key` ([UInt8](../../sql-reference/data-types/int-uint.md)) — флаг, показывающий включение столбца в ключ выборки. - `compression_codec` ([String](../../sql-reference/data-types/string.md)) — имя кодека сжатия. +- `character_octet_length` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — максимальная длина в байтах для двоичных данных, символьных данных или текстовых данных и изображений. В ClickHouse имеет смысл только для типа данных `FixedString`. Иначе возвращается значение `NULL`. +- `numeric_precision` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — точность приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse это разрядность для целочисленных типов и десятичная точность для типов `Decimal`. Иначе возвращается значение `NULL`. +- `numeric_precision_radix` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — основание системы счисления точности приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse значение столбца равно 2 для целочисленных типов и 10 — для типов `Decimal`. Иначе возвращается значение `NULL`. +- `numeric_scale` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — масштаб приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse имеет смысл только для типов `Decimal`. Иначе возвращается значение `NULL`. +- `datetime_precision` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — десятичная точность для данных типа `DateTime64`. Для других типов данных возвращается значение `NULL`. **Пример** @@ -34,10 +39,11 @@ SELECT * FROM system.columns LIMIT 2 FORMAT Vertical; ```text Row 1: ────── -database: system -table: aggregate_function_combinators -name: name +database: INFORMATION_SCHEMA +table: COLUMNS +name: table_catalog type: String +position: 1 default_kind: default_expression: data_compressed_bytes: 0 @@ -49,13 +55,19 @@ is_in_sorting_key: 0 is_in_primary_key: 0 is_in_sampling_key: 0 compression_codec: +character_octet_length: ᴺᵁᴸᴸ +numeric_precision: ᴺᵁᴸᴸ +numeric_precision_radix: ᴺᵁᴸᴸ +numeric_scale: ᴺᵁᴸᴸ +datetime_precision: ᴺᵁᴸᴸ Row 2: ────── -database: system -table: aggregate_function_combinators -name: is_internal -type: UInt8 +database: INFORMATION_SCHEMA +table: COLUMNS +name: table_schema +type: String +position: 2 default_kind: default_expression: data_compressed_bytes: 0 @@ -67,4 +79,9 @@ is_in_sorting_key: 0 is_in_primary_key: 0 is_in_sampling_key: 0 compression_codec: +character_octet_length: ᴺᵁᴸᴸ +numeric_precision: ᴺᵁᴸᴸ +numeric_precision_radix: ᴺᵁᴸᴸ +numeric_scale: ᴺᵁᴸᴸ +datetime_precision: ᴺᵁᴸᴸ ``` diff --git a/docs/ru/operations/system-tables/index.md b/docs/ru/operations/system-tables/index.md index 73b839ddc1f..c560c1b7f49 100644 --- a/docs/ru/operations/system-tables/index.md +++ b/docs/ru/operations/system-tables/index.md @@ -34,7 +34,7 @@ toc_title: "Системные таблицы" Пример: ```xml - + system query_log
@@ -45,7 +45,7 @@ toc_title: "Системные таблицы" --> 7500
-
+ ``` По умолчанию размер таблицы не ограничен. Управлять размером таблицы можно используя [TTL](../../sql-reference/statements/alter/ttl.md#manipuliatsii-s-ttl-tablitsy) для удаления устаревших записей журнала. Также вы можете использовать функцию партиционирования для таблиц `MergeTree`. diff --git a/docs/ru/operations/system-tables/information_schema.md b/docs/ru/operations/system-tables/information_schema.md new file mode 100644 index 00000000000..b61418931bd --- /dev/null +++ b/docs/ru/operations/system-tables/information_schema.md @@ -0,0 +1,210 @@ +# INFORMATION_SCHEMA {#information-schema} + +`INFORMATION_SCHEMA` (`information_schema`) — это системная база данных, содержащая представления. Используя эти представления, вы можете получить информацию о метаданных объектов базы данных. Эти представления считывают данные из столбцов системных таблиц [system.columns](../../operations/system-tables/columns.md), [system.databases](../../operations/system-tables/databases.md) и [system.tables](../../operations/system-tables/tables.md). + +Структура и состав системных таблиц могут меняться в разных версиях СУБД ClickHouse, но поддержка `information_schema` позволяет изменять структуру системных таблиц без изменения способа доступа к метаданным. Запросы метаданных не зависят от используемой СУБД. + +``` sql +SHOW TABLES FROM INFORMATION_SCHEMA; +``` + +``` text +┌─name─────┐ +│ COLUMNS │ +│ SCHEMATA │ +│ TABLES │ +│ VIEWS │ +└──────────┘ +``` + +`INFORMATION_SCHEMA` содержит следующие представления: + +- [COLUMNS](#columns) +- [SCHEMATA](#schemata) +- [TABLES](#tables) +- [VIEWS](#views) + +## COLUMNS {#columns} + +Содержит столбцы, которые считываются из системной таблицы [system.columns](../../operations/system-tables/columns.md), и столбцы, которые не поддерживаются в ClickHouse или не имеют смысла (всегда имеют значение `NULL`), но должны быть по стандарту. + +Столбцы: + +- `table_catalog` ([String](../../sql-reference/data-types/string.md)) — имя базы данных, в которой находится таблица. +- `table_schema` ([String](../../sql-reference/data-types/string.md)) — имя базы данных, в которой находится таблица. +- `table_name` ([String](../../sql-reference/data-types/string.md)) — имя таблицы. +- `column_name` ([String](../../sql-reference/data-types/string.md)) — имя столбца. +- `ordinal_position` ([UInt64](../../sql-reference/data-types/int-uint.md)) — порядковый номер столбца в таблице (нумерация начинается с 1). +- `column_default` ([String](../../sql-reference/data-types/string.md)) — выражение для значения по умолчанию или пустая строка. +- `is_nullable` ([UInt8](../../sql-reference/data-types/int-uint.md)) — флаг, показывающий является ли столбец типа `Nullable`. +- `data_type` ([String](../../sql-reference/data-types/string.md)) — тип столбца. +- `character_maximum_length` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — максимальная длина в байтах для двоичных данных, символьных данных или текстовых данных и изображений. В ClickHouse имеет смысл только для типа данных `FixedString`. Иначе возвращается значение `NULL`. +- `character_octet_length` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — максимальная длина в байтах для двоичных данных, символьных данных или текстовых данных и изображений. В ClickHouse имеет смысл только для типа данных `FixedString`. Иначе возвращается значение `NULL`. +- `numeric_precision` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — точность приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse это разрядность для целочисленных типов и десятичная точность для типов `Decimal`. Иначе возвращается значение `NULL`. +- `numeric_precision_radix` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — основание системы счисления точности приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse значение столбца равно 2 для целочисленных типов и 10 — для типов `Decimal`. Иначе возвращается значение `NULL`. +- `numeric_scale` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — масштаб приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse имеет смысл только для типов `Decimal`. Иначе возвращается значение `NULL`. +- `datetime_precision` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — десятичная точность для данных типа `DateTime64`. Для других типов данных возвращается значение `NULL`. +- `character_set_catalog` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. +- `character_set_schema` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. +- `character_set_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. +- `collation_catalog` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. +- `collation_schema` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. +- `collation_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. +- `domain_catalog` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. +- `domain_schema` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. +- `domain_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. + +**Пример** + +Запрос: + +``` sql +SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (table_schema=currentDatabase() OR table_schema='') AND table_name NOT LIKE '%inner%' LIMIT 1 FORMAT Vertical; +``` + +Результат: + +``` text +Row 1: +────── +table_catalog: default +table_schema: default +table_name: describe_example +column_name: id +ordinal_position: 1 +column_default: +is_nullable: 0 +data_type: UInt64 +character_maximum_length: ᴺᵁᴸᴸ +character_octet_length: ᴺᵁᴸᴸ +numeric_precision: 64 +numeric_precision_radix: 2 +numeric_scale: 0 +datetime_precision: ᴺᵁᴸᴸ +character_set_catalog: ᴺᵁᴸᴸ +character_set_schema: ᴺᵁᴸᴸ +character_set_name: ᴺᵁᴸᴸ +collation_catalog: ᴺᵁᴸᴸ +collation_schema: ᴺᵁᴸᴸ +collation_name: ᴺᵁᴸᴸ +domain_catalog: ᴺᵁᴸᴸ +domain_schema: ᴺᵁᴸᴸ +domain_name: ᴺᵁᴸᴸ +``` + +## SCHEMATA {#schemata} + +Содержит столбцы, которые считываются из системной таблицы [system.databases](../../operations/system-tables/databases.md), и столбцы, которые не поддерживаются в ClickHouse или не имеют смысла (всегда имеют значение `NULL`), но должны быть по стандарту. + +Столбцы: + +- `catalog_name` ([String](../../sql-reference/data-types/string.md)) — имя базы данных. +- `schema_name` ([String](../../sql-reference/data-types/string.md)) — имя базы данных. +- `schema_owner` ([String](../../sql-reference/data-types/string.md)) — имя владельца схемы, всегда `'default'`. +- `default_character_set_catalog` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. +- `default_character_set_schema` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. +- `default_character_set_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. +- `sql_path` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — `NULL`, не поддерживается. + +**Пример** + +Запрос: + +``` sql +SELECT * FROM information_schema.schemata WHERE schema_name ILIKE 'information_schema' LIMIT 1 FORMAT Vertical; +``` + +Результат: + +``` text +Row 1: +────── +catalog_name: INFORMATION_SCHEMA +schema_name: INFORMATION_SCHEMA +schema_owner: default +default_character_set_catalog: ᴺᵁᴸᴸ +default_character_set_schema: ᴺᵁᴸᴸ +default_character_set_name: ᴺᵁᴸᴸ +sql_path: ᴺᵁᴸᴸ +``` + +## TABLES {#tables} + +Содержит столбцы, которые считываются из системной таблицы [system.tables](../../operations/system-tables/tables.md). + +Столбцы: + +- `table_catalog` ([String](../../sql-reference/data-types/string.md)) — имя базы данных, в которой находится таблица. +- `table_schema` ([String](../../sql-reference/data-types/string.md)) — имя базы данных, в которой находится таблица. +- `table_name` ([String](../../sql-reference/data-types/string.md)) — имя таблицы. +- `table_type` ([Enum8](../../sql-reference/data-types/enum.md)) — тип таблицы. Возможные значения: + - `BASE TABLE` + - `VIEW` + - `FOREIGN TABLE` + - `LOCAL TEMPORARY` + - `SYSTEM VIEW` + +**Пример** + +Запрос: + +``` sql +SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE (table_schema = currentDatabase() OR table_schema = '') AND table_name NOT LIKE '%inner%' LIMIT 1 FORMAT Vertical; +``` + +Результат: + +``` text +Row 1: +────── +table_catalog: default +table_schema: default +table_name: describe_example +table_type: BASE TABLE +``` + +## VIEWS {#views} + +Содержит столбцы, которые считываются из системной таблицы [system.tables](../../operations/system-tables/tables.md), если использован движок [View](../../engines/table-engines/special/view.md). + +Столбцы: + +- `table_catalog` ([String](../../sql-reference/data-types/string.md)) — имя базы данных, в которой находится таблица. +- `table_schema` ([String](../../sql-reference/data-types/string.md)) — имя базы данных, в которой находится таблица. +- `table_name` ([String](../../sql-reference/data-types/string.md)) — имя таблицы. +- `view_definition` ([String](../../sql-reference/data-types/string.md)) — `SELECT` запрос для представления. +- `check_option` ([String](../../sql-reference/data-types/string.md)) — `NONE`, нет проверки. +- `is_updatable` ([Enum8](../../sql-reference/data-types/enum.md)) — `NO`, представление не обновляется. +- `is_insertable_into` ([Enum8](../../sql-reference/data-types/enum.md)) — показывает является ли представление [материализованным](../../sql-reference/statements/create/view/#materialized). Возможные значения: + - `NO` — создано обычное представление. + - `YES` — создано материализованное представление. +- `is_trigger_updatable` ([Enum8](../../sql-reference/data-types/enum.md)) — `NO`, триггер не обновляется. +- `is_trigger_deletable` ([Enum8](../../sql-reference/data-types/enum.md)) — `NO`, триггер не удаляется. +- `is_trigger_insertable_into` ([Enum8](../../sql-reference/data-types/enum.md)) — `NO`, данные не вставляются в триггер. + +**Пример** + +Запрос: + +``` sql +CREATE VIEW v (n Nullable(Int32), f Float64) AS SELECT n, f FROM t; +CREATE MATERIALIZED VIEW mv ENGINE = Null AS SELECT * FROM system.one; +SELECT * FROM information_schema.views WHERE table_schema = currentDatabase() LIMIT 1 FORMAT Vertical; +``` + +Результат: + +``` text +Row 1: +────── +table_catalog: default +table_schema: default +table_name: mv +view_definition: SELECT * FROM system.one +check_option: NONE +is_updatable: NO +is_insertable_into: YES +is_trigger_updatable: NO +is_trigger_deletable: NO +is_trigger_insertable_into: NO +``` diff --git a/docs/ru/operations/system-tables/replicas.md b/docs/ru/operations/system-tables/replicas.md index ff58355145d..8f86f94dedd 100644 --- a/docs/ru/operations/system-tables/replicas.md +++ b/docs/ru/operations/system-tables/replicas.md @@ -8,43 +8,48 @@ ``` sql SELECT * FROM system.replicas -WHERE table = 'visits' +WHERE table = 'test_table' FORMAT Vertical ``` ``` text +Query id: dc6dcbcb-dc28-4df9-ae27-4354f5b3b13e + Row 1: -────── -database: merge -table: visits -engine: ReplicatedCollapsingMergeTree -is_leader: 1 -can_become_leader: 1 -is_readonly: 0 -is_session_expired: 0 -future_parts: 1 -parts_to_check: 0 -zookeeper_path: /clickhouse/tables/01-06/visits -replica_name: example01-06-1.yandex.ru -replica_path: /clickhouse/tables/01-06/visits/replicas/example01-06-1.yandex.ru -columns_version: 9 -queue_size: 1 -inserts_in_queue: 0 -merges_in_queue: 1 -part_mutations_in_queue: 0 -queue_oldest_time: 2020-02-20 08:34:30 -inserts_oldest_time: 0000-00-00 00:00:00 -merges_oldest_time: 2020-02-20 08:34:30 -part_mutations_oldest_time: 0000-00-00 00:00:00 -oldest_part_to_get: -oldest_part_to_merge_to: 20200220_20284_20840_7 -oldest_part_to_mutate_to: -log_max_index: 596273 -log_pointer: 596274 -last_queue_update: 2020-02-20 08:34:32 -absolute_delay: 0 -total_replicas: 2 -active_replicas: 2 +─────── +database: db +table: test_table +engine: ReplicatedMergeTree +is_leader: 1 +can_become_leader: 1 +is_readonly: 0 +is_session_expired: 0 +future_parts: 0 +parts_to_check: 0 +zookeeper_path: /test/test_table +replica_name: r1 +replica_path: /test/test_table/replicas/r1 +columns_version: -1 +queue_size: 27 +inserts_in_queue: 27 +merges_in_queue: 0 +part_mutations_in_queue: 0 +queue_oldest_time: 2021-10-12 14:48:48 +inserts_oldest_time: 2021-10-12 14:48:48 +merges_oldest_time: 1970-01-01 03:00:00 +part_mutations_oldest_time: 1970-01-01 03:00:00 +oldest_part_to_get: 1_17_17_0 +oldest_part_to_merge_to: +oldest_part_to_mutate_to: +log_max_index: 206 +log_pointer: 207 +last_queue_update: 2021-10-12 14:50:08 +absolute_delay: 99 +total_replicas: 5 +active_replicas: 5 +last_queue_update_exception: +zookeeper_exception: +replica_is_active: {'r1':1,'r2':1} ``` Столбцы: @@ -82,6 +87,8 @@ active_replicas: 2 - `absolute_delay` (`UInt64`) - задержка (в секундах) для текущей реплики. - `total_replicas` (`UInt8`) - общее число известных реплик этой таблицы. - `active_replicas` (`UInt8`) - число реплик этой таблицы, имеющих сессию в ZK; то есть, число работающих реплик. +- `last_queue_update_exception` (`String`) - если в очереди есть битые записи. Особенно важно, когда в ClickHouse нарушается обратная совместимость между версиями, а записи журнала, сделанные более новыми версиями, не могут быть проанализированы старыми версиями. +- `zookeeper_exception` (`String`) - последнее сообщение об исключении. Появляется, если ошибка произошла при получении информации из ZooKeeper. - `replica_is_active` ([Map(String, UInt8)](../../sql-reference/data-types/map.md)) — соответствие между именем реплики и признаком активности реплики. Если запрашивать все столбцы, то таблица может работать слегка медленно, так как на каждую строчку делается несколько чтений из ZK. diff --git a/docs/ru/operations/system-tables/tables.md b/docs/ru/operations/system-tables/tables.md index 03ad174780f..bf47051442e 100644 --- a/docs/ru/operations/system-tables/tables.md +++ b/docs/ru/operations/system-tables/tables.md @@ -9,20 +9,37 @@ Столбцы: - `database` ([String](../../sql-reference/data-types/string.md)) — имя базы данных, в которой находится таблица. + - `name` ([String](../../sql-reference/data-types/string.md)) — имя таблицы. + - `engine` ([String](../../sql-reference/data-types/string.md)) — движок таблицы (без параметров). + - `is_temporary` ([UInt8](../../sql-reference/data-types/int-uint.md)) — флаг, указывающий на то, временная это таблица или нет. + - `data_path` ([String](../../sql-reference/data-types/string.md)) — путь к данным таблицы в файловой системе. + - `metadata_path` ([String](../../sql-reference/data-types/string.md)) — путь к табличным метаданным в файловой системе. + - `metadata_modification_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — время последней модификации табличных метаданных. + - `dependencies_database` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — зависимости базы данных. + - `dependencies_table` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — табличные зависимости (таблицы [MaterializedView](../../engines/table-engines/special/materializedview.md), созданные на базе текущей таблицы). + - `create_table_query` ([String](../../sql-reference/data-types/string.md)) — запрос, при помощи которого создавалась таблица. + - `engine_full` ([String](../../sql-reference/data-types/string.md)) — параметры табличного движка. + +- `as_select` ([String](../../sql-reference/data-types/string.md)) - `SELECT` запрос для представления. + - `partition_key` ([String](../../sql-reference/data-types/string.md)) — ключ партиционирования таблицы. + - `sorting_key` ([String](../../sql-reference/data-types/string.md)) — ключ сортировки таблицы. + - `primary_key` ([String](../../sql-reference/data-types/string.md)) - первичный ключ таблицы. + - `sampling_key` ([String](../../sql-reference/data-types/string.md)) — ключ сэмплирования таблицы. + - `storage_policy` ([String](../../sql-reference/data-types/string.md)) - политика хранения данных: - [MergeTree](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-multiple-volumes) @@ -41,6 +58,8 @@ - `comment` ([String](../../sql-reference/data-types/string.md)) — комментарий к таблице. +- `has_own_data` ([UInt8](../../sql-reference/data-types/int-uint.md)) — флаг, показывающий хранит ли таблица сама какие-то данные на диске или только обращается к какому-то другому источнику. + Таблица `system.tables` используется при выполнении запроса `SHOW TABLES`. **Пример** @@ -64,6 +83,7 @@ dependencies_database: [] dependencies_table: [] create_table_query: CREATE TABLE base.t1 (`n` UInt64) ENGINE = MergeTree ORDER BY n SETTINGS index_granularity = 8192 engine_full: MergeTree ORDER BY n SETTINGS index_granularity = 8192 +as_select: SELECT database AS table_catalog partition_key: sorting_key: n primary_key: n @@ -74,6 +94,7 @@ total_bytes: 99 lifetime_rows: ᴺᵁᴸᴸ lifetime_bytes: ᴺᵁᴸᴸ comment: +has_own_data: 0 Row 2: ────── @@ -89,6 +110,7 @@ dependencies_database: [] dependencies_table: [] create_table_query: CREATE TABLE default.`53r93yleapyears` (`id` Int8, `febdays` Int8) ENGINE = MergeTree ORDER BY id SETTINGS index_granularity = 8192 engine_full: MergeTree ORDER BY id SETTINGS index_granularity = 8192 +as_select: SELECT name AS catalog_name partition_key: sorting_key: id primary_key: id @@ -99,4 +121,5 @@ total_bytes: 155 lifetime_rows: ᴺᵁᴸᴸ lifetime_bytes: ᴺᵁᴸᴸ comment: +has_own_data: 0 ``` diff --git a/docs/ru/operations/utilities/clickhouse-copier.md b/docs/ru/operations/utilities/clickhouse-copier.md index 7e1364f9ee1..07467c3e5da 100644 --- a/docs/ru/operations/utilities/clickhouse-copier.md +++ b/docs/ru/operations/utilities/clickhouse-copier.md @@ -44,7 +44,7 @@ $ clickhouse-copier --daemon --config zookeeper.xml --task-path /task/path --bas ## Формат Zookeeper.xml {#format-zookeeper-xml} ``` xml - + trace 100M @@ -57,13 +57,13 @@ $ clickhouse-copier --daemon --config zookeeper.xml --task-path /task/path --bas 2181 - + ``` ## Конфигурация заданий на копирование {#konfiguratsiia-zadanii-na-kopirovanie} ``` xml - + @@ -176,7 +176,7 @@ $ clickhouse-copier --daemon --config zookeeper.xml --task-path /task/path --bas ... - + ``` `clickhouse-copier` отслеживает изменения `/task/path/description` и применяет их «на лету». Если вы поменяете, например, значение `max_workers`, то количество процессов, выполняющих задания, также изменится. diff --git a/docs/ru/sql-reference/aggregate-functions/reference/argmax.md b/docs/ru/sql-reference/aggregate-functions/reference/argmax.md index 71289423035..bdf7b1d1df6 100644 --- a/docs/ru/sql-reference/aggregate-functions/reference/argmax.md +++ b/docs/ru/sql-reference/aggregate-functions/reference/argmax.md @@ -6,20 +6,12 @@ toc_priority: 106 Вычисляет значение `arg` при максимальном значении `val`. Если есть несколько разных значений `arg` для максимальных значений `val`, возвращает первое попавшееся из таких значений. -Если функции передан кортеж, то будет выведен кортеж с максимальным значением `val`. Удобно использовать для работы с [SimpleAggregateFunction](../../../sql-reference/data-types/simpleaggregatefunction.md). - **Синтаксис** ``` sql argMax(arg, val) ``` -или - -``` sql -argMax(tuple(arg, val)) -``` - **Аргументы** - `arg` — аргумент. @@ -31,12 +23,6 @@ argMax(tuple(arg, val)) Тип: соответствует типу `arg`. -Если передан кортеж: - -- кортеж `(arg, val)` c максимальным значением `val` и соответствующим ему `arg`. - -Тип: [Tuple](../../../sql-reference/data-types/tuple.md). - **Пример** Исходная таблица: @@ -52,14 +38,14 @@ argMax(tuple(arg, val)) Запрос: ``` sql -SELECT argMax(user, salary), argMax(tuple(user, salary), salary), argMax(tuple(user, salary)) FROM salary; +SELECT argMax(user, salary), argMax(tuple(user, salary), salary) FROM salary; ``` Результат: ``` text -┌─argMax(user, salary)─┬─argMax(tuple(user, salary), salary)─┬─argMax(tuple(user, salary))─┐ -│ director │ ('director',5000) │ ('director',5000) │ -└──────────────────────┴─────────────────────────────────────┴─────────────────────────────┘ +┌─argMax(user, salary)─┬─argMax(tuple(user, salary), salary)─┐ +│ director │ ('director',5000) │ +└──────────────────────┴─────────────────────────────────────┘ ``` diff --git a/docs/ru/sql-reference/aggregate-functions/reference/argmin.md b/docs/ru/sql-reference/aggregate-functions/reference/argmin.md index 4ee78a73a84..dd923061943 100644 --- a/docs/ru/sql-reference/aggregate-functions/reference/argmin.md +++ b/docs/ru/sql-reference/aggregate-functions/reference/argmin.md @@ -6,20 +6,12 @@ toc_priority: 105 Вычисляет значение `arg` при минимальном значении `val`. Если есть несколько разных значений `arg` для минимальных значений `val`, возвращает первое попавшееся из таких значений. -Если функции передан кортеж, то будет выведен кортеж с минимальным значением `val`. Удобно использовать для работы с [SimpleAggregateFunction](../../../sql-reference/data-types/simpleaggregatefunction.md). - **Синтаксис** ``` sql argMin(arg, val) ``` -или - -``` sql -argMin(tuple(arg, val)) -``` - **Аргументы** - `arg` — аргумент. @@ -31,12 +23,6 @@ argMin(tuple(arg, val)) Тип: соответствует типу `arg`. -Если передан кортеж: - -- Кортеж `(arg, val)` c минимальным значением `val` и соответствующим ему `arg`. - -Тип: [Tuple](../../../sql-reference/data-types/tuple.md). - **Пример** Исходная таблица: @@ -52,14 +38,14 @@ argMin(tuple(arg, val)) Запрос: ``` sql -SELECT argMin(user, salary), argMin(tuple(user, salary)) FROM salary; +SELECT argMin(user, salary) FROM salary; ``` Результат: ``` text -┌─argMin(user, salary)─┬─argMin(tuple(user, salary))─┐ -│ worker │ ('worker',1000) │ -└──────────────────────┴─────────────────────────────┘ +┌─argMin(user, salary)─┐ +│ worker │ +└──────────────────────┘ ``` diff --git a/docs/ru/sql-reference/aggregate-functions/reference/entropy.md b/docs/ru/sql-reference/aggregate-functions/reference/entropy.md new file mode 100644 index 00000000000..b5abe00fd96 --- /dev/null +++ b/docs/ru/sql-reference/aggregate-functions/reference/entropy.md @@ -0,0 +1,43 @@ +--- +toc_priority: 302 +--- + +# entropy {#entropy} + +Вычисляет [информационную энтропию](https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%8D%D0%BD%D1%82%D1%80%D0%BE%D0%BF%D0%B8%D1%8F) столбца данных. + +**Синтаксис** + +``` sql +entropy(val) +``` + +**Аргументы** + +- `val` — столбец значений любого типа + +**Возвращаемое значение** + +- Информационная энтропия. + +Тип: [Float64](../../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +``` sql +CREATE TABLE entropy (`vals` UInt32,`strings` String) ENGINE = Memory; + +INSERT INTO entropy VALUES (1, 'A'), (1, 'A'), (1,'A'), (1,'A'), (2,'B'), (2,'B'), (2,'C'), (2,'D'); + +SELECT entropy(vals), entropy(strings) FROM entropy; +``` + +Результат: + +``` text +┌─entropy(vals)─┬─entropy(strings)─┐ +│ 1 │ 1.75 │ +└───────────────┴──────────────────┘ +``` diff --git a/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md b/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md index 73736344c57..edc8b9bbc11 100644 --- a/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md +++ b/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md @@ -26,7 +26,7 @@ toc_title: "Хранение словарей в памяти" Общий вид конфигурации: ``` xml - + ... @@ -36,7 +36,7 @@ toc_title: "Хранение словарей в памяти" ... - + ``` Соответствущий [DDL-запрос](../../statements/create/dictionary.md#create-dictionary-query): @@ -53,14 +53,17 @@ LAYOUT(LAYOUT_TYPE(param value)) -- layout settings - [flat](#flat) - [hashed](#dicts-external_dicts_dict_layout-hashed) - [sparse_hashed](#dicts-external_dicts_dict_layout-sparse_hashed) -- [cache](#cache) -- [ssd_cache](#ssd-cache) -- [ssd_complex_key_cache](#complex-key-ssd-cache) -- [direct](#direct) -- [range_hashed](#range-hashed) - [complex_key_hashed](#complex-key-hashed) +- [complex_key_sparse_hashed](#complex-key-sparse-hashed) +- [hashed_array](#dicts-external_dicts_dict_layout-hashed-array) +- [complex_key_hashed_array](#complex-key-hashed-array) +- [range_hashed](#range-hashed) - [complex_key_range_hashed](#complex-key-range-hashed) +- [cache](#cache) - [complex_key_cache](#complex-key-cache) +- [ssd_cache](#ssd-cache) +- [complex_key_ssd_cache](#complex-key-ssd-cache) +- [direct](#direct) - [complex_key_direct](#complex-key-direct) - [ip_trie](#ip-trie) @@ -140,7 +143,7 @@ LAYOUT(SPARSE_HASHED([PREALLOCATE 0])) ### complex_key_hashed {#complex-key-hashed} -Тип размещения предназначен для использования с составными [ключами](external-dicts-dict-structure.md). Аналогичен `hashed`. +Тип размещения предназначен для использования с составными [ключами](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-structure.md). Аналогичен `hashed`. Пример конфигурации: @@ -156,6 +159,63 @@ LAYOUT(SPARSE_HASHED([PREALLOCATE 0])) LAYOUT(COMPLEX_KEY_HASHED()) ``` +### complex_key_sparse_hashed {#complex-key-sparse-hashed} + +Тип размещения предназначен для использования с составными [ключами](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-structure.md). Аналогичен [sparse_hashed](#dicts-external_dicts_dict_layout-sparse_hashed). + +Пример конфигурации: + +``` xml + + + +``` + +или + +``` sql +LAYOUT(COMPLEX_KEY_SPARSE_HASHED()) +``` + +### hashed_array {#dicts-external_dicts_dict_layout-hashed-array} + +Словарь полностью хранится в оперативной памяти. Каждый атрибут хранится в массиве. Ключевой атрибут хранится в виде хеш-таблицы, где его значение является индексом в массиве атрибутов. Словарь может содержать произвольное количество элементов с произвольными идентификаторами. На практике количество ключей может достигать десятков миллионов элементов. + +Поддерживаются все виды источников. При обновлении данные (из файла, из таблицы) считываются целиком. + +Пример конфигурации: + +``` xml + + + + +``` + +или + +``` sql +LAYOUT(HASHED_ARRAY()) +``` + +### complex_key_hashed_array {#complex-key-hashed-array} + +Тип размещения предназначен для использования с составными [ключами](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-structure.md). Аналогичен [hashed_array](#dicts-external_dicts_dict_layout-hashed-array). + +Пример конфигурации: + +``` xml + + + +``` + +или + +``` sql +LAYOUT(COMPLEX_KEY_HASHED_ARRAY()) +``` + ### range_hashed {#range-hashed} Словарь хранится в оперативной памяти в виде хэш-таблицы с упорядоченным массивом диапазонов и соответствующих им значений. @@ -224,7 +284,7 @@ RANGE(MIN first MAX last) Пример конфигурации: ``` xml - + ... @@ -253,7 +313,7 @@ RANGE(MIN first MAX last) - + ``` или @@ -297,9 +357,13 @@ RANGE(MIN StartDate MAX EndDate); При поиске в словаре сначала просматривается кэш. На каждый блок данных, все не найденные в кэше или устаревшие ключи запрашиваются у источника с помощью `SELECT attrs... FROM db.table WHERE id IN (k1, k2, ...)`. Затем, полученные данные записываются в кэш. -Для cache-словарей может быть задано время устаревания [lifetime](external-dicts-dict-lifetime.md) данных в кэше. Если от загрузки данных в ячейке прошло больше времени, чем `lifetime`, то значение не используется, и будет запрошено заново при следующей необходимости его использовать. +Если ключи не были найдены в словаре, то для обновления кэша создается задание и добавляется в очередь обновлений. Параметры очереди обновлений можно устанавливать настройками `max_update_queue_size`, `update_queue_push_timeout_milliseconds`, `query_wait_timeout_milliseconds`, `max_threads_for_updates` -Это наименее эффективный из всех способов размещения словарей. Скорость работы кэша очень сильно зависит от правильности настройки и сценария использования. Словарь типа cache показывает высокую производительность лишь при достаточно больших hit rate-ах (рекомендуется 99% и выше). Посмотреть средний hit rate можно в таблице `system.dictionaries`. +Для cache-словарей при помощи настройки `allow_read_expired_keys` может быть задано время устаревания [lifetime](../../../sql-reference/dictionaries/external-dictionaries/external-dicts-dict-lifetime.md) данных в кэше. Если с момента загрузки данных в ячейку прошло больше времени, чем `lifetime`, то значение не используется, а ключ устаревает. Ключ будет запрошен заново при следующей необходимости его использовать. + +Это наименее эффективный из всех способов размещения словарей. Скорость работы кэша очень сильно зависит от правильности настройки и сценария использования. Словарь типа `cache` показывает высокую производительность лишь при достаточно большой частоте успешных обращений (рекомендуется 99% и выше). Посмотреть среднюю частоту успешных обращений (`hit rate`) можно в таблице [system.dictionaries](../../../operations/system-tables/dictionaries.md). + +Если параметр `allow_read_expired_keys` выставлен в 1 (0 по умолчанию), то словарь поддерживает асинхронные обновления. Если клиент запрашивает ключи, которые находятся в кэше, но при этом некоторые из них устарели, то словарь вернет устаревшие ключи клиенту и запросит их асинхронно у источника. Чтобы увеличить производительность кэша, используйте подзапрос с `LIMIT`, а снаружи вызывайте функцию со словарём. @@ -312,6 +376,16 @@ RANGE(MIN StartDate MAX EndDate); 1000000000 + + 0 + + 100000 + + 10 + + 60000 + + 4 ``` @@ -338,7 +412,7 @@ LAYOUT(CACHE(SIZE_IN_CELLS 1000000000)) ### ssd_cache {#ssd-cache} -Похож на `cache`, но хранит данные на SSD и индекс в оперативной памяти. +Похож на `cache`, но хранит данные на SSD, а индекс в оперативной памяти. Все параметры, относящиеся к очереди обновлений, могут также быть применены к SSD-кэш словарям. ``` xml diff --git a/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md b/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md index 828d69cf26b..0486f4931b0 100644 --- a/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md +++ b/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md @@ -10,7 +10,7 @@ toc_title: "Источники внешних словарей" Общий вид XML-конфигурации: ``` xml - + ... @@ -21,7 +21,7 @@ toc_title: "Источники внешних словарей" ... ... - + ``` Аналогичный [DDL-запрос](../../statements/create/dictionary.md#create-dictionary-query): @@ -311,7 +311,7 @@ $ sudo apt-get install -y unixodbc odbcinst odbc-postgresql Конфигурация словаря в ClickHouse: ``` xml - + table_name @@ -340,7 +340,7 @@ $ sudo apt-get install -y unixodbc odbcinst odbc-postgresql - + ``` или @@ -416,7 +416,7 @@ $ sudo apt-get install tdsodbc freetds-bin sqsh Настройка словаря в ClickHouse: ``` xml - + test @@ -446,7 +446,7 @@ $ sudo apt-get install tdsodbc freetds-bin sqsh - + ``` или diff --git a/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts.md b/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts.md index 04ef24b68c5..55324071efe 100644 --- a/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts.md +++ b/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts.md @@ -26,7 +26,7 @@ ClickHouse: Конфигурационный файл словарей имеет вид: ``` xml - + Необязательный элемент с любым содержимым. Игнорируется сервером ClickHouse. @@ -42,7 +42,7 @@ ClickHouse: - + ``` В одном файле можно [сконфигурировать](external-dicts-dict.md) произвольное количество словарей. diff --git a/docs/ru/sql-reference/functions/arithmetic-functions.md b/docs/ru/sql-reference/functions/arithmetic-functions.md index f587b7b5b5d..278f3edb74a 100644 --- a/docs/ru/sql-reference/functions/arithmetic-functions.md +++ b/docs/ru/sql-reference/functions/arithmetic-functions.md @@ -83,3 +83,78 @@ SELECT toTypeName(0), toTypeName(0 + 0), toTypeName(0 + 0 + 0), toTypeName(0 + 0 Вычисляет наименьшее общее кратное чисел. При делении на ноль или при делении минимального отрицательного числа на минус единицу, кидается исключение. + +## max2 {#max2} + +Сравнивает два числа и возвращает максимум. Возвращаемое значение приводится к типу [Float64](../../sql-reference/data-types/float.md). + +**Синтаксис** + +```sql +max2(value1, value2) +``` + +**Аргументы** + +- `value1` — первое число. [Int/UInt](../../sql-reference/data-types/int-uint.md) или [Float](../../sql-reference/data-types/float.md). +- `value2` — второе число. [Int/UInt](../../sql-reference/data-types/int-uint.md) или [Float](../../sql-reference/data-types/float.md). + +**Возвращаемое значение** + +- Максимальное значение среди двух чисел. + +Тип: [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT max2(-1, 2); +``` + +Результат: + +```text +┌─max2(-1, 2)─┐ +│ 2 │ +└─────────────┘ +``` + +## min2 {#min2} + +Сравнивает два числа и возвращает минимум. Возвращаемое значение приводится к типу [Float64](../../sql-reference/data-types/float.md). + +**Синтаксис** + +```sql +min2(value1, value2) +``` + +**Аргументы** + +- `value1` — первое число. [Int/UInt](../../sql-reference/data-types/int-uint.md) или [Float](../../sql-reference/data-types/float.md). +- `value2` — второе число. [Int/UInt](../../sql-reference/data-types/int-uint.md) или [Float](../../sql-reference/data-types/float.md). + +**Возвращаемое значение** + +- Минимальное значение среди двух чисел. + +Тип: [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT min2(-1, 2); +``` + +Результат: + +```text +┌─min2(-1, 2)─┐ +│ -1 │ +└─────────────┘ +``` + diff --git a/docs/ru/sql-reference/functions/ext-dict-functions.md b/docs/ru/sql-reference/functions/ext-dict-functions.md index 0e234f1d84e..ae62d98dd63 100644 --- a/docs/ru/sql-reference/functions/ext-dict-functions.md +++ b/docs/ru/sql-reference/functions/ext-dict-functions.md @@ -53,7 +53,7 @@ dictGetOrNull('dict_name', attr_name, id_expr) Настройка внешнего словаря: ``` xml - + ext-dict-test @@ -77,7 +77,7 @@ dictGetOrNull('dict_name', attr_name, id_expr) 0 - + ``` Выполним запрос: @@ -113,7 +113,7 @@ LIMIT 3; Настройка внешнего словаря: ``` xml - + ext-dict-mult @@ -142,7 +142,7 @@ LIMIT 3; 0 - + ``` Выполним запрос: diff --git a/docs/ru/sql-reference/functions/geo/s2.md b/docs/ru/sql-reference/functions/geo/s2.md new file mode 100644 index 00000000000..6b801e1d08f --- /dev/null +++ b/docs/ru/sql-reference/functions/geo/s2.md @@ -0,0 +1,376 @@ +--- +toc_title: "Функции для работы с индексами S2" +--- + +# Функции для работы с индексами S2 {#s2index} + +[S2](https://s2geometry.io/) — это система геокодирования, в которой все географические данные представлены на трехмерной сфере (аналогично глобусу). + +В библиотеке S2 точки представлены в виде индекса S2 — определенного числа, которое внутренне кодирует точку на поверхности трехмерной единичной сферы, в отличие от традиционных пар (широта, долгота). Чтобы получить индекс S2 для точки, заданной в формате (широта, долгота), используйте функцию [geoToS2](#geotools2). Также вы можете использовать функцию [s2togeo](#s2togeo) для получения географических координат, соответствующих заданному S2 индексу точки. + +## geoToS2 {#geotos2} + +Возвращает [S2](#s2index) индекс точки, соответствующий заданным координатам в формате `(долгота, широта)`. + +**Синтаксис** + +``` sql +geoToS2(lon, lat) +``` + +**Аргументы** + +- `lon` — долгота. [Float64](../../../sql-reference/data-types/float.md). +- `lat` — широта. [Float64](../../../sql-reference/data-types/float.md). + +**Возвращаемое значение** + +- S2 индекс точки. + +Тип: [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Пример** + +Запрос: + +``` sql +SELECT geoToS2(37.79506683, 55.71290588) AS s2Index; +``` + +Результат: + +``` text +┌─────────────s2Index─┐ +│ 4704772434919038107 │ +└─────────────────────┘ +``` + +## s2ToGeo {#s2togeo} + +Возвращает географические координаты `(долгота, широта)`, соответствующие заданному [S2](#s2index) индексу точки. + +**Синтаксис** + +``` sql +s2ToGeo(s2index) +``` + +**Аргументы** + +- `s2index` — [S2](#s2index) индекс. [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Возвращаемые значения** + +- Кортеж их двух значений: `tuple(lon,lat)`. + +Тип: `lon` — [Float64](../../../sql-reference/data-types/float.md). `lat` — [Float64](../../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +``` sql +SELECT s2ToGeo(4704772434919038107) AS s2Coodrinates; +``` + +Результат: + +``` text +┌─s2Coodrinates────────────────────────┐ +│ (37.79506681471008,55.7129059052841) │ +└──────────────────────────────────────┘ +``` + +## s2GetNeighbors {#s2getneighbors} + +Возвращает [S2](#s2index) индексы ячеек, которые являются соседними для заданного S2 индекса. Ячейка в системе S2 представляет собой прямоугольник, ограниченный четырьмя сторонами. Соответственно, у каждой ячейки есть 4 соседние ячейки. + +**Синтаксис** + +``` sql +s2GetNeighbors(s2index) +``` + +**Аргументы** + +- `s2index` — [S2](#s2index) индекс. [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Возвращаемые значения** + +- Массив, содержащий 4 значения — S2 индекса соседних ячеек: `array[s2index1, s2index3, s2index2, s2index4]`. + +Тип: [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Пример** + +Запрос: + +``` sql +SELECT s2GetNeighbors(5074766849661468672) AS s2Neighbors; +``` + +Результат: + +``` text +┌─s2Neighbors───────────────────────────────────────────────────────────────────────┐ +│ [5074766987100422144,5074766712222515200,5074767536856236032,5074767261978329088] │ +└───────────────────────────────────────────────────────────────────────────────────┘ +``` + +## s2CellsIntersect {#s2cellsintersect} + +Проверяет, пересекаются ли две заданные ячейки или нет. + +**Синтаксис** + +``` sql +s2CellsIntersect(s2index1, s2index2) +``` + +**Аргументы** + +- `siIndex1`, `s2index2` — S2 индексы первой и второй ячейки. [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Возвращаемые значения** + +- 1 — ячейки пересекаются. +- 0 — ячейки не пересекаются. + +Тип: [UInt8](../../../sql-reference/data-types/int-uint.md). + +**Пример** + +Запрос: + +``` sql +SELECT s2CellsIntersect(9926595209846587392, 9926594385212866560) AS intersect; +``` + +Результат: + +``` text +┌─intersect─┐ +│ 1 │ +└───────────┘ +``` + +## s2CapContains {#s2capcontains} + +Определяет, содержит ли заданный купол указанную точку. Купол представляет собой часть сферы, которая была отрезана плоскостью. Купол задается точкой на сфере и радиусом в градусах. + +**Синтаксис** + +``` sql +s2CapContains(center, degrees, point) +``` + +**Аргументы** + +- `center` — S2 индекс точки, определяющей центр купола. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `degrees` — радиус купола в градусах. [Float64](../../../sql-reference/data-types/float.md). +- `point` — S2 индекс проверяемой точки. [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Возвращаемые значения** + +- 1 — купол содержит точку. +- 0 — купол не содержит точку. + +Тип: [UInt8](../../../sql-reference/data-types/int-uint.md). + +**Пример** + +Запрос: + +``` sql +SELECT s2CapContains(1157339245694594829, 1.0, 1157347770437378819) AS capContains; +``` + +Результат: + +``` text +┌─capContains─┐ +│ 1 │ +└─────────────┘ +``` + +## s2CapUnion {#s2capunion} + +Определяет наименьший купол, содержащий два заданных купола. Купол представляет собой часть сферы, которая была отрезана плоскостью. Купол задается точкой на сфере и радиусом в градусах. + +**Синтаксис** + +``` sql +s2CapUnion(center1, radius1, center2, radius2) +``` + +**Аргументы** + +- `center1`, `center2` — S2 индексы точек, определяющие два центра куполов. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `radius1`, `radius2` — значения радиусов в градусах, определяющие два радиуса куполов. [Float64](../../../sql-reference/data-types/float.md). + +**Возвращаемые значения** + +- `center` — S2 индекс точки, соответствующий центру наименьшего купола, содержащего заданные купола. Тип: [UInt64](../../../sql-reference/data-types/int-uint.md). +- `radius` — радиус в градусах наименьшего купола, содержащего заданные купола. Тип: [Float64](../../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +``` sql +SELECT s2CapUnion(3814912406305146967, 1.0, 1157347770437378819, 1.0) AS capUnion; +``` + +Результат: + +``` text +┌─capUnion───────────────────────────────┐ +│ (4534655147792050737,60.2088283994957) │ +└────────────────────────────────────────┘ +``` + +## s2RectAdd {#s2rectadd} + +Увеличивает размер ограничивающего прямоугольника, чтобы включить в себя точку, заданную S2 индексом. В системе S2 прямоугольник представлен типом S2Region, называемым `S2LatLngRect`, который задает прямоугольник в пространстве широта-долгота. + +**Синтаксис** + +``` sql +s2RectAdd(s2pointLow, s2pointHigh, s2Point) +``` + +**Аргументы** + +- `s2PointLow` — S2 индекс нижней точки, которая задает ограничиваюший прямоугольник. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2PointHigh` — S2 индекс верхний точки, которая задает ограничиваюший прямоугольник. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2Point` — S2 индекс целевой точки, которая будет содержаться увеличенным ограничивающим прямоугольником. [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Возвращаемые значения** + +- `s2PointLow` — идентификатор нижней S2 ячейки, соответствующий увеличенному прямоугольнику. Тип: [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2PointHigh` — идентификатор верхней S2 ячейки, соответствующий увеличенному прямоугольнику. Тип: [UInt64](../../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +``` sql +SELECT s2RectAdd(5178914411069187297, 5177056748191934217, 5179056748191934217) AS rectAdd; +``` + +Результат: + +``` text +┌─rectAdd───────────────────────────────────┐ +│ (5179062030687166815,5177056748191934217) │ +└───────────────────────────────────────────┘ +``` + +## s2RectContains {#s2rectcontains} + +Проверяет, содержит ли заданный прямоугольник указанную S2 точку. В системе S2 прямоугольник представлен типом S2Region, называемым `S2LatLngRect`, который задает прямоугольник в пространстве широта-долгота. + +**Синтаксис** + +``` sql +s2RectContains(s2PointLow, s2PointHi, s2Point) +``` + +**Аргументы** + +- `s2PointLow` — S2 индекс самой низкой точки, которая задает прямоугольник. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2PointHigh` — S2 индекс самой высокой точки, которая задает прямоугольник. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2Point` — S2 индекс проверяемой точки. [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Возвращаемые значения** + +- 1 — прямоугольник содержит заданную точку. +- 0 — прямоугольник не содержит заданную точку. + +**Пример** + +Запрос: + +``` sql +SELECT s2RectContains(5179062030687166815, 5177056748191934217, 5177914411069187297) AS rectContains; +``` + +Результат: + +``` text +┌─rectContains─┐ +│ 0 │ +└──────────────┘ +``` + +## s2RectUinion {#s2rectunion} + +Возвращает наименьший прямоугольник, содержащий объединение двух заданных прямоугольников. В системе S2 прямоугольник представлен типом S2Region, называемым `S2LatLngRect`, который задает прямоугольник в пространстве широта-долгота. + +**Синтаксис** + +``` sql +s2RectUnion(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi) +``` + +**Аргументы** + +- `s2Rect1PointLow`, `s2Rect1PointHi` — значения S2 индекса для самой низкой и самой высокой точек, которые задают первый прямоугольник. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2Rect2PointLow`, `s2Rect2PointHi` — значения S2 индекса для самой низкой и самой высокой точек, которые задают второй прямоугольник. [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Возвращаемые значения** + +- `s2UnionRect2PointLow` — идентификатор нижней ячейки, соответствующей объединенному прямоугольнику. Тип: [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2UnionRect2PointHi` — идентификатор верхней ячейки, соответствующей объединенному прямоугольнику. Тип: [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Пример** + +Запрос: + +``` sql +SELECT s2RectUnion(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectUnion; +``` + +Результат: + +``` text +┌─rectUnion─────────────────────────────────┐ +│ (5179062030687166815,5177056748191934217) │ +└───────────────────────────────────────────┘ +``` + +## s2RectIntersection {#s2rectintersection} + +Возвращает наименьший прямоугольник, содержащий пересечение двух заданных прямоугольников. В системе S2 прямоугольник представлен типом S2Region, называемым `S2LatLngRect`, который задает прямоугольник в пространстве широта-долгота. + +**Синтаксис** + +``` sql +s2RectIntersection(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi) +``` + +**Аргументы** + +- `s2Rect1PointLow`, `s2Rect1PointHi` — значения S2 индекса для самой низкой и самой высокой точек, которые задают первый прямоугольник. [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2Rect2PointLow`, `s2Rect2PointHi` — значения S2 индекса для самой низкой и самой высокой точек, которые задают второй прямоугольник. [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Возвращаемые значения** + +- `s2UnionRect2PointLow` — идентификатор нижней ячейки, соответствующей результирующему прямоугольнику. Тип: [UInt64](../../../sql-reference/data-types/int-uint.md). +- `s2UnionRect2PointHi` — идентификатор верхней ячейки, соответствующей результирующему прямоугольнику. Тип: [UInt64](../../../sql-reference/data-types/int-uint.md). + +**Пример** + +Запрос: + +``` sql +SELECT s2RectIntersection(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectIntersection; +``` + +Результат: + +``` text +┌─rectIntersection──────────────────────────┐ +│ (5178914411069187297,5177056748191934217) │ +└───────────────────────────────────────────┘ +``` diff --git a/docs/ru/sql-reference/functions/json-functions.md b/docs/ru/sql-reference/functions/json-functions.md index d20d8cf5998..4df0f8633ce 100644 --- a/docs/ru/sql-reference/functions/json-functions.md +++ b/docs/ru/sql-reference/functions/json-functions.md @@ -307,6 +307,76 @@ SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello" └───────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` +## JSON_EXISTS(json, path) {#json-exists} + +Если значение существует в документе JSON, то возвращается 1. + +Если значение не существует, то возвращается 0. + +Пример: + +``` sql +SELECT JSON_EXISTS('{"hello":1}', '$.hello'); +SELECT JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world'); +SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[*]'); +SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[0]'); +``` + +!!! note "Примечание" + до версии 21.11 порядок аргументов функции был обратный, т.е. JSON_EXISTS(path, json) + +## JSON_QUERY(json, path) {#json-query} + +Парсит JSON и извлекает значение как JSON массив или JSON объект. + +Если значение не существует, то возвращается пустая строка. + +Пример: + +``` sql +SELECT JSON_QUERY('{"hello":"world"}', '$.hello'); +SELECT JSON_QUERY('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]'); +SELECT JSON_QUERY('{"hello":2}', '$.hello'); +SELECT toTypeName(JSON_QUERY('{"hello":2}', '$.hello')); +``` + +Результат: + +``` text +["world"] +[0, 1, 4, 0, -1, -4] +[2] +String +``` +!!! note "Примечание" + до версии 21.11 порядок аргументов функции был обратный, т.е. JSON_QUERY(path, json) + +## JSON_VALUE(json, path) {#json-value} + +Парсит JSON и извлекает значение как JSON скаляр. + +Если значение не существует, то возвращается пустая строка. + +Пример: + +``` sql +SELECT JSON_VALUE('{"hello":"world"}', '$.hello'); +SELECT JSON_VALUE('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]'); +SELECT JSON_VALUE('{"hello":2}', '$.hello'); +SELECT toTypeName(JSON_VALUE('{"hello":2}', '$.hello')); +``` + +Результат: + +``` text +"world" +0 +2 +String +``` + +!!! note "Примечание" + до версии 21.11 порядок аргументов функции был обратный, т.е. JSON_VALUE(path, json) ## toJSONString {#tojsonstring} diff --git a/docs/ru/sql-reference/functions/machine-learning-functions.md b/docs/ru/sql-reference/functions/machine-learning-functions.md index ce7d3cfd09e..fb8b872e0d0 100644 --- a/docs/ru/sql-reference/functions/machine-learning-functions.md +++ b/docs/ru/sql-reference/functions/machine-learning-functions.md @@ -15,81 +15,4 @@ toc_title: "Функции машинного обучения" ### Stochastic Logistic Regression {#stochastic-logistic-regression} -Агрегатная функция [stochasticLogisticRegression](../../sql-reference/functions/machine-learning-functions.md#agg_functions-stochasticlogisticregression) реализует стохастический градиентный спуск для задачи бинарной классификации. - -## bayesAB {#bayesab} - -Сравнивает тестовые группы (варианты) и для каждой группы рассчитывает вероятность того, что эта группа окажется лучшей. Первая из перечисленных групп считается контрольной. - -**Синтаксис** - -``` sql -bayesAB(distribution_name, higher_is_better, variant_names, x, y) -``` - -**Аргументы** - -- `distribution_name` — вероятностное распределение. [String](../../sql-reference/data-types/string.md). Возможные значения: - - - `beta` для [Бета-распределения](https://ru.wikipedia.org/wiki/Бета-распределение) - - `gamma` для [Гамма-распределения](https://ru.wikipedia.org/wiki/Гамма-распределение) - -- `higher_is_better` — способ определения предпочтений. [Boolean](../../sql-reference/data-types/boolean.md). Возможные значения: - - - `0` — чем меньше значение, тем лучше - - `1` — чем больше значение, тем лучше - -- `variant_names` — массив, содержащий названия вариантов. [Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md)). - -- `x` — массив, содержащий число проведенных тестов (испытаний) для каждого варианта. [Array](../../sql-reference/data-types/array.md)([Float64](../../sql-reference/data-types/float.md)). - -- `y` — массив, содержащий число успешных тестов (испытаний) для каждого варианта. [Array](../../sql-reference/data-types/array.md)([Float64](../../sql-reference/data-types/float.md)). - -!!! note "Замечание" - Все три массива должны иметь одинаковый размер. Все значения `x` и `y` должны быть неотрицательными числами (константами). Значение `y` не может превышать соответствующее значение `x`. - -**Возвращаемые значения** - -Для каждого варианта рассчитываются: -- `beats_control` — вероятность, что данный вариант превосходит контрольный в долгосрочной перспективе -- `to_be_best` — вероятность, что данный вариант является лучшим в долгосрочной перспективе - -Тип: JSON. - -**Пример** - -Запрос: - -``` sql -SELECT bayesAB('beta', 1, ['Control', 'A', 'B'], [3000., 3000., 3000.], [100., 90., 110.]) FORMAT PrettySpace; -``` - -Результат: - -``` text -{ - "data":[ - { - "variant_name":"Control", - "x":3000, - "y":100, - "beats_control":0, - "to_be_best":0.22619 - }, - { - "variant_name":"A", - "x":3000, - "y":90, - "beats_control":0.23469, - "to_be_best":0.04671 - }, - { - "variant_name":"B", - "x":3000, - "y":110, - "beats_control":0.7580899999999999, - "to_be_best":0.7271 - } - ] -} -``` +Агрегатная функция [stochasticLogisticRegression](../../sql-reference/functions/machine-learning-functions.md#agg_functions-stochasticlogisticregression) реализует стохастический градиентный спуск для задачи бинарной классификации. \ No newline at end of file diff --git a/docs/ru/sql-reference/functions/nlp-functions.md b/docs/ru/sql-reference/functions/nlp-functions.md index 58c4eb86e35..250403ab127 100644 --- a/docs/ru/sql-reference/functions/nlp-functions.md +++ b/docs/ru/sql-reference/functions/nlp-functions.md @@ -28,7 +28,7 @@ stem('language', word) Query: ``` sql -SELECT SELECT arrayMap(x -> stem('en', x), ['I', 'think', 'it', 'is', 'a', 'blessing', 'in', 'disguise']) as res; +SELECT arrayMap(x -> stem('en', x), ['I', 'think', 'it', 'is', 'a', 'blessing', 'in', 'disguise']) as res; ``` Result: diff --git a/docs/ru/sql-reference/functions/other-functions.md b/docs/ru/sql-reference/functions/other-functions.md index 925aac56968..7d2cea0af4e 100644 --- a/docs/ru/sql-reference/functions/other-functions.md +++ b/docs/ru/sql-reference/functions/other-functions.md @@ -2375,3 +2375,39 @@ shardCount() **См. также** - Пример использования функции [shardNum()](#shard-num) также содержит вызов `shardCount()`. + +## getOSKernelVersion {#getoskernelversion} + +Возвращает строку с текущей версией ядра ОС. + +**Синтаксис** + +``` sql +getOSKernelVersion() +``` + +**Аргументы** + +- Нет. + +**Возвращаемое значение** + +- Текущая версия ядра ОС. + +Тип: [String](../../sql-reference/data-types/string.md). + +**Пример** + +Запрос: + +``` sql +SELECT getOSKernelVersion(); +``` + +Результат: + +``` text +┌─getOSKernelVersion()────┐ +│ Linux 4.15.0-55-generic │ +└─────────────────────────┘ +``` diff --git a/docs/ru/sql-reference/functions/rounding-functions.md b/docs/ru/sql-reference/functions/rounding-functions.md index 1eede1ea57c..bcd47973a21 100644 --- a/docs/ru/sql-reference/functions/rounding-functions.md +++ b/docs/ru/sql-reference/functions/rounding-functions.md @@ -173,7 +173,7 @@ roundBankers(4.5) = 4 roundBankers(3.55, 1) = 3.6 roundBankers(3.65, 1) = 3.6 roundBankers(10.35, 1) = 10.4 -roundBankers(10.755, 2) = 11,76 +roundBankers(10.755, 2) = 10,76 ``` **Смотрите также** diff --git a/docs/ru/sql-reference/functions/splitting-merging-functions.md b/docs/ru/sql-reference/functions/splitting-merging-functions.md index efe74dba043..b3f91077dfa 100644 --- a/docs/ru/sql-reference/functions/splitting-merging-functions.md +++ b/docs/ru/sql-reference/functions/splitting-merging-functions.md @@ -212,8 +212,8 @@ SELECT splitByNonAlpha(' 1! a, b. '); ## arrayStringConcat(arr\[, separator\]) {#arraystringconcatarr-separator} -Склеивает строки, перечисленные в массиве, с разделителем separator. -separator - необязательный параметр, константная строка, по умолчанию равен пустой строке. +Склеивает строковые представления элементов массива с разделителем `separator`. +`separator` - необязательный параметр, константная строка, по умолчанию равен пустой строке. Возвращается строка. ## alphaTokens(s) {#alphatokenss} @@ -232,3 +232,70 @@ SELECT alphaTokens('abca1abc'); │ ['abca','abc'] │ └─────────────────────────┘ ``` + +## ngrams {#ngrams} + +Выделяет из UTF-8 строки отрезки (n-граммы) размером `ngramsize` символов. + +**Синтаксис** + +``` sql +ngrams(string, ngramsize) +``` + +**Аргументы** + +- `string` — строка. [String](../../sql-reference/data-types/string.md) or [FixedString](../../sql-reference/data-types/fixedstring.md). +- `ngramsize` — размер n-грамм. [UInt](../../sql-reference/data-types/int-uint.md). + +**Возвращаемые значения** + +- Массив с n-граммами. + +Тип: [Array](../../sql-reference/data-types/array.md)([FixedString](../../sql-reference/data-types/fixedstring.md)). + +**Пример** + +Запрос: + +``` sql +SELECT ngrams('ClickHouse', 3); +``` + +Результат: + +``` text +┌─ngrams('ClickHouse', 3)───────────────────────────┐ +│ ['Cli','lic','ick','ckH','kHo','Hou','ous','use'] │ +└───────────────────────────────────────────────────┘ +``` + +## tokens {#tokens} + +Разбивает строку на токены, используя в качестве разделителей не буквенно-цифровые символы ASCII. + +**Аргументы** + +- `input_string` — набор байтов. [String](../../sql-reference/data-types/string.md). + +**Возвращаемые значения** + +Возвращает массив токенов. + +Тип: [Array](../data-types/array.md). + +**Пример** + +Запрос: + +``` sql +SELECT tokens('test1,;\\ test2,;\\ test3,;\\ test4') AS tokens; +``` + +Результат: + +``` text +┌─tokens────────────────────────────┐ +│ ['test1','test2','test3','test4'] │ +└───────────────────────────────────┘ +``` diff --git a/docs/ru/sql-reference/functions/string-functions.md b/docs/ru/sql-reference/functions/string-functions.md index 95e265f0b54..10ecc6c0a83 100644 --- a/docs/ru/sql-reference/functions/string-functions.md +++ b/docs/ru/sql-reference/functions/string-functions.md @@ -781,6 +781,150 @@ SELECT normalizedQueryHash('SELECT 1 AS `xyz`') != normalizedQueryHash('SELECT 1 └─────┘ ``` +## normalizeUTF8NFC {#normalizeutf8nfc} + +Преобразует строку в нормализованную форму [NFC](https://ru.wikipedia.org/wiki/Юникод#Алгоритмы_нормализации), предполагая, что строка содержит набор байтов, составляющих текст в кодировке UTF-8. + +**Синтаксис** + +``` sql +normalizeUTF8NFC(words) +``` + +**Аргументы** + +- `words` — входная строка, которая содержит набор байтов, составляющих текст в кодировке UTF-8. [String](../../sql-reference/data-types/string.md). + +**Возвращаемое значение** + +- Строка, преобразованная в нормализированную форму NFC. + +Тип: [String](../../sql-reference/data-types/string.md). + +**Пример** + +Запрос: + +``` sql +SELECT length('â'), normalizeUTF8NFC('â') AS nfc, length(nfc) AS nfc_len; +``` + +Результат: + +``` text +┌─length('â')─┬─nfc─┬─nfc_len─┐ +│ 2 │ â │ 2 │ +└─────────────┴─────┴─────────┘ +``` + +## normalizeUTF8NFD {#normalizeutf8nfd} + +Преобразует строку в нормализованную форму [NFD](https://ru.wikipedia.org/wiki/Юникод#Алгоритмы_нормализации), предполагая, что строка содержит набор байтов, составляющих текст в кодировке UTF-8. + +**Синтаксис** + +``` sql +normalizeUTF8NFD(words) +``` + +**Аргументы** + +- `words` — входная строка, которая содержит набор байтов, составляющих текст в кодировке UTF-8. [String](../../sql-reference/data-types/string.md). + +**Возвращаемое значение** + +- Строка, преобразованная в нормализированную форму NFD. + +Тип: [String](../../sql-reference/data-types/string.md). + +**Пример** + +Запрос: + +``` sql +SELECT length('â'), normalizeUTF8NFD('â') AS nfd, length(nfd) AS nfd_len; +``` + +Результат: + +``` text +┌─length('â')─┬─nfd─┬─nfd_len─┐ +│ 2 │ â │ 3 │ +└─────────────┴─────┴─────────┘ +``` + +## normalizeUTF8NFKC {#normalizeutf8nfkc} + +Преобразует строку в нормализованную форму [NFKC](https://ru.wikipedia.org/wiki/Юникод#Алгоритмы_нормализации), предполагая, что строка содержит набор байтов, составляющих текст в кодировке UTF-8. + +**Синтаксис** + +``` sql +normalizeUTF8NFKC(words) +``` + +**Аргументы** + +- `words` — входная строка, которая содержит набор байтов, составляющих текст в кодировке UTF-8. [String](../../sql-reference/data-types/string.md). + +**Возвращаемое значение** + +- Строка, преобразованная в нормализированную форму NFKC. + +Тип: [String](../../sql-reference/data-types/string.md). + +**Пример** + +Запрос: + +``` sql +SELECT length('â'), normalizeUTF8NFKC('â') AS nfkc, length(nfkc) AS nfkc_len; +``` + +Результат: + +``` text +┌─length('â')─┬─nfkc─┬─nfkc_len─┐ +│ 2 │ â │ 2 │ +└─────────────┴──────┴──────────┘ +``` + +## normalizeUTF8NFKD {#normalizeutf8nfkd} + +Преобразует строку в нормализованную форму [NFKD](https://ru.wikipedia.org/wiki/Юникод#Алгоритмы_нормализации), предполагая, что строка содержит набор байтов, составляющих текст в кодировке UTF-8. + +**Синтаксис** + +``` sql +normalizeUTF8NFKD(words) +``` + +**Аргументы** + +- `words` — входная строка, которая содержит набор байтов, составляющих текст в кодировке UTF-8. [String](../../sql-reference/data-types/string.md). + +**Возвращаемое значение** + +- Строка, преобразованная в нормализированную форму NFKD. + +Тип: [String](../../sql-reference/data-types/string.md). + +**Пример** + +Запрос: + +``` sql +SELECT length('â'), normalizeUTF8NFKD('â') AS nfkd, length(nfkd) AS nfkd_len; +``` + +Результат: + +``` text +┌─length('â')─┬─nfkd─┬─nfkd_len─┐ +│ 2 │ â │ 3 │ +└─────────────┴──────┴──────────┘ +``` + ## encodeXMLComponent {#encode-xml-component} Экранирует символы для размещения строки в текстовом узле или атрибуте XML. diff --git a/docs/ru/sql-reference/functions/tuple-functions.md b/docs/ru/sql-reference/functions/tuple-functions.md index 381743a450b..006557d859f 100644 --- a/docs/ru/sql-reference/functions/tuple-functions.md +++ b/docs/ru/sql-reference/functions/tuple-functions.md @@ -163,3 +163,878 @@ SELECT tupleHammingDistance(wordShingleMinHash(string), wordShingleMinHashCaseIn │ 2 │ └─────────────────┘ ``` + +## tupleToNameValuePairs {#tupletonamevaluepairs} + +Приводит именованный кортеж к списку пар (имя, значение). Для `Tuple(a T, b T, ..., c T)` возвращает `Array(Tuple(String, T), ...)`, где `Strings` — это названия именованных полей, а `T` — это соответствующие значения. Все значения в кортеже должны быть одинакового типа. + +**Синтаксис** + +``` sql +tupleToNameValuePairs(tuple) +``` + +**Аргументы** + +- `tuple` — именованный кортеж. [Tuple](../../sql-reference/data-types/tuple.md) с любым типом значений. + +**Возвращаемое значение** + +- Список пар (имя, значение). + +Тип: [Array](../../sql-reference/data-types/array.md)([Tuple](../../sql-reference/data-types/tuple.md)([String](../../sql-reference/data-types/string.md), ...)). + +**Пример** + +Запрос: + +``` sql +CREATE TABLE tupletest (`col` Tuple(user_ID UInt64, session_ID UInt64) ENGINE = Memory; + +INSERT INTO tupletest VALUES (tuple( 100, 2502)), (tuple(1,100)); + +SELECT tupleToNameValuePairs(col) FROM tupletest; +``` + +Результат: + +``` text +┌─tupleToNameValuePairs(col)────────────┐ +│ [('user_ID',100),('session_ID',2502)] │ +│ [('user_ID',1),('session_ID',100)] │ +└───────────────────────────────────────┘ +``` + +С помощью этой функции можно выводить столбцы в виде строк: + +``` sql +CREATE TABLE tupletest (`col` Tuple(CPU Float64, Memory Float64, Disk Float64)) ENGINE = Memory; + +INSERT INTO tupletest VALUES(tuple(3.3, 5.5, 6.6)); + +SELECT arrayJoin(tupleToNameValuePairs(col))FROM tupletest; +``` + +Результат: + +``` text +┌─arrayJoin(tupleToNameValuePairs(col))─┐ +│ ('CPU',3.3) │ +│ ('Memory',5.5) │ +│ ('Disk',6.6) │ +└───────────────────────────────────────┘ +``` + +Если в функцию передается обычный кортеж, ClickHouse использует индексы значений в качестве имен: + +``` sql +SELECT tupleToNameValuePairs(tuple(3, 2, 1)); +``` + +Результат: + +``` text +┌─tupleToNameValuePairs(tuple(3, 2, 1))─┐ +│ [('1',3),('2',2),('3',1)] │ +└───────────────────────────────────────┘ + +## tuplePlus {#tupleplus} + +Вычисляет сумму соответствующих значений двух кортежей одинакового размера. + +**Синтаксис** + +```sql +tuplePlus(tuple1, tuple2) +``` + +Синоним: `vectorSum`. + +**Аргументы** + +- `tuple1` — первый кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — второй кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Кортеж с суммами. + +Тип: [Tuple](../../sql-reference/data-types/tuple.md). + +**Пример** + +Запрос: + +```sql +SELECT tuplePlus((1, 2), (2, 3)); +``` + +Результат: + +```text +┌─tuplePlus((1, 2), (2, 3))─┐ +│ (3,5) │ +└───────────────────────────┘ +``` + +## tupleMinus {#tupleminus} + +Вычисляет разность соответствующих значений двух кортежей одинакового размера. + +**Синтаксис** + +```sql +tupleMinus(tuple1, tuple2) +``` + +Синоним: `vectorDifference`. + +**Аргументы** + +- `tuple1` — первый кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — второй кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Кортеж с разностями. + +Тип: [Tuple](../../sql-reference/data-types/tuple.md). + +**Пример** + +Запрос: + +```sql +SELECT tupleMinus((1, 2), (2, 3)); +``` + +Результат: + +```text +┌─tupleMinus((1, 2), (2, 3))─┐ +│ (-1,-1) │ +└────────────────────────────┘ +``` + +## tupleMultiply {#tuplemultiply} + +Вычисляет произведение соответствующих значений двух кортежей одинакового размера. + +**Синтаксис** + +```sql +tupleMultiply(tuple1, tuple2) +``` + +**Аргументы** + +- `tuple1` — первый кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — второй кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Кортеж с произведениями. + +Тип: [Tuple](../../sql-reference/data-types/tuple.md). + +**Пример** + +Запрос: + +```sql +SELECT tupleMultiply((1, 2), (2, 3)); +``` + +Результат: + +```text +┌─tupleMultiply((1, 2), (2, 3))─┐ +│ (2,6) │ +└───────────────────────────────┘ +``` + +## tupleDivide {#tupledivide} + +Вычисляет частное соответствующих значений двух кортежей одинакового размера. Обратите внимание, что при делении на ноль возвращается значение `inf`. + +**Синтаксис** + +```sql +tupleDivide(tuple1, tuple2) +``` + +**Аргументы** + +- `tuple1` — первый кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — второй кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Кортеж с частными. + +Тип: [Tuple](../../sql-reference/data-types/tuple.md). + +**Пример** + +Запрос: + +```sql +SELECT tupleDivide((1, 2), (2, 3)); +``` + +Результат: + +```text +┌─tupleDivide((1, 2), (2, 3))─┐ +│ (0.5,0.6666666666666666) │ +└─────────────────────────────┘ +``` + +## tupleNegate {#tuplenegate} + +Применяет отрицание ко всем значениям кортежа. + +**Синтаксис** + +```sql +tupleNegate(tuple) +``` + +**Аргументы** + +- `tuple` — кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Кортеж с результатом отрицания. + +Тип: [Tuple](../../sql-reference/data-types/tuple.md). + +**Пример** + +Запрос: + +```sql +SELECT tupleNegate((1, 2)); +``` + +Результат: + +```text +┌─tupleNegate((1, 2))─┐ +│ (-1,-2) │ +└─────────────────────┘ +``` + +## tupleMultiplyByNumber {#tuplemultiplybynumber} + +Возвращает кортеж, в котором значения всех элементов умножены на заданное число. + +**Синтаксис** + +```sql +tupleMultiplyByNumber(tuple, number) +``` + +**Аргументы** + +- `tuple` — кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `number` — множитель. [Int/UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) или [Decimal](../../sql-reference/data-types/decimal.md). + +**Возвращаемое значение** + +- Кортеж с результатами умножения на число. + +Тип: [Tuple](../../sql-reference/data-types/tuple.md). + +**Пример** + +Запрос: + +```sql +SELECT tupleMultiplyByNumber((1, 2), -2.1); +``` + +Результат: + +```text +┌─tupleMultiplyByNumber((1, 2), -2.1)─┐ +│ (-2.1,-4.2) │ +└─────────────────────────────────────┘ +``` + +## tupleDivideByNumber {#tupledividebynumber} + +Возвращает кортеж, в котором значения всех элементов поделены на заданное число. Обратите внимание, что при делении на ноль возвращается значение `inf`. + +**Синтаксис** + +```sql +tupleDivideByNumber(tuple, number) +``` + +**Аргументы** + +- `tuple` — кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `number` — делитель. [Int/UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) or [Decimal](../../sql-reference/data-types/decimal.md). + +**Возвращаемое значение** + +- Кортеж с результатами деления на число. + +Тип: [Tuple](../../sql-reference/data-types/tuple.md). + +**Пример** + +Запрос: + +```sql +SELECT tupleDivideByNumber((1, 2), 0.5); +``` + +Результат: + +```text +┌─tupleDivideByNumber((1, 2), 0.5)─┐ +│ (2,4) │ +└──────────────────────────────────┘ +``` + +## dotProduct {#dotproduct} + +Вычисляет скалярное произведение двух кортежей одинакового размера. + +**Синтаксис** + +```sql +dotProduct(tuple1, tuple2) +``` + +Синоним: `scalarProduct`. + +**Аргументы** + +- `tuple1` — первый кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — второй кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Скалярное произведение. + +Тип: [Int/UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) или [Decimal](../../sql-reference/data-types/decimal.md). + +**Пример** + +Запрос: + +```sql +SELECT dotProduct((1, 2), (2, 3)); +``` + +Результат: + +```text +┌─dotProduct((1, 2), (2, 3))─┐ +│ 8 │ +└────────────────────────────┘ +``` + +## L1Norm {#l1norm} + +Вычисляет сумму абсолютных значений кортежа. + +**Синтаксис** + +```sql +L1Norm(tuple) +``` + +Синоним: `normL1`. + +**Аргументы** + +- `tuple` — кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- L1-норма или [расстояние городских кварталов](https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%B3%D0%BE%D1%80%D0%BE%D0%B4%D1%81%D0%BA%D0%B8%D1%85_%D0%BA%D0%B2%D0%B0%D1%80%D1%82%D0%B0%D0%BB%D0%BE%D0%B2). + +Тип: [UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) или [Decimal](../../sql-reference/data-types/decimal.md). + +**Пример** + +Запрос: + +```sql +SELECT L1Norm((1, 2)); +``` + +Результат: + +```text +┌─L1Norm((1, 2))─┐ +│ 3 │ +└────────────────┘ +``` + +## L2Norm {#l2norm} + +Вычисляет квадратный корень из суммы квадратов значений кортежа. + +**Синтаксис** + +```sql +L2Norm(tuple) +``` + +Синоним: `normL2`. + +**Аргументы** + +- `tuple` — кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- L2-норма или [Евклидово расстояние](https://ru.wikipedia.org/wiki/%D0%95%D0%B2%D0%BA%D0%BB%D0%B8%D0%B4%D0%BE%D0%B2%D0%B0_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA%D0%B0). + +Тип: [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT L2Norm((1, 2)); +``` + +Результат: + +```text +┌───L2Norm((1, 2))─┐ +│ 2.23606797749979 │ +└──────────────────┘ +``` + +## LinfNorm {#linfnorm} + +Вычисляет максимум из абсолютных значений кортежа. + +**Синтаксис** + +```sql +LinfNorm(tuple) +``` + +Синоним: `normLinf`. + +**Аргументы** + +- `tuple` — кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Linf-норма или максимальное абсолютное значение. + +Тип: [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT LinfNorm((1, -2)); +``` + +Результат: + +```text +┌─LinfNorm((1, -2))─┐ +│ 2 │ +└───────────────────┘ +``` + +## LpNorm {#lpnorm} + +Возвращает корень степени `p` из суммы абсолютных значений кортежа, возведенных в степень `p`. + +**Синтаксис** + +```sql +LpNorm(tuple, p) +``` + +Синоним: `normLp`. + +**Аргументы** + +- `tuple` — кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `p` — степень. Возможные значение: любое число из промежутка [1;inf). [UInt](../../sql-reference/data-types/int-uint.md) или [Float](../../sql-reference/data-types/float.md). + +**Возвращаемое значение** + +- [Lp-норма](https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)#%D0%9D%D0%B5%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5_%D0%B2%D0%B8%D0%B4%D1%8B_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BD%D0%BE%D1%80%D0%BC) + +Тип: [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT LpNorm((1, -2),2); +``` + +Результат: + +```text +┌─LpNorm((1, -2), 2)─┐ +│ 2.23606797749979 │ +└────────────────────┘ +``` + +## L1Distance {#l1distance} + +Вычисляет расстояние между двумя точками (значения кортежей — координаты точек) в пространстве `L1` ([расстояние городских кварталов](https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%B3%D0%BE%D1%80%D0%BE%D0%B4%D1%81%D0%BA%D0%B8%D1%85_%D0%BA%D0%B2%D0%B0%D1%80%D1%82%D0%B0%D0%BB%D0%BE%D0%B2)). + +**Синтаксис** + +```sql +L1Distance(tuple1, tuple2) +``` + +Синоним: `distanceL1`. + +**Аргументы** + +- `tuple1` — первый кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — второй кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Расстояние в норме L1. + +Тип: [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT L1Distance((1, 2), (2, 3)); +``` + +Результат: + +```text +┌─L1Distance((1, 2), (2, 3))─┐ +│ 2 │ +└────────────────────────────┘ +``` + +## L2Distance {#l2distance} + +Вычисляет расстояние между двумя точками (значения кортежей — координаты точек) в пространстве `L2` ([Евклидово расстояние](https://ru.wikipedia.org/wiki/%D0%95%D0%B2%D0%BA%D0%BB%D0%B8%D0%B4%D0%BE%D0%B2%D0%B0_%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA%D0%B0)). + +**Синтаксис** + +```sql +L2Distance(tuple1, tuple2) +``` + +Синоним: `distanceL2`. + +**Аргументы** + +- `tuple1` — первый кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — второй кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Расстояние в норме L2. + +Тип: [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT L2Distance((1, 2), (2, 3)); +``` + +Результат: + +```text +┌─L2Distance((1, 2), (2, 3))─┐ +│ 1.4142135623730951 │ +└────────────────────────────┘ +``` + +## LinfDistance {#linfdistance} + +Вычисляет расстояние между двумя точками (значения кортежей — координаты точек) в пространстве [`L_{inf}`](https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)#%D0%9D%D0%B5%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5_%D0%B2%D0%B8%D0%B4%D1%8B_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BD%D0%BE%D1%80%D0%BC). + +**Синтаксис** + +```sql +LinfDistance(tuple1, tuple2) +``` + +Синоним: `distanceLinf`. + +**Аргументы** + +- `tuple1` — первый кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — второй кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемые значения** + +- Расстояние в норме Linf. + +Тип: [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT LinfDistance((1, 2), (2, 3)); +``` + +Результат: + +```text +┌─LinfDistance((1, 2), (2, 3))─┐ +│ 1 │ +└──────────────────────────────┘ +``` + +## LpDistance {#lpdistance} + +Вычисляет расстояние между двумя точками (значения кортежей — координаты точек) в пространстве [`Lp`](https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)#%D0%9D%D0%B5%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5_%D0%B2%D0%B8%D0%B4%D1%8B_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BD%D0%BE%D1%80%D0%BC). + +**Синтаксис** + +```sql +LpDistance(tuple1, tuple2, p) +``` + +Синоним: `distanceLp`. + +**Аргументы** + +- `tuple1` — первый кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — второй кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `p` — степень. Возможные значение: любое число из промежутка [1;inf). [UInt](../../sql-reference/data-types/int-uint.md) или [Float](../../sql-reference/data-types/float.md). + +**Возвращаемое значение** + +- Расстояние в норме Lp. + +Тип: [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT LpDistance((1, 2), (2, 3), 3); +``` + +Результат: + +```text +┌─LpDistance((1, 2), (2, 3), 3)─┐ +│ 1.2599210498948732 │ +└───────────────────────────────┘ +``` + +## L1Normalize {#l1normalize} + +Вычисляет единичный вектор для исходного вектора (значения кортежа — координаты вектора) в пространстве `L1` ([расстояние городских кварталов](https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%B3%D0%BE%D1%80%D0%BE%D0%B4%D1%81%D0%BA%D0%B8%D1%85_%D0%BA%D0%B2%D0%B0%D1%80%D1%82%D0%B0%D0%BB%D0%BE%D0%B2)). + +**Синтаксис** + +```sql +L1Normalize(tuple) +``` + +Синоним: `normalizeL1`. + +**Аргументы** + +- `tuple` — [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Единичный вектор. + +Тип: кортеж [Tuple](../../sql-reference/data-types/tuple.md) значений [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT L1Normalize((1, 2)); +``` + +Результат: + +```text +┌─L1Normalize((1, 2))─────────────────────┐ +│ (0.3333333333333333,0.6666666666666666) │ +└─────────────────────────────────────────┘ +``` + +## L2Normalize {#l2normalize} + +Вычисляет единичный вектор для исходного вектора (значения кортежа — координаты вектора) в пространстве `L2` ([Евклидово пространство](https://ru.wikipedia.org/wiki/%D0%95%D0%B2%D0%BA%D0%BB%D0%B8%D0%B4%D0%BE%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%BE). + +**Синтаксис** + +```sql +L2Normalize(tuple) +``` + +Синоним: `normalizeL1`. + +**Аргументы** + +- `tuple` — кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Единичный вектор. + +Тип: кортеж [Tuple](../../sql-reference/data-types/tuple.md) значений [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT L2Normalize((3, 4)); +``` + +Результат: + +```text +┌─L2Normalize((3, 4))─┐ +│ (0.6,0.8) │ +└─────────────────────┘ +``` + +## LinfNormalize {#linfnormalize} + +Вычисляет единичный вектор для исходного вектора (значения кортежа — координаты вектора) в пространстве [`L_{inf}`](https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)#%D0%9D%D0%B5%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5_%D0%B2%D0%B8%D0%B4%D1%8B_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BD%D0%BE%D1%80%D0%BC). + +**Синтаксис** + +```sql +LinfNormalize(tuple) +``` + +Синоним: `normalizeLinf `. + +**Аргументы** + +- `tuple` — кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемое значение** + +- Единичный вектор. + +Тип: кортеж [Tuple](../../sql-reference/data-types/tuple.md) значений [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT LinfNormalize((3, 4)); +``` + +Результат: + +```text +┌─LinfNormalize((3, 4))─┐ +│ (0.75,1) │ +└───────────────────────┘ +``` + +## LpNormalize {#lpnormalize} + +Вычисляет единичный вектор для исходного вектора (значения кортежа — координаты вектора) в пространстве [`Lp`](https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)#%D0%9D%D0%B5%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5_%D0%B2%D0%B8%D0%B4%D1%8B_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BD%D0%BE%D1%80%D0%BC). + +**Синтаксис** + +```sql +LpNormalize(tuple, p) +``` + +Синоним: `normalizeLp `. + +**Аргументы** + +- `tuple` — кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `p` — степень. Возможные значение: любое число из промежутка [1;inf). [UInt](../../sql-reference/data-types/int-uint.md) или [Float](../../sql-reference/data-types/float.md). + +**Возвращаемое значение** + +- Единичный вектор. + +Тип: кортеж [Tuple](../../sql-reference/data-types/tuple.md) значений [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT LpNormalize((3, 4),5); +``` + +Результат: + +```text +┌─LpNormalize((3, 4), 5)──────────────────┐ +│ (0.7187302630182624,0.9583070173576831) │ +└─────────────────────────────────────────┘ +``` + +## cosineDistance {#cosinedistance} + +Вычисляет косинусную разницу двух векторов (значения кортежей — координаты векторов). Чем меньше возвращаемое значение, тем больше сходство между векторами. + +**Синтаксис** + +```sql +cosineDistance(tuple1, tuple2) +``` + +**Аргументы** + +- `tuple1` — первый кортеж. [Tuple](../../sql-reference/data-types/tuple.md). +- `tuple2` — второй кортеж. [Tuple](../../sql-reference/data-types/tuple.md). + +**Возвращаемые значения** + +- Разность между единицей и косинуса угла между векторами. + +Тип: [Float](../../sql-reference/data-types/float.md). + +**Пример** + +Запрос: + +```sql +SELECT cosineDistance((1, 2), (2, 3)); +``` + +Результат: + +```text +┌─cosineDistance((1, 2), (2, 3))─┐ +│ 0.007722123286332261 │ +└────────────────────────────────┘ +``` diff --git a/docs/ru/sql-reference/functions/tuple-map-functions.md b/docs/ru/sql-reference/functions/tuple-map-functions.md index e4cc1fefab4..45a5018500f 100644 --- a/docs/ru/sql-reference/functions/tuple-map-functions.md +++ b/docs/ru/sql-reference/functions/tuple-map-functions.md @@ -108,7 +108,7 @@ SELECT mapAdd(([toUInt8(1), 2], [1, 1]), ([toUInt8(1), 2], [1, 1])) as res, toTy SELECT mapAdd(map(1,1), map(1,1)); ``` -Result: +Результат: ```text ┌─mapAdd(map(1, 1), map(1, 1))─┐ @@ -128,13 +128,13 @@ mapSubtract(Tuple(Array, Array), Tuple(Array, Array) [, ...]) **Аргументы** -Аргументами являются [кортежи](../../sql-reference/data-types/tuple.md#tuplet1-t2) из двух [массивов](../../sql-reference/data-types/array.md#data-type-array), где элементы в первом массиве представляют ключи, а второй массив содержит значения для каждого ключа. +Аргументами являются контейнеры [Map](../../sql-reference/data-types/map.md) или [кортежи](../../sql-reference/data-types/tuple.md#tuplet1-t2) из двух [массивов](../../sql-reference/data-types/array.md#data-type-array), где элементы в первом массиве представляют ключи, а второй массив содержит значения для каждого ключа. Все массивы ключей должны иметь один и тот же тип, а все массивы значений должны содержать элементы, которые можно приводить к одному типу ([Int64](../../sql-reference/data-types/int-uint.md#int-ranges), [UInt64](../../sql-reference/data-types/int-uint.md#uint-ranges) или [Float64](../../sql-reference/data-types/float.md#float32-float64)). Общий приведенный тип используется в качестве типа для результирующего массива. **Возвращаемое значение** -- Возвращает один [tuple](../../sql-reference/data-types/tuple.md#tuplet1-t2), в котором первый массив содержит отсортированные ключи, а второй - значения. +- В зависимости от аргумента возвращает один [Map](../../sql-reference/data-types/map.md) или [кортеж](../../sql-reference/data-types/tuple.md#tuplet1-t2), в котором первый массив содержит отсортированные ключи, а второй — значения. **Пример** @@ -152,6 +152,20 @@ SELECT mapSubtract(([toUInt8(1), 2], [toInt32(1), 1]), ([toUInt8(1), 2], [toInt3 └────────────────┴───────────────────────────────────┘ ``` +Запрос с контейнером `Map`: + +```sql +SELECT mapSubtract(map(1,1), map(1,1)); +``` + +Результат: + +```text +┌─mapSubtract(map(1, 1), map(1, 1))─┐ +│ {1:0} │ +└───────────────────────────────────┘ +``` + ## mapPopulateSeries {#function-mappopulateseries} Заполняет недостающие ключи в контейнере map (пара массивов ключей и значений), где ключи являются целыми числами. Кроме того, он поддерживает указание максимального ключа, который используется для расширения массива ключей. @@ -160,6 +174,7 @@ SELECT mapSubtract(([toUInt8(1), 2], [toInt32(1), 1]), ([toUInt8(1), 2], [toInt3 ``` sql mapPopulateSeries(keys, values[, max]) +mapPopulateSeries(map[, max]) ``` Генерирует контейнер map, где ключи - это серия чисел, от минимального до максимального ключа (или аргумент `max`, если он указан), взятых из массива `keys` с размером шага один, и соответствующие значения, взятые из массива `values`. Если значение не указано для ключа, то в результирующем контейнере используется значение по умолчанию. @@ -168,19 +183,28 @@ mapPopulateSeries(keys, values[, max]) **Аргументы** -- `keys` — массив ключей [Array](../../sql-reference/data-types/array.md#data-type-array)([Int](../../sql-reference/data-types/int-uint.md#int-ranges)). +Аргументами являются контейнер [Map](../../sql-reference/data-types/map.md) или два [массива](../../sql-reference/data-types/array.md#data-type-array), где первый массив представляет ключи, а второй массив содержит значения для каждого ключа. + +Сопоставленные массивы: + +- `keys` — массив ключей. [Array](../../sql-reference/data-types/array.md#data-type-array)([Int](../../sql-reference/data-types/int-uint.md#int-ranges)). - `values` — массив значений. [Array](../../sql-reference/data-types/array.md#data-type-array)([Int](../../sql-reference/data-types/int-uint.md#int-ranges)). +- `max` — максимальное значение ключа. Необязательный параметр. [Int8, Int16, Int32, Int64, Int128, Int256](../../sql-reference/data-types/int-uint.md#int-ranges). + +или + +- `map` — контейнер `Map` с целочисленными ключами. [Map](../../sql-reference/data-types/map.md). **Возвращаемое значение** -- Возвращает [кортеж](../../sql-reference/data-types/tuple.md#tuplet1-t2) из двух [массивов](../../sql-reference/data-types/array.md#data-type-array): ключи отсортированные по порядку и значения соответствующих ключей. +- В зависимости от аргумента возвращает контейнер [Map](../../sql-reference/data-types/map.md) или [кортеж](../../sql-reference/data-types/tuple.md#tuplet1-t2) из двух [массивов](../../sql-reference/data-types/array.md#data-type-array): ключи отсортированные по порядку и значения соответствующих ключей. **Пример** -Запрос: +Запрос с сопоставленными массивами: ```sql -select mapPopulateSeries([1,2,4], [11,22,44], 5) as res, toTypeName(res) as type; +SELECT mapPopulateSeries([1,2,4], [11,22,44], 5) AS res, toTypeName(res) AS type; ``` Результат: @@ -191,6 +215,20 @@ select mapPopulateSeries([1,2,4], [11,22,44], 5) as res, toTypeName(res) as type └──────────────────────────────┴───────────────────────────────────┘ ``` +Запрос с контейнером `Map`: + +```sql +SELECT mapPopulateSeries(map(1, 10, 5, 20), 6); +``` + +Результат: + +```text +┌─mapPopulateSeries(map(1, 10, 5, 20), 6)─┐ +│ {1:10,2:0,3:0,4:0,5:20,6:0} │ +└─────────────────────────────────────────┘ +``` + ## mapContains {#mapcontains} Определяет, содержит ли контейнер `map` ключ `key`. @@ -319,4 +357,3 @@ SELECT mapValues(a) FROM test; │ ['twelve','6.0'] │ └──────────────────┘ ``` - diff --git a/docs/ru/sql-reference/operators/index.md b/docs/ru/sql-reference/operators/index.md index 98f6873f712..0041be745fc 100644 --- a/docs/ru/sql-reference/operators/index.md +++ b/docs/ru/sql-reference/operators/index.md @@ -18,20 +18,30 @@ toc_title: "Операторы" `-a` - функция `negate(a)`. +Для чисел в кортеже также может быть использована [tupleNegate](../../sql-reference/functions/tuple-functions.md#tuplenegate). + ## Операторы умножения и деления {#operatory-umnozheniia-i-deleniia} `a * b` - функция `multiply(a, b)` +Для умножения кортежа на число также может быть использована [tupleMultiplyByNumber](../../sql-reference/functions/tuple-functions.md#tuplemultiplybynumber), для скалярного произведения: [dotProduct](../../sql-reference/functions/tuple-functions.md#dotproduct). + `a / b` - функция `divide(a, b)` +Для деления кортежа на число также может быть использована [tupleDivideByNumber](../../sql-reference/functions/tuple-functions.md#tupledividebynumber). + `a % b` - функция `modulo(a, b)` ## Операторы сложения и вычитания {#operatory-slozheniia-i-vychitaniia} `a + b` - функция `plus(a, b)` +Для сложения кортежей также может быть использована [tuplePlus](../../sql-reference/functions/tuple-functions.md#tupleplus). + `a - b` - функция `minus(a, b)` +Для вычитания кортежей также может быть использована [tupleMinus](../../sql-reference/functions/tuple-functions.md#tupleminus). + ## Операторы сравнения {#operatory-sravneniia} `a = b` - функция `equals(a, b)` @@ -72,6 +82,53 @@ toc_title: "Операторы" `a GLOBAL NOT IN ...` - функция `globalNotIn(a, b)` +`a = ANY (subquery)` – функция `in(a, subquery)`. + +`a != ANY (subquery)` – равнозначно `a NOT IN (SELECT singleValueOrNull(*) FROM subquery)`. + +`a = ALL (subquery)` – равнозначно `a IN (SELECT singleValueOrNull(*) FROM subquery)`. + +`a != ALL (subquery)` – функция `notIn(a, subquery)`. + + +**Примеры** + +Запрос с ALL: + +``` sql +SELECT number AS a FROM numbers(10) WHERE a > ALL (SELECT number FROM numbers(3, 3)); +``` + +Результат: + +``` text +┌─a─┐ +│ 6 │ +│ 7 │ +│ 8 │ +│ 9 │ +└───┘ +``` + +Запрос с ANY: + +``` sql +SELECT number AS a FROM numbers(10) WHERE a > ANY (SELECT number FROM numbers(3, 3)); +``` + +Результат: + +``` text +┌─a─┐ +│ 4 │ +│ 5 │ +│ 6 │ +│ 7 │ +│ 8 │ +│ 9 │ +└───┘ +``` + ## Оператор для работы с датами и временем {#operators-datetime} ### EXTRACT {#extract} diff --git a/docs/ru/sql-reference/statements/alter/projection.md b/docs/ru/sql-reference/statements/alter/projection.md index 4b0d7f7865b..fa5f517594c 100644 --- a/docs/ru/sql-reference/statements/alter/projection.md +++ b/docs/ru/sql-reference/statements/alter/projection.md @@ -7,7 +7,7 @@ toc_title: PROJECTION Доступны следующие операции с [проекциями](../../../engines/table-engines/mergetree-family/mergetree.md#projections): -- `ALTER TABLE [db].name ADD PROJECTION name AS SELECT [GROUP BY] [ORDER BY]` — добавляет описание проекции в метаданные. +- `ALTER TABLE [db].name ADD PROJECTION name ( SELECT [GROUP BY] [ORDER BY] )` — добавляет описание проекции в метаданные. - `ALTER TABLE [db].name DROP PROJECTION name` — удаляет описание проекции из метаданных и удаляет файлы проекции с диска. diff --git a/docs/ru/sql-reference/statements/create/database.md b/docs/ru/sql-reference/statements/create/database.md index 7d19f3e8f17..b697f4caada 100644 --- a/docs/ru/sql-reference/statements/create/database.md +++ b/docs/ru/sql-reference/statements/create/database.md @@ -8,27 +8,51 @@ toc_title: "База данных" Создает базу данных. ``` sql -CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)] +CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)] [COMMENT 'Comment'] ``` -### Секции {#sektsii} +## Секции {#clauses} -- `IF NOT EXISTS` +### IF NOT EXISTS {#if-not-exists} - Если база данных с именем `db_name` уже существует, то ClickHouse не создаёт базу данных и: - - Не генерирует исключение, если секция указана. - - Генерирует исключение, если секция не указана. +Если база данных с именем `db_name` уже существует, то ClickHouse не создает базу данных и: -- `ON CLUSTER` +- Не генерирует исключение, если секция указана. +- Генерирует исключение, если секция не указана. - ClickHouse создаёт базу данных `db_name` на всех серверах указанного кластера. +### ON CLUSTER {#on-cluster} -- `ENGINE` +ClickHouse создаёт базу данных с именем `db_name` на всех серверах указанного кластера. Более подробную информацию смотрите в разделе [Распределенные DDL запросы](../../../sql-reference/distributed-ddl.md). - - MySQL +### ENGINE {#engine} - Позволяет получать данные с удаленного сервера MySQL. +По умолчанию ClickHouse использует собственный движок баз данных [Atomic](../../../engines/database-engines/atomic.md). Есть также движки баз данных [Lazy](../../../engines/database-engines/lazy.md), [MySQL](../../../engines/database-engines/mysql.md), [PostgresSQL](../../../engines/database-engines/postgresql.md), [MaterializedMySQL](../../../engines/database-engines/materialized-mysql.md), [MaterializedPostgreSQL](../../../engines/database-engines/materialized-postgresql.md), [Replicated](../../../engines/database-engines/replicated.md), [SQLite](../../../engines/database-engines/sqlite.md). - По умолчанию ClickHouse использует собственный движок баз данных. +### COMMENT {#comment} - +Вы можете добавить комментарий к базе данных при ее создании. + +Комментарий поддерживается для всех движков баз данных. + +**Синтаксис** + +``` sql +CREATE DATABASE db_name ENGINE = engine(...) COMMENT 'Comment' +``` + +**Пример** + +Запрос: + +``` sql +CREATE DATABASE db_comment ENGINE = Memory COMMENT 'The temporary database'; +SELECT name, comment FROM system.databases WHERE name = 'db_comment'; +``` + +Результат: + +```text +┌─name───────┬─comment────────────────┐ +│ db_comment │ The temporary database │ +└────────────┴────────────────────────┘ +``` diff --git a/docs/ru/sql-reference/statements/create/dictionary.md b/docs/ru/sql-reference/statements/create/dictionary.md index a41b2cb9ad5..25546549feb 100644 --- a/docs/ru/sql-reference/statements/create/dictionary.md +++ b/docs/ru/sql-reference/statements/create/dictionary.md @@ -8,10 +8,10 @@ toc_title: "Словарь" ``` sql CREATE DICTIONARY [IF NOT EXISTS] [db.]dictionary_name [ON CLUSTER cluster] ( - key1 type1 [DEFAULT|EXPRESSION expr1] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID], - key2 type2 [DEFAULT|EXPRESSION expr2] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID], - attr1 type2 [DEFAULT|EXPRESSION expr3], - attr2 type2 [DEFAULT|EXPRESSION expr4] + key1 type1 [DEFAULT|EXPRESSION expr1] [IS_OBJECT_ID], + key2 type2 [DEFAULT|EXPRESSION expr2], + attr1 type2 [DEFAULT|EXPRESSION expr3] [HIERARCHICAL|INJECTIVE], + attr2 type2 [DEFAULT|EXPRESSION expr4] [HIERARCHICAL|INJECTIVE] ) PRIMARY KEY key1, key2 SOURCE(SOURCE_NAME([param1 value1 ... paramN valueN])) diff --git a/docs/ru/sql-reference/statements/create/user.md b/docs/ru/sql-reference/statements/create/user.md index 22efaa71bfc..f6248d97ba9 100644 --- a/docs/ru/sql-reference/statements/create/user.md +++ b/docs/ru/sql-reference/statements/create/user.md @@ -15,6 +15,7 @@ CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [ON CLUSTER cluster_name1] [NOT IDENTIFIED | IDENTIFIED {[WITH {no_password | plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']}] [HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE] [DEFAULT ROLE role [,...]] + [DEFAULT DATABASE database | NONE] [GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]] [SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY | WRITABLE] | PROFILE 'profile_name'] [,...] ``` diff --git a/docs/ru/sql-reference/statements/describe-table.md b/docs/ru/sql-reference/statements/describe-table.md index c66dbb66521..56c778f7c76 100644 --- a/docs/ru/sql-reference/statements/describe-table.md +++ b/docs/ru/sql-reference/statements/describe-table.md @@ -3,21 +3,66 @@ toc_priority: 42 toc_title: DESCRIBE --- -# DESCRIBE TABLE Statement {#misc-describe-table} +# DESCRIBE TABLE {#misc-describe-table} + +Возвращает описание столбцов таблицы. + +**Синтаксис** ``` sql DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format] ``` -Возвращает описание столбцов таблицы. +Запрос `DESCRIBE` для каждого столбца таблицы возвращает строку со следующими значениями типа [String](../../sql-reference/data-types/string.md): -Результат запроса содержит столбцы (все столбцы имеют тип String): - -- `name` — имя столбца таблицы; -- `type`— тип столбца; -- `default_type` — в каком виде задано [выражение для значения по умолчанию](../../sql-reference/statements/create/table.md#create-default-values): `DEFAULT`, `MATERIALIZED` или `ALIAS`. Столбец содержит пустую строку, если значение по умолчанию не задано. +- `name` — имя столбца; +- `type` — тип столбца; +- `default_type` — вид [выражения для значения по умолчанию](../../sql-reference/statements/create/table.md#create-default-values): `DEFAULT`, `MATERIALIZED` или `ALIAS`. Если значение по умолчанию не задано, то возвращается пустая строка; - `default_expression` — значение, заданное в секции `DEFAULT`; -- `comment_expression` — комментарий к столбцу. +- `comment` — [комментарий](../../sql-reference/statements/alter/column.md#alter_comment-column); +- `codec_expression` — [кодек](../../sql-reference/statements/create/table.md#codecs), который применяется к столбцу; +- `ttl_expression` — выражение [TTL](../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-ttl); +- `is_subcolumn` — флаг, который равен `1` для внутренних подстолбцов. Он появляется в результате, только если описание подстолбцов разрешено настройкой [describe_include_subcolumns](../../operations/settings/settings.md#describe_include_subcolumns). -Вложенные структуры данных выводятся в «развёрнутом» виде. То есть, каждый столбец - по отдельности, с именем через точку. +Каждый столбец [Nested](../../sql-reference/data-types/nested-data-structures/nested.md) структур описывается отдельно. Перед его именем ставится имя родительского столбца с точкой. +Чтобы отобразить внутренние подстолбцы других типов данных, нужно включить настройку [describe_include_subcolumns](../../operations/settings/settings.md#describe_include_subcolumns). +**Пример** + +Запрос: + +``` sql +CREATE TABLE describe_example ( + id UInt64, text String DEFAULT 'unknown' CODEC(ZSTD), + user Tuple (name String, age UInt8) +) ENGINE = MergeTree() ORDER BY id; + +DESCRIBE TABLE describe_example; +DESCRIBE TABLE describe_example SETTINGS describe_include_subcolumns=1; +``` + +Результат: + +``` text +┌─name─┬─type──────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐ +│ id │ UInt64 │ │ │ │ │ │ +│ text │ String │ DEFAULT │ 'unknown' │ │ ZSTD(1) │ │ +│ user │ Tuple(name String, age UInt8) │ │ │ │ │ │ +└──────┴───────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘ +``` + +Второй запрос дополнительно выводит информацию о подстолбцах: + +``` text +┌─name──────┬─type──────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┬─is_subcolumn─┐ +│ id │ UInt64 │ │ │ │ │ │ 0 │ +│ text │ String │ DEFAULT │ 'unknown' │ │ ZSTD(1) │ │ 0 │ +│ user │ Tuple(name String, age UInt8) │ │ │ │ │ │ 0 │ +│ user.name │ String │ │ │ │ │ │ 1 │ +│ user.age │ UInt8 │ │ │ │ │ │ 1 │ +└───────────┴───────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┴──────────────┘ +``` + +**См. также** + +- настройка [describe_include_subcolumns](../../operations/settings/settings.md#describe_include_subcolumns). diff --git a/docs/ru/sql-reference/statements/insert-into.md b/docs/ru/sql-reference/statements/insert-into.md index da9f3a11101..baa4d83626d 100644 --- a/docs/ru/sql-reference/statements/insert-into.md +++ b/docs/ru/sql-reference/statements/insert-into.md @@ -121,3 +121,14 @@ INSERT INTO [db.]table [(c1, c2, c3)] SELECT ... - Данные поступают в режиме реального времени. - Вы загружаете данные, которые как правило отсортированы по времени. +Также возможно вставлять данные асинхронно во множественных маленьких вставках. Данные от таких вставок сначала собираются в пачки, а потом вставляются в таблицу. Чтобы включить асинхронный режим, используйте настройку [async_insert](../../operations/settings/settings.md#async-insert). Обратите внимание, что асинхронные вставки поддерживаются только через протокол HTTP, а дедупликация при этом не производится. + +**См. также** + +- [async_insert](../../operations/settings/settings.md#async-insert) +- [async_insert_threads](../../operations/settings/settings.md#async-insert-threads) +- [wait_for_async_insert](../../operations/settings/settings.md#wait-for-async-insert) +- [wait_for_async_insert_timeout](../../operations/settings/settings.md#wait-for-async-insert-timeout) +- [async_insert_max_data_size](../../operations/settings/settings.md#async-insert-max-data-size) +- [async_insert_busy_timeout_ms](../../operations/settings/settings.md#async-insert-busy-timeout-ms) +- [async_insert_stale_timeout_ms](../../operations/settings/settings.md#async-insert-stale-timeout-ms) diff --git a/docs/ru/sql-reference/statements/select/except.md b/docs/ru/sql-reference/statements/select/except.md new file mode 100644 index 00000000000..eb4986aceea --- /dev/null +++ b/docs/ru/sql-reference/statements/select/except.md @@ -0,0 +1,69 @@ +--- +toc_title: EXCEPT +--- + +# Секция EXCEPT {#except-clause} + +`EXCEPT` возвращает только те строки, которые являются результатом первого запроса без результатов второго. В запросах количество, порядок следования и типы столбцов должны совпадать. Результат `EXCEPT` может содержать повторяющиеся строки. + +Если используется несколько `EXCEPT`, и в выражении не указаны скобки, `EXCEPT` выполняется по порядку слева направо. `EXCEPT` имеет такой же приоритет выполнения, как `UNION`, и приоритет ниже, чем у `INTERSECT`. + +``` sql +SELECT column1 [, column2 ] +FROM table1 +[WHERE condition] + +EXCEPT + +SELECT column1 [, column2 ] +FROM table2 +[WHERE condition] + +``` +Условие в секции `WHERE` может быть любым в зависимости от ваших требований. + +**Примеры** + +Запрос: + +``` sql +SELECT number FROM numbers(1,10) EXCEPT SELECT number FROM numbers(3,6); +``` + +Результат: + +``` text +┌─number─┐ +│ 1 │ +│ 2 │ +│ 9 │ +│ 10 │ +└────────┘ +``` + +Запрос: + +``` sql +CREATE TABLE t1(one String, two String, three String) ENGINE=Memory(); +CREATE TABLE t2(four String, five String, six String) ENGINE=Memory(); + +INSERT INTO t1 VALUES ('q', 'm', 'b'), ('s', 'd', 'f'), ('l', 'p', 'o'), ('s', 'd', 'f'), ('s', 'd', 'f'), ('k', 't', 'd'), ('l', 'p', 'o'); +INSERT INTO t2 VALUES ('q', 'm', 'b'), ('b', 'd', 'k'), ('s', 'y', 't'), ('s', 'd', 'f'), ('m', 'f', 'o'), ('k', 'k', 'd'); + +SELECT * FROM t1 EXCEPT SELECT * FROM t2; +``` + +Результат: + +``` text +┌─one─┬─two─┬─three─┐ +│ l │ p │ o │ +│ k │ t │ d │ +│ l │ p │ o │ +└─────┴─────┴───────┘ +``` + +**См. также** + +- [UNION](union.md#union-clause) +- [INTERSECT](intersect.md#intersect-clause) \ No newline at end of file diff --git a/docs/ru/sql-reference/statements/select/index.md b/docs/ru/sql-reference/statements/select/index.md index ffaae74b1d9..42490a6c2f7 100644 --- a/docs/ru/sql-reference/statements/select/index.md +++ b/docs/ru/sql-reference/statements/select/index.md @@ -45,8 +45,10 @@ SELECT [DISTINCT [ON (column1, column2, ...)]] expr_list - [Секция LIMIT BY](limit-by.md) - [Секция HAVING](having.md) - [Секция LIMIT](limit.md) - [Секция OFFSET](offset.md) +- [Секция OFFSET](offset.md) - [Секция UNION ALL](union.md) +- [Секция INTERSECT](intersect.md) +- [Секция EXCEPT](except.md) - [Секция INTO OUTFILE](into-outfile.md) - [Секция FORMAT](format.md) diff --git a/docs/ru/sql-reference/statements/select/intersect.md b/docs/ru/sql-reference/statements/select/intersect.md new file mode 100644 index 00000000000..2206b141472 --- /dev/null +++ b/docs/ru/sql-reference/statements/select/intersect.md @@ -0,0 +1,73 @@ +--- +toc_title: INTERSECT +--- + +# Секция INTERSECT {#intersect-clause} + +`INTERSECT` возвращает строки, которые есть только в результатах первого и второго запросов. В запросах должны совпадать количество столбцов, их порядок и тип. Результат `INTERSECT` может содержать повторяющиеся строки. + +Если используется несколько `INTERSECT` и скобки не указаны, пересечение выполняется слева направо. У `INTERSECT` более высокий приоритет выполнения, чем у `UNION` и `EXCEPT`. + + +``` sql +SELECT column1 [, column2 ] +FROM table1 +[WHERE condition] + +INTERSECT + +SELECT column1 [, column2 ] +FROM table2 +[WHERE condition] + +``` +Условие может быть любым в зависимости от ваших требований. + +**Примеры** + +Запрос: + +``` sql +SELECT number FROM numbers(1,10) INTERSECT SELECT number FROM numbers(3,6); +``` + +Результат: + +``` text +┌─number─┐ +│ 3 │ +│ 4 │ +│ 5 │ +│ 6 │ +│ 7 │ +│ 8 │ +└────────┘ +``` + +Запрос: + +``` sql +CREATE TABLE t1(one String, two String, three String) ENGINE=Memory(); +CREATE TABLE t2(four String, five String, six String) ENGINE=Memory(); + +INSERT INTO t1 VALUES ('q', 'm', 'b'), ('s', 'd', 'f'), ('l', 'p', 'o'), ('s', 'd', 'f'), ('s', 'd', 'f'), ('k', 't', 'd'), ('l', 'p', 'o'); +INSERT INTO t2 VALUES ('q', 'm', 'b'), ('b', 'd', 'k'), ('s', 'y', 't'), ('s', 'd', 'f'), ('m', 'f', 'o'), ('k', 'k', 'd'); + +SELECT * FROM t1 INTERSECT SELECT * FROM t2; +``` + +Результат: + +``` text +┌─one─┬─two─┬─three─┐ +│ q │ m │ b │ +│ s │ d │ f │ +│ s │ d │ f │ +│ s │ d │ f │ +└─────┴─────┴───────┘ +``` + +**См. также** + +- [UNION](union.md#union-clause) +- [EXCEPT](except.md#except-clause) diff --git a/docs/ru/sql-reference/statements/select/prewhere.md b/docs/ru/sql-reference/statements/select/prewhere.md index 4376cbeb295..4a04a56b47d 100644 --- a/docs/ru/sql-reference/statements/select/prewhere.md +++ b/docs/ru/sql-reference/statements/select/prewhere.md @@ -6,7 +6,7 @@ toc_title: PREWHERE Prewhere — это оптимизация для более эффективного применения фильтрации. Она включена по умолчанию, даже если секция `PREWHERE` явно не указана. В этом случае работает автоматическое перемещение части выражения из [WHERE](where.md) до стадии prewhere. Роль секции `PREWHERE` только для управления этой оптимизацией, если вы думаете, что знаете, как сделать перемещение условия лучше, чем это происходит по умолчанию. -При оптимизации prewhere сначала читываются только те столбцы, которые необходимы для выполнения выражения prewhere. Затем читаются другие столбцы, необходимые для выполнения остальной части запроса, но только те блоки, в которых находится выражение prewhere «верно» по крайней мере для некоторых рядов. Если есть много блоков, где выражение prewhere «ложно» для всех строк и для выражения prewhere требуется меньше столбцов, чем для других частей запроса, это часто позволяет считывать гораздо меньше данных с диска для выполнения запроса. +При оптимизации prewhere сначала читаются только те столбцы, которые необходимы для выполнения выражения prewhere. Затем читаются другие столбцы, необходимые для выполнения остальной части запроса, но только те блоки, в которых находится выражение prewhere «верно» по крайней мере для некоторых рядов. Если есть много блоков, где выражение prewhere «ложно» для всех строк и для выражения prewhere требуется меньше столбцов, чем для других частей запроса, это часто позволяет считывать гораздо меньше данных с диска для выполнения запроса. ## Управление PREWHERE вручную {#controlling-prewhere-manually} diff --git a/docs/tools/release.sh b/docs/tools/release.sh index a7b51174fdb..09044d690a1 100755 --- a/docs/tools/release.sh +++ b/docs/tools/release.sh @@ -37,11 +37,14 @@ then # Sometimes it does not work with error message "! [remote rejected] master -> master (cannot lock ref 'refs/heads/master': is at 42a0f6b6b6c7be56a469441b4bf29685c1cebac3 but expected 520e9b02c0d4678a2a5f41d2f561e6532fb98cc1)" for _ in {1..10}; do git push --force origin master && break; sleep 5; done + # Turn off logging. + set +x + if [[ ! -z "${CLOUDFLARE_TOKEN}" ]] then sleep 1m # https://api.cloudflare.com/#zone-purge-files-by-cache-tags,-host-or-prefix - POST_DATA='{"hosts":["content.clickhouse.com"]}' + POST_DATA='{"hosts":["clickhouse.com"]}' curl -X POST "https://api.cloudflare.com/client/v4/zones/4fc6fb1d46e87851605aa7fa69ca6fe0/purge_cache" -H "Authorization: Bearer ${CLOUDFLARE_TOKEN}" -H "Content-Type:application/json" --data "${POST_DATA}" fi fi diff --git a/docs/zh/development/continuous-integration.md b/docs/zh/development/continuous-integration.md deleted file mode 120000 index f68058a436e..00000000000 --- a/docs/zh/development/continuous-integration.md +++ /dev/null @@ -1 +0,0 @@ -../../en/development/continuous-integration.md \ No newline at end of file diff --git a/docs/zh/development/continuous-integration.md b/docs/zh/development/continuous-integration.md new file mode 100644 index 00000000000..6cff83067de --- /dev/null +++ b/docs/zh/development/continuous-integration.md @@ -0,0 +1,155 @@ +# 持续集成检查 {#continuous-integration-checks} +当你提交一个pull请求时, ClickHouse[持续集成(CI)系统](https://clickhouse.com/docs/en/development/tests/#test-automation)会对您的代码运行一些自动检查. + +这在存储库维护者(来自ClickHouse团队的人)筛选了您的代码并将可测试标签添加到您的pull请求之后发生. + +检查的结果被列在[GitHub检查文档](https://docs.github.com/en/github/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks)中所述的GitHub pull请求页面. + +如果检查失败,您可能被要求去修复它. 该界面介绍了您可能遇到的检查,以及如何修复它们. + +如果检查失败看起来与您的更改无关, 那么它可能是一些暂时的故障或基础设施问题. 向pull请求推一个空的commit以重新启动CI检查: + +``` +git reset +git commit --allow-empty +git push +``` + +如果您不确定要做什么,可以向维护人员寻求帮助. + +## 与Master合并 {#merge-with-master} +验证PR是否可以合并到master. 如果没有, 它将失败并显示消息'Cannot fetch mergecommit'的.请按[GitHub文档](https://docs.github.com/en/github/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-on-github)中描述的冲突解决, 或使用git将主分支合并到您的pull请求分支来修复这个检查. + +## 文档检查 {#docs-check} +尝试构建ClickHouse文档网站. 如果您更改了文档中的某些内容, 它可能会失败. 最可能的原因是文档中的某些交叉链接是错误的. 转到检查报告并查找`ERROR`和`WARNING`消息. + +### 报告详情 {#report-details} +- [状态页示例](https://clickhouse-test-reports.s3.yandex.net/12550/eabcc293eb02214caa6826b7c15f101643f67a6b/docs_check.html) +- `docs_output.txt`包含构建日志信息. [成功结果案例](https://clickhouse-test-reports.s3.yandex.net/12550/eabcc293eb02214caa6826b7c15f101643f67a6b/docs_check/docs_output.txt) + +## 描述信息检查 {#description-check} +检查pull请求的描述是否符合[PULL_REQUEST_TEMPLATE.md](https://github.com/ClickHouse/ClickHouse/blob/master/.github/PULL_REQUEST_TEMPLATE.md)模板. + +您必须为您的更改指定一个更改日志类别(例如,Bug修复), 并且为[CHANGELOG.md](../whats-new/changelog/)编写一条用户可读的消息用来描述更改. + +## 推送到DockerHub {#push-to-dockerhub} +生成用于构建和测试的docker映像, 然后将它们推送到DockerHub. + +## 标记检查 {#marker-check} +该检查意味着CI系统已经开始处理PR.当它处于'待处理'状态时,意味着尚未开始所有检查. 启动所有检查后,状态更改为'成功'. + +# 格式检查 {#style-check} +使用`utils/check-style/check-style`二进制文件执行一些简单的基于正则表达式的代码样式检查(注意, 它可以在本地运行). +如果失败, 按照[代码样式指南](./style.md)修复样式错误. + +### 报告详情 {#report-details} +- [状态页示例](https://clickhouse-test-reports.s3.yandex.net/12550/659c78c7abb56141723af6a81bfae39335aa8cb2/style_check.html) +- `docs_output.txt`记录了查结果错误(无效表格等), 空白页表示没有错误. [成功结果案例](https://clickhouse-test-reports.s3.yandex.net/12550/659c78c7abb56141723af6a81bfae39335aa8cb2/style_check/output.txt) + +### PVS 检查 {#pvs-check} +使用静态分析工具[PVS-studio](https://www.viva64.com/en/pvs-studio/)检查代码. 查看报告以查看确切的错误.如果可以则修复它们, 如果不行, 可以向ClickHouse的维护人员寻求帮忙. + +### 报告详情 {#report-details} +- [状态页示例](https://clickhouse-test-reports.s3.yandex.net/12550/67d716b5cc3987801996c31a67b31bf141bc3486/pvs_check.html) +- `test_run.txt.out.log`包含构建和分析日志文件.它只包含解析或未找到的错误. +- `HTML report`包含分析结果.有关说明请访问PVS的[官方网站](https://www.viva64.com/en/m/0036/#ID14E9A2B2CD) + +## 快速测试 {#fast-test} +通常情况下这是PR运行的第一个检查.它构建ClickHouse以及大多数无状态运行测试, 其中省略了一些.如果失败,在修复之前不会开始进一步的检查. 查看报告以了解哪些测试失败, 然后按照[此处](./tests.md#functional-test-locally)描述的在本地重现失败. + +### 报告详情 {#report-details} +[状态页示例](https://clickhouse-test-reports.s3.yandex.net/12550/67d716b5cc3987801996c31a67b31bf141bc3486/fast_test.html) + +#### 状态页文件 {#status-page-files} +- `runlog.out.log` 是包含所有其他日志的通用日志. +- `test_log.txt` +- `submodule_log.txt` 包含关于克隆和检查所需子模块的消息. +- `stderr.log` +- `stdout.log` +- `clickhouse-server.log` +- `clone_log.txt` +- `install_log.txt` +- `clickhouse-server.err.log` +- `build_log.txt` +- `cmake_log.txt` 包含关于C/C++和Linux标志检查的消息. + +#### 状态页列信息 {#status-page-columns} +- 测试名称 -- 包含测试的名称(不带路径, 例如, 所有类型的测试将被剥离到该名称). +- 测试状态 -- 跳过、成功或失败之一. +- 测试时间, 秒. -- 这个测试是空的. + +## 建构检查 {#build-check} +在各种配置中构建ClickHouse, 以便在后续步骤中使用. 您必须修复失败的构建.构建日志通常有足够的信息来修复错误, 但是您可能必须在本地重现故障. `cmake`选项可以在构建日志中通过grep `cmake`操作找到.使用这些选项并遵循[一般的构建过程](./build.md). + +### 报告详情 {#report-details} +[状态页示例](https://clickhouse-builds.s3.yandex.net/12550/67d716b5cc3987801996c31a67b31bf141bc3486/clickhouse_build_check/report.html) +- **Compiler**: `gcc-9` 或 `clang-10` (或其他架构的`clang-10-xx`, 比如`clang-10-freebsd`). +- **Build type**: `Debug` or `RelWithDebInfo` (cmake). +- **Sanitizer**: `none` (without sanitizers), `address` (ASan), `memory` (MSan), `undefined` (UBSan), or `thread` (TSan). +- **Bundled**: `bundled` 构建使用来自 `contrib` 库, 而 `unbundled` 构建使用系统库. +- **Splitted**: `splitted` is a [split build](https://clickhouse.com/docs/en/development/build/#split-build) +- **Status**: `成功` 或 `失败` +- **Build log**: 链接到构建和文件复制日志, 当构建失败时很有用. +- **Build time**. +- **Artifacts**: 构建结果文件 (`XXX`是服务器版本, 比如`20.8.1.4344`). + - `clickhouse-client_XXX_all.deb` + -` clickhouse-common-static-dbg_XXX[+asan, +msan, +ubsan, +tsan]_amd64.deb` + - `clickhouse-common-staticXXX_amd64.deb` + - `clickhouse-server_XXX_all.deb` + - `clickhouse-test_XXX_all.deb` + - `clickhouse_XXX_amd64.buildinfo` + - `clickhouse_XXX_amd64.changes` + - `clickhouse`: Main built binary. + - `clickhouse-odbc-bridge` + - `unit_tests_dbms`: 带有 ClickHouse 单元测试的 GoogleTest 二进制文件. + - `shared_build.tgz`: 使用共享库构建. + - `performance.tgz`: 用于性能测试的特殊包. + +## 特殊构建检查 {#special-buildcheck} +使用clang-tidy执行静态分析和代码样式检查. 该报告类似于构建检查. 修复在构建日志中发现的错误. + +## 功能无状态测试 {#functional-stateless-tests} +为构建在不同配置中的ClickHouse二进制文件运行[无状态功能测试](./tests.md#functional-tests)——发布、调试、使用杀毒软件等.通过报告查看哪些测试失败,然后按照[此处](./tests.md#functional-test-locally)描述的在本地重现失败.注意, 您必须使用正确的构建配置来重现——在AddressSanitizer下测试可能失败,但在Debug中可以通过.从[CI构建检查页面](./build.md#you-dont-have-to-build-clickhouse)下载二进制文件, 或者在本地构建它. + +## 功能有状态测试 {#functional-stateful-tests} +运行[有状态功能测试](./tests.md#functional-tests).以无状态功能测试相同的方式对待它们.不同之处在于它们需要从[Yandex.Metrica数据集](https://clickhouse.com/docs/en/getting-started/example-datasets/metrica/)的`hits`和`visits`表来运行. + +## 集成测试 {#integration-tests} +运行[集成测试](./tests.md#integration-tests). + +## Testflows 检查{#testflows-check} +使用Testflows测试系统去运行一些测试, 在[此处](https://github.com/ClickHouse/ClickHouse/tree/master/tests/testflows#running-tests-locally)查看如何在本地运行它们. + +## 压力测试 {#stress-test} +从多个客户端并发运行无状态功能测试, 用以检测与并发相关的错误.如果失败: +``` +* Fix all other test failures first; +* Look at the report to find the server logs and check them for possible causes + of error. +``` + +## 冒烟测试 {#split-build-smoke-test} +检查[拆分构建](./build.md#split-build)配置中的服务器构建是否可以启动并运行简单查询.如果失败: +``` +* Fix other test errors first; +* Build the server in [split build](./build.md#split-build) configuration + locally and check whether it can start and run `select 1`. +``` + +## 兼容性检查 {#compatibility-check} +检查`clickhouse`二进制文件是否可以在带有旧libc版本的发行版上运行.如果失败, 请向维护人员寻求帮助. + +## AST模糊器 {#ast-fuzzer} +运行随机生成的查询来捕获程序错误.如果失败, 请向维护人员寻求帮助. + +## 性能测试 {#performance-tests} +测量查询性能的变化. 这是最长的检查, 只需不到 6 小时即可运行.性能测试报告在[此处](https://github.com/ClickHouse/ClickHouse/tree/master/docker/test/performance-comparison#how-to-read-the-report)有详细描述. + +## 质量保证 {#qa} +什么是状态页面上的任务(专用网络)项目? + +它是 Yandex 内部工作系统的链接. Yandex 员工可以看到检查的开始时间及其更详细的状态. + +运行测试的地方 + +Yandex 内部基础设施的某个地方. diff --git a/docs/zh/interfaces/formats.md b/docs/zh/interfaces/formats.md index 85af2abda6b..b579d57c634 100644 --- a/docs/zh/interfaces/formats.md +++ b/docs/zh/interfaces/formats.md @@ -685,7 +685,7 @@ CREATE TABLE IF NOT EXISTS example_table - 如果`input_format_defaults_for_omitted_fields = 1`, 那么`x`的默认值为`0`,但`a`的默认值为`x * 2`。 !!! note "注意" -当使用`insert_sample_with_metadata = 1`插入数据时,与使用`insert_sample_with_metadata = 0`相比,ClickHouse消耗更多的计算资源。 +当使用`input_format_defaults_for_omitted_fields = 1`插入数据时,与使用`input_format_defaults_for_omitted_fields = 0`相比,ClickHouse消耗更多的计算资源。 ### Selecting Data {#selecting-data} diff --git a/docs/zh/operations/configuration-files.md b/docs/zh/operations/configuration-files.md index da76a3588e3..7998baafb6c 100644 --- a/docs/zh/operations/configuration-files.md +++ b/docs/zh/operations/configuration-files.md @@ -3,7 +3,7 @@ ClickHouse支持多配置文件管理。主配置文件是`/etc/clickhouse-server/config.xml`。其余文件须在目录`/etc/clickhouse-server/config.d`。 !!! 注意: - 所有配置文件必须是XML格式。此外,配置文件须有相同的跟元素,通常是``。 + 所有配置文件必须是XML格式。此外,配置文件须有相同的跟元素,通常是``。 主配置文件中的一些配置可以通过`replace`或`remove`属性被配置文件覆盖。 @@ -26,7 +26,7 @@ $ cat /etc/clickhouse-server/users.d/alice.xml ``` ``` xml - + analytics @@ -37,7 +37,7 @@ $ cat /etc/clickhouse-server/users.d/alice.xml analytics - + ``` 对于每个配置文件,服务器还会在启动时生成 `file-preprocessed.xml` 文件。这些文件包含所有已完成的替换和复盖,并且它们旨在提供信息。如果zookeeper替换在配置文件中使用,但ZooKeeper在服务器启动时不可用,则服务器将从预处理的文件中加载配置。 diff --git a/docs/zh/operations/external-authenticators/kerberos.md b/docs/zh/operations/external-authenticators/kerberos.md deleted file mode 120000 index b5a4d557de4..00000000000 --- a/docs/zh/operations/external-authenticators/kerberos.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/external-authenticators/kerberos.md \ No newline at end of file diff --git a/docs/zh/operations/external-authenticators/kerberos.md b/docs/zh/operations/external-authenticators/kerberos.md new file mode 100644 index 00000000000..5d2122c5fea --- /dev/null +++ b/docs/zh/operations/external-authenticators/kerberos.md @@ -0,0 +1,105 @@ +# Kerberos认证 {#external-authenticators-kerberos} +现有正确配置的 ClickHouse 用户可以通过 Kerberos 身份验证协议进行身份验证. + +目前, Kerberos 只能用作现有用户的外部身份验证器,这些用户在 `users.xml` 或本地访问控制路径中定义. +这些用户只能使用 HTTP 请求, 并且必须能够使用 GSS-SPNEGO 机制进行身份验证. + +对于这种方法, 必须在系统中配置 Kerberos, 且必须在 ClickHouse 配置中启用. + +## 开启Kerberos {#enabling-kerberos-in-clickHouse} +要启用 Kerberos, 应该在 `config.xml` 中包含 `kerberos` 部分. 此部分可能包含其他参数. + +#### 参数: {#parameters} +- `principal` - 将在接受安全上下文时获取和使用的规范服务主体名称. +- 此参数是可选的, 如果省略, 将使用默认主体. + +- `realm` - 一个领域, 用于将身份验证限制为仅那些发起者领域与其匹配的请求. + +- 此参数是可选的,如果省略,则不会应用其他领域的过滤. + +示例 (进入 `config.xml`): +```xml + + + + +``` + +主体规范: +```xml + + + + HTTP/clickhouse.example.com@EXAMPLE.COM + + +``` + +按领域过滤: +```xml + + + + EXAMPLE.COM + + +``` + +!!! warning "注意" + +您只能定义一个 `kerberos` 部分. 多个 `kerberos` 部分的存在将强制 ClickHouse 禁用 Kerberos 身份验证. + +!!! warning "注意" + +`主体`和`领域`部分不能同时指定. `主体`和`领域`的出现将迫使ClickHouse禁用Kerberos身份验证. + +## Kerberos作为现有用户的外部身份验证器 {#kerberos-as-an-external-authenticator-for-existing-users} +Kerberos可以用作验证本地定义用户(在`users.xml`或本地访问控制路径中定义的用户)身份的方法。目前,**只有**通过HTTP接口的请求才能被认证(通过GSS-SPNEGO机制). + +Kerberos主体名称格式通常遵循以下模式: +- *primary/instance@REALM* + +*/instance* 部分可能出现零次或多次. **发起者的规范主体名称的主要部分应与被认证用户名匹配, 以便身份验证成功**. + +### `users.xml`中启用Kerberos {#enabling-kerberos-in-users-xml} +为了启用用户的 Kerberos 身份验证, 请在用户定义中指定 `kerberos` 部分而不是`密码`或类似部分. + +参数: +- `realm` - 用于将身份验证限制为仅那些发起者的领域与其匹配的请求的领域. +- 此参数是可选的, 如果省略, 则不会应用其他按领域的过滤. + +示例 (进入 `users.xml`): +``` + + + + + + + + EXAMPLE.COM + + + + +``` + +!!! warning "警告" + +注意, Kerberos身份验证不能与任何其他身份验证机制一起使用. 任何其他部分(如`密码`和`kerberos`)的出现都会迫使ClickHouse关闭. + +!!! info "提醒" + +请注意, 现在, 一旦用户 `my_user` 使用 `kerberos`, 必须在主 `config.xml` 文件中启用 Kerberos,如前所述. + +### 使用 SQL 启用 Kerberos {#enabling-kerberos-using-sql} +在 ClickHouse 中启用 [SQL 驱动的访问控制和帐户管理](https://clickhouse.com/docs/en/operations/access-rights/#access-control)后, 也可以使用 SQL 语句创建由 Kerberos 识别的用户. + +```sql +CREATE USER my_user IDENTIFIED WITH kerberos REALM 'EXAMPLE.COM' +``` + +...或者, 不按领域过滤: +```sql +CREATE USER my_user IDENTIFIED WITH kerberos +``` diff --git a/docs/zh/operations/settings/permissions-for-queries.md b/docs/zh/operations/settings/permissions-for-queries.md index a72500b76d5..93e439ae206 100644 --- a/docs/zh/operations/settings/permissions-for-queries.md +++ b/docs/zh/operations/settings/permissions-for-queries.md @@ -9,52 +9,51 @@ toc_title: "\u67E5\u8BE2\u6743\u9650" ClickHouse中的查询可以分为几种类型: -1. 读取数据查询: `SELECT`, `SHOW`, `DESCRIBE`, `EXISTS`. -2. 写入数据查询: `INSERT`, `OPTIMIZE`. -3. 更改设置查询: `SET`, `USE`. -4. [DDL](https://en.wikipedia.org/wiki/Data_definition_language) 查询: `CREATE`, `ALTER`, `RENAME`, `ATTACH`, `DETACH`, `DROP` `TRUNCATE`. -5. `KILL QUERY`. +1. 读取数据的查询: `SELECT` , `SHOW` , `DESCRIBE` , `EXISTS` 。 +2. 写入数据的查询: `INSERT` , `OPTIMIZE` 。 +3. 更改设置的查询: `SET` , `USE` 。 +4. [DDL](https://zh.wikipedia.org/zh-cn/数据定义语言) 查询: `CREATE` , `ALTER` , `RENAME` , `ATTACH` , `DETACH` , `DROP` , `TRUNCATE` 。 +5. `KILL QUERY` 。 以下设置按查询类型规范用户权限: -- [只读](#settings_readonly) — Restricts permissions for all types of queries except DDL queries. -- [allow_ddl](#settings_allow_ddl) — Restricts permissions for DDL queries. +- [readonly](#settings_readonly) — 对除 DDL 查询以外的所有类型限制权限。 +- [allow_ddl](#settings_allow_ddl) — 对 DDL 查询限制权限。 `KILL QUERY` 可以与任何设置进行。 -## 只读 {#settings_readonly} +## readonly {#settings_readonly} 限制读取数据、写入数据和更改设置查询的权限。 -查看查询如何划分为多种类型 [以上](#permissions_for_queries). +查看查询如何划分为 **[上述](#permissions_for_queries)** 的多种类型。 可能的值: -- 0 — All queries are allowed. -- 1 — Only read data queries are allowed. -- 2 — Read data and change settings queries are allowed. +- 0 — 所有查询都被允许。 +- 1 — 只有读取数据的查询被允许。 +- 2 — 读取数据以及变更设置的查询被允许。 -设置后 `readonly = 1`,用户无法更改 `readonly` 和 `allow_ddl` 当前会话中的设置。 +设置为 `readonly = 1` 后,用户无法在当前会话中更改 `readonly` 和 `allow_ddl` 设置。 -使用时 `GET` 方法中的 [HTTP接口](../../interfaces/http.md), `readonly = 1` 自动设置。 要修改数据,请使用 `POST` 方法。 +当使用 [HTTP接口](../../interfaces/http.md) 中的 `GET` 方法时,将自动设置为 `readonly = 1` 。 要修改数据,请使用 `POST` 方法。 -设置 `readonly = 1` 禁止用户更改所有设置。 有一种方法可以禁止用户 -从只更改特定设置,有关详细信息,请参阅 [对设置的限制](constraints-on-settings.md). +设置 `readonly = 1` 将禁止用户的更改任何设置。有一种方法可以只禁止用户更改特定的设置,有关详细信息,请参阅 [对设置的限制](constraints-on-settings.md)。 默认值:0 ## allow_ddl {#settings_allow_ddl} -允许或拒绝 [DDL](https://en.wikipedia.org/wiki/Data_definition_language) 查询。 +允许或拒绝 [DDL](https://zh.wikipedia.org/zh-cn/数据定义语言) 查询。 -查看查询如何划分为多种类型 [以上](#permissions_for_queries). +从 [上文](#permissions_for_queries) 查看查询是如何被划分为多种类型的。 可能的值: -- 0 — DDL queries are not allowed. -- 1 — DDL queries are allowed. +- 0 — DDL 查询不被允许。 +- 1 — DDL 查询被允许。 -你不能执行 `SET allow_ddl = 1` 如果 `allow_ddl = 0` 对于当前会话。 +如果对当前会话 `allow_ddl = 0` ,你就不能执行 `SET allow_ddl = 1` 。 默认值:1 diff --git a/docs/zh/operations/system-tables/asynchronous_metric_log.md b/docs/zh/operations/system-tables/asynchronous_metric_log.md index ff7593768d3..592fb99c5ef 100644 --- a/docs/zh/operations/system-tables/asynchronous_metric_log.md +++ b/docs/zh/operations/system-tables/asynchronous_metric_log.md @@ -5,4 +5,34 @@ machine_translated_rev: 5decc73b5dc60054f19087d3690c4eb99446a6c3 ## system.asynchronous_metric_log {#system-tables-async-log} -包含以下内容的历史值 `system.asynchronous_log` (见 [系统。asynchronous_metrics](../../operations/system-tables/asynchronous_metrics.md#system_tables-asynchronous_metrics)) +包含每分钟记录一次的 `system.asynchronous_metrics`历史值. 默认开启. + +列: +- `event_date` ([Date](../../sql-reference/data-types/date.md)) — 事件日期. +- `event_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — 事件时间. +- `event_time_microseconds` ([DateTime64](../../sql-reference/data-types/datetime64.md)) — 事件时间(微秒). +- `name` ([String](../../sql-reference/data-types/string.md)) — 指标名. +- `value` ([Float64](../../sql-reference/data-types/float.md)) — 指标值. + +**示例** +``` sql +SELECT * FROM system.asynchronous_metric_log LIMIT 10 +``` +``` text +┌─event_date─┬──────────event_time─┬────event_time_microseconds─┬─name─────────────────────────────────────┬─────value─┐ +│ 2020-09-05 │ 2020-09-05 15:56:30 │ 2020-09-05 15:56:30.025227 │ CPUFrequencyMHz_0 │ 2120.9 │ +│ 2020-09-05 │ 2020-09-05 15:56:30 │ 2020-09-05 15:56:30.025227 │ jemalloc.arenas.all.pmuzzy │ 743 │ +│ 2020-09-05 │ 2020-09-05 15:56:30 │ 2020-09-05 15:56:30.025227 │ jemalloc.arenas.all.pdirty │ 26288 │ +│ 2020-09-05 │ 2020-09-05 15:56:30 │ 2020-09-05 15:56:30.025227 │ jemalloc.background_thread.run_intervals │ 0 │ +│ 2020-09-05 │ 2020-09-05 15:56:30 │ 2020-09-05 15:56:30.025227 │ jemalloc.background_thread.num_runs │ 0 │ +│ 2020-09-05 │ 2020-09-05 15:56:30 │ 2020-09-05 15:56:30.025227 │ jemalloc.retained │ 60694528 │ +│ 2020-09-05 │ 2020-09-05 15:56:30 │ 2020-09-05 15:56:30.025227 │ jemalloc.mapped │ 303161344 │ +│ 2020-09-05 │ 2020-09-05 15:56:30 │ 2020-09-05 15:56:30.025227 │ jemalloc.resident │ 260931584 │ +│ 2020-09-05 │ 2020-09-05 15:56:30 │ 2020-09-05 15:56:30.025227 │ jemalloc.metadata │ 12079488 │ +│ 2020-09-05 │ 2020-09-05 15:56:30 │ 2020-09-05 15:56:30.025227 │ jemalloc.allocated │ 133756128 │ +└────────────┴─────────────────────┴────────────────────────────┴──────────────────────────────────────────┴───────────┘ +``` + +**另请参阅** +- [system.asynchronous_metrics](../../operations/system-tables/asynchronous_metrics.md#system_tables-asynchronous_metrics) — 包含在后台定期计算的指标. +- [system.metric_log](../../operations/system-tables/metric_log.md#system_tables-metric_log) — 包含定期刷新到磁盘表 `system.metrics` 以及 `system.events` 中的指标值历史记录. diff --git a/docs/zh/operations/system-tables/crash-log.md b/docs/zh/operations/system-tables/crash-log.md deleted file mode 120000 index d1aa67601bc..00000000000 --- a/docs/zh/operations/system-tables/crash-log.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/crash-log.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/crash-log.md b/docs/zh/operations/system-tables/crash-log.md new file mode 100644 index 00000000000..bd5c97937de --- /dev/null +++ b/docs/zh/operations/system-tables/crash-log.md @@ -0,0 +1,48 @@ +# system.crash_log {#system-tables_crash_log} + +包含有关致命错误堆栈跟踪的信息.该表默认不存在于数据库中, 仅在发生致命错误时才创建. + +列信息: + +- `event_date` ([Datetime](../../sql-reference/data-types/datetime.md)) — 事件日期. +- `event_time` ([Datetime](../../sql-reference/data-types/datetime.md)) — 事件时间. +- `timestamp_ns` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 以纳秒为单位的事件时间戳. +- `signal` ([Int32](../../sql-reference/data-types/int-uint.md)) — 信号编号. +- `thread_id` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 线程ID. +- `query_id` ([String](../../sql-reference/data-types/string.md)) — 查询ID. +- `trace` ([Array](../../sql-reference/data-types/array.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 崩溃时的堆栈跟踪.每个元素都是 ClickHouse 服务器进程内的一个虚拟内存地址. +- `trace_full` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 崩溃时的堆栈跟踪.每个元素在 ClickHouse 服务器进程中包含一个被调用的方法. +- `version` ([String](../../sql-reference/data-types/string.md)) — ClickHouse 服务器版本. +- `revision` ([UInt32](../../sql-reference/data-types/int-uint.md)) — ClickHouse 服务器订正版本. +- `build_id` ([String](../../sql-reference/data-types/string.md)) — 编译器生成的 BuildID. + +**案例** + +查询: + +``` sql +SELECT * FROM system.crash_log ORDER BY event_time DESC LIMIT 1; +``` + +结果 (部分): + +``` text +Row 1: +────── +event_date: 2020-10-14 +event_time: 2020-10-14 15:47:40 +timestamp_ns: 1602679660271312710 +signal: 11 +thread_id: 23624 +query_id: 428aab7c-8f5c-44e9-9607-d16b44467e69 +trace: [188531193,...] +trace_full: ['3. DB::(anonymous namespace)::FunctionFormatReadableTimeDelta::executeImpl(std::__1::vector >&, std::__1::vector > const&, unsigned long, unsigned long) const @ 0xb3cc1f9 in /home/username/work/ClickHouse/build/programs/clickhouse',...] +version: ClickHouse 20.11.1.1 +revision: 54442 +build_id: +``` + +**另请参阅** +- [trace_log](../../operations/system-tables/trace_log.md) 系统表 + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/crash-log) diff --git a/docs/zh/operations/system-tables/current-roles.md b/docs/zh/operations/system-tables/current-roles.md deleted file mode 120000 index b9f1f9d6e9d..00000000000 --- a/docs/zh/operations/system-tables/current-roles.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/current-roles.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/current-roles.md b/docs/zh/operations/system-tables/current-roles.md new file mode 100644 index 00000000000..8b9ddec2e0b --- /dev/null +++ b/docs/zh/operations/system-tables/current-roles.md @@ -0,0 +1,11 @@ +# system.current_roles {#system_tables-current_roles} + +包含当前用户的激活角色. `SET ROLE` 修改该表的内容. + +列信息: + + - `role_name` ([String](../../sql-reference/data-types/string.md))) — 角色名称. + - `with_admin_option` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 显示 `current_role` 是否是具有 `ADMIN OPTION` 权限的角色的标志. + - `is_default` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 显示 `current_role` 是否为默认角色的标志. + + [原始文章](https://clickhouse.com/docs/en/operations/system-tables/current-roles) diff --git a/docs/zh/operations/system-tables/data_skipping_indices.md b/docs/zh/operations/system-tables/data_skipping_indices.md deleted file mode 120000 index 2820987bf69..00000000000 --- a/docs/zh/operations/system-tables/data_skipping_indices.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/data_skipping_indices.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/data_skipping_indices.md b/docs/zh/operations/system-tables/data_skipping_indices.md new file mode 100644 index 00000000000..3278a7f830f --- /dev/null +++ b/docs/zh/operations/system-tables/data_skipping_indices.md @@ -0,0 +1,47 @@ +# system.data_skipping_indices {#system-data-skipping-indices} + +包含有关所有表中现有数据跳过索引的信息. + +列信息: + +- `database` ([String](../../sql-reference/data-types/string.md)) — 数据库名称. +- `table` ([String](../../sql-reference/data-types/string.md)) — 数据表名称. +- `name` ([String](../../sql-reference/data-types/string.md)) — 索引名称. +- `type` ([String](../../sql-reference/data-types/string.md)) — 索引类型. +- `expr` ([String](../../sql-reference/data-types/string.md)) — 索引计算表达式. +- `granularity` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 块中颗粒的数量. +- `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 压缩数据的大小, 以字节为单位. +- `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 解压缩数据的大小, 以字节为单位. +- `marks_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 标记的大小, 以字节为单位. + +**示例** + +```sql +SELECT * FROM system.data_skipping_indices LIMIT 2 FORMAT Vertical; +``` + +```text +Row 1: +────── +database: default +table: user_actions +name: clicks_idx +type: minmax +expr: clicks +granularity: 1 +data_compressed_bytes: 58 +data_uncompressed_bytes: 6 +marks: 48 + +Row 2: +────── +database: default +table: users +name: contacts_null_idx +type: minmax +expr: assumeNotNull(contacts_null) +granularity: 1 +data_compressed_bytes: 58 +data_uncompressed_bytes: 6 +marks: 48 +``` diff --git a/docs/zh/operations/system-tables/distributed_ddl_queue.md b/docs/zh/operations/system-tables/distributed_ddl_queue.md deleted file mode 120000 index a9cadc74af2..00000000000 --- a/docs/zh/operations/system-tables/distributed_ddl_queue.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/distributed_ddl_queue.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/distributed_ddl_queue.md b/docs/zh/operations/system-tables/distributed_ddl_queue.md new file mode 100644 index 00000000000..5237673d5d0 --- /dev/null +++ b/docs/zh/operations/system-tables/distributed_ddl_queue.md @@ -0,0 +1,64 @@ +# system.distributed_ddl_queue {#system_tables-distributed_ddl_queue} + +包含有关在集群上执行的[分布式ddl查询(集群环境)](../../sql-reference/distributed-ddl.md)的信息. + +列信息: + +- `entry` ([String](../../sql-reference/data-types/string.md)) — 查询ID. +- `host_name` ([String](../../sql-reference/data-types/string.md)) — 主机名称. +- `host_address` ([String](../../sql-reference/data-types/string.md)) — 主机名解析到的IP地址. +- `port` ([UInt16](../../sql-reference/data-types/int-uint.md)) — 主机端口. +- `status` ([Enum8](../../sql-reference/data-types/enum.md)) — 查询状态. +- `cluster` ([String](../../sql-reference/data-types/string.md)) — 群集名称. +- `query` ([String](../../sql-reference/data-types/string.md)) — 执行查询. +- `initiator` ([String](../../sql-reference/data-types/string.md)) — 执行查询的节点. +- `query_start_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — 查询开始时间. +- `query_finish_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — 查询结束时间. +- `query_duration_ms` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 查询执行时间(毫秒). +- `exception_code` ([Enum8](../../sql-reference/data-types/enum.md)) — 来自于[ZooKeeper](../../operations/tips.md#zookeeper)的异常代码. + +**示例** + +``` sql +SELECT * +FROM system.distributed_ddl_queue +WHERE cluster = 'test_cluster' +LIMIT 2 +FORMAT Vertical + +Query id: f544e72a-6641-43f1-836b-24baa1c9632a + +Row 1: +────── +entry: query-0000000000 +host_name: clickhouse01 +host_address: 172.23.0.11 +port: 9000 +status: Finished +cluster: test_cluster +query: CREATE DATABASE test_db UUID '4a82697e-c85e-4e5b-a01e-a36f2a758456' ON CLUSTER test_cluster +initiator: clickhouse01:9000 +query_start_time: 2020-12-30 13:07:51 +query_finish_time: 2020-12-30 13:07:51 +query_duration_ms: 6 +exception_code: ZOK + +Row 2: +────── +entry: query-0000000000 +host_name: clickhouse02 +host_address: 172.23.0.12 +port: 9000 +status: Finished +cluster: test_cluster +query: CREATE DATABASE test_db UUID '4a82697e-c85e-4e5b-a01e-a36f2a758456' ON CLUSTER test_cluster +initiator: clickhouse01:9000 +query_start_time: 2020-12-30 13:07:51 +query_finish_time: 2020-12-30 13:07:51 +query_duration_ms: 6 +exception_code: ZOK + +2 rows in set. Elapsed: 0.025 sec. +``` + +[原始文章](https://clickhouse.com/docs/en/operations/system_tables/distributed_ddl_queuedistributed_ddl_queue.md) diff --git a/docs/zh/operations/system-tables/distribution_queue.md b/docs/zh/operations/system-tables/distribution_queue.md deleted file mode 120000 index 3831b85000c..00000000000 --- a/docs/zh/operations/system-tables/distribution_queue.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/distribution_queue.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/distribution_queue.md b/docs/zh/operations/system-tables/distribution_queue.md new file mode 100644 index 00000000000..2317e0677a7 --- /dev/null +++ b/docs/zh/operations/system-tables/distribution_queue.md @@ -0,0 +1,50 @@ +# system.distribution_queue {#system_tables-distribution_queue} + +包含关于队列中要发送到分片的本地文件的信息. 这些本地文件包含通过以异步模式将新数据插入到Distributed表中而创建的新部分. + +列信息: + +- `database` ([String](../../sql-reference/data-types/string.md)) — 数据库名称. + +- `table` ([String](../../sql-reference/data-types/string.md)) — 表名称. + +- `data_path` ([String](../../sql-reference/data-types/string.md)) — 存放本地文件的文件夹的路径. + +- `is_blocked` ([UInt8](../../sql-reference/data-types/int-uint.md)) — Flag表示是否阻止向服务器发送本地文件. + +- `error_count` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 错误总数. + +- `data_files` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 文件夹中的本地文件数. + +- `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 本地文件中压缩数据的大小, 以字节为单位. + +- `broken_data_files` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 被标记为损坏的文件数量(由于错误). + +- `broken_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 破碎文件中压缩数据的大小, 以字节为单位. + +- `last_exception` ([String](../../sql-reference/data-types/string.md)) — 关于最近发生的错误的文本信息(如果有的话). + +**示例** + +``` sql +SELECT * FROM system.distribution_queue LIMIT 1 FORMAT Vertical; +``` + +``` text +Row 1: +────── +database: default +table: dist +data_path: ./store/268/268bc070-3aad-4b1a-9cf2-4987580161af/default@127%2E0%2E0%2E2:9000/ +is_blocked: 1 +error_count: 0 +data_files: 1 +data_compressed_bytes: 499 +last_exception: +``` + +**另请参阅** + +- [分布式表引擎](../../engines/table-engines/special/distributed.md) + +[原始文章](https://clickhouse.com/docs/en/operations/system_tables/distribution_queue) diff --git a/docs/zh/operations/system-tables/enabled-roles.md b/docs/zh/operations/system-tables/enabled-roles.md deleted file mode 120000 index 04ffee25343..00000000000 --- a/docs/zh/operations/system-tables/enabled-roles.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/enabled-roles.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/enabled-roles.md b/docs/zh/operations/system-tables/enabled-roles.md new file mode 100644 index 00000000000..f02c8ec1e65 --- /dev/null +++ b/docs/zh/operations/system-tables/enabled-roles.md @@ -0,0 +1,12 @@ +# system.enabled_roles {#system_tables-enabled_roles} + +包含当前所有活动角色, 包括当前用户的当前角色和当前角色的已授予角色. + +列信息: + +- `role_name` ([String](../../sql-reference/data-types/string.md))) — 角色名称. +- `with_admin_option` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 显示 `enabled_role` 是否为具有 `ADMIN OPTION` 权限的角色的标志. +- `is_current` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 显示 `enabled_role` 是否是当前用户的当前角色的标志. +- `is_default` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 显示 `enabled_role` 是否为默认角色的标志. + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/enabled-roles) diff --git a/docs/zh/operations/system-tables/errors.md b/docs/zh/operations/system-tables/errors.md deleted file mode 120000 index 2bb8c1dff0d..00000000000 --- a/docs/zh/operations/system-tables/errors.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/errors.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/errors.md b/docs/zh/operations/system-tables/errors.md new file mode 100644 index 00000000000..4d7baafb865 --- /dev/null +++ b/docs/zh/operations/system-tables/errors.md @@ -0,0 +1,35 @@ +# system.errors {#system_tables-errors} + +包含错误代码和它们被触发的次数. + +列信息: + +- `name` ([String](../../sql-reference/data-types/string.md)) — 错误名称 (`errorCodeToName`). +- `code` ([Int32](../../sql-reference/data-types/int-uint.md)) — 错误码. +- `value` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 发生此错误的次数. +- `last_error_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — 上一次错误发生的时间. +- `last_error_message` ([String](../../sql-reference/data-types/string.md)) — 最后一个错误的消息. +- `last_error_trace` ([Array(UInt64)](../../sql-reference/data-types/array.md)) — 一个[堆栈跟踪](https://en.wikipedia.org/wiki/Stack_trace), 它表示存储被调用方法的物理地址列表. +- `remote` ([UInt8](../../sql-reference/data-types/int-uint.md)) — 远程异常(即在一个分布式查询期间接收的). + +**示例** + +``` sql +SELECT name, code, value +FROM system.errors +WHERE value > 0 +ORDER BY code ASC +LIMIT 1 + +┌─name─────────────┬─code─┬─value─┐ +│ CANNOT_OPEN_FILE │ 76 │ 1 │ +└──────────────────┴──────┴───────┘ +``` + +``` sql +WITH arrayMap(x -> demangle(addressToSymbol(x)), last_error_trace) AS all +SELECT name, arrayStringConcat(all, '\n') AS res +FROM system.errors +LIMIT 1 +SETTINGS allow_introspection_functions=1\G +``` diff --git a/docs/zh/operations/system-tables/grants.md b/docs/zh/operations/system-tables/grants.md deleted file mode 120000 index ec7f50b118e..00000000000 --- a/docs/zh/operations/system-tables/grants.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/grants.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/grants.md b/docs/zh/operations/system-tables/grants.md new file mode 100644 index 00000000000..8795f5ebf19 --- /dev/null +++ b/docs/zh/operations/system-tables/grants.md @@ -0,0 +1,24 @@ +# system.grants {#system_tables-grants} + +授予ClickHouse用户帐户的权限. + +列信息: +- `user_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — 用户名称. + +- `role_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — 分配给用户帐号的角色. + +- `access_type` ([Enum8](../../sql-reference/data-types/enum.md)) — ClickHouse用户帐号的接入参数. + +- `database` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — 数据库名称. + +- `table` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — 表名称. + +- `column` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — 被授予访问权限的列的名称. + +- `is_partial_revoke` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 逻辑值. 它显示了某些特权是否被取消. 可能的值: +- `0` — 该行描述了部分撤销. +- `1` — 这一行描述了一个授权. + +- `grant_option` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 被授予`WITH GRANT OPTION` 权限, 参见 [GRANT](../../sql-reference/statements/grant.md#grant-privigele-syntax). + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/grants) diff --git a/docs/zh/operations/system-tables/index.md b/docs/zh/operations/system-tables/index.md index 21e0bccc693..eb7d45f9388 100644 --- a/docs/zh/operations/system-tables/index.md +++ b/docs/zh/operations/system-tables/index.md @@ -36,7 +36,7 @@ toc_title: "\u7CFB\u7EDF\u8868" 配置定义的示例如下: ``` - + system query_log
@@ -47,7 +47,7 @@ toc_title: "\u7CFB\u7EDF\u8868" --> 7500
-
+ ``` 默认情况下,表增长是无限的。可以通过TTL 删除过期日志记录的设置来控制表的大小。 你也可以使用分区功能 `MergeTree`-引擎表。 diff --git a/docs/zh/operations/system-tables/licenses.md b/docs/zh/operations/system-tables/licenses.md deleted file mode 120000 index a84b4bbf3e3..00000000000 --- a/docs/zh/operations/system-tables/licenses.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/licenses.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/licenses.md b/docs/zh/operations/system-tables/licenses.md new file mode 100644 index 00000000000..7e59ba865f5 --- /dev/null +++ b/docs/zh/operations/system-tables/licenses.md @@ -0,0 +1,39 @@ +# system.licenses {#system-tables_system.licenses} + +包含位于 ClickHouse 源的 [contrib](https://github.com/ClickHouse/ClickHouse/tree/master/contrib) 目录中的第三方库的许可证. + +列信息: + +- `library_name` ([String](../../sql-reference/data-types/string.md)) — 库的名称, 它是与之连接的许可证. +- `license_type` ([String](../../sql-reference/data-types/string.md)) — 许可类型-例如Apache, MIT. +- `license_path` ([String](../../sql-reference/data-types/string.md)) — 带有许可文本的文件的路径. +- `license_text` ([String](../../sql-reference/data-types/string.md)) — 许可协议文本. + +**示例** + +``` sql +SELECT library_name, license_type, license_path FROM system.licenses LIMIT 15 +``` + +``` text +┌─library_name───────┬─license_type─┬─license_path────────────────────────┐ +│ FastMemcpy │ MIT │ /contrib/FastMemcpy/LICENSE │ +│ arrow │ Apache │ /contrib/arrow/LICENSE.txt │ +│ avro │ Apache │ /contrib/avro/LICENSE.txt │ +│ aws-c-common │ Apache │ /contrib/aws-c-common/LICENSE │ +│ aws-c-event-stream │ Apache │ /contrib/aws-c-event-stream/LICENSE │ +│ aws-checksums │ Apache │ /contrib/aws-checksums/LICENSE │ +│ aws │ Apache │ /contrib/aws/LICENSE.txt │ +│ base64 │ BSD 2-clause │ /contrib/base64/LICENSE │ +│ boost │ Boost │ /contrib/boost/LICENSE_1_0.txt │ +│ brotli │ MIT │ /contrib/brotli/LICENSE │ +│ capnproto │ MIT │ /contrib/capnproto/LICENSE │ +│ cassandra │ Apache │ /contrib/cassandra/LICENSE.txt │ +│ cctz │ Apache │ /contrib/cctz/LICENSE.txt │ +│ cityhash102 │ MIT │ /contrib/cityhash102/COPYING │ +│ cppkafka │ BSD 2-clause │ /contrib/cppkafka/LICENSE │ +└────────────────────┴──────────────┴─────────────────────────────────────┘ + +``` + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/licenses) diff --git a/docs/zh/operations/system-tables/metric_log.md b/docs/zh/operations/system-tables/metric_log.md index aaf04d74b0d..5eb038feea7 100644 --- a/docs/zh/operations/system-tables/metric_log.md +++ b/docs/zh/operations/system-tables/metric_log.md @@ -9,14 +9,14 @@ machine_translated_rev: 5decc73b5dc60054f19087d3690c4eb99446a6c3 打开指标历史记录收集 `system.metric_log`,创建 `/etc/clickhouse-server/config.d/metric_log.xml` 具有以下内容: ``` xml - + system metric_log
7500 1000
-
+ ``` **示例** diff --git a/docs/zh/operations/system-tables/opentelemetry_span_log.md b/docs/zh/operations/system-tables/opentelemetry_span_log.md deleted file mode 120000 index 59aab8cd11d..00000000000 --- a/docs/zh/operations/system-tables/opentelemetry_span_log.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/opentelemetry_span_log.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/opentelemetry_span_log.md b/docs/zh/operations/system-tables/opentelemetry_span_log.md new file mode 100644 index 00000000000..6eceb3da889 --- /dev/null +++ b/docs/zh/operations/system-tables/opentelemetry_span_log.md @@ -0,0 +1,53 @@ +# system.opentelemetry_span_log {#system_tables-opentelemetry_span_log} + +包含已执行查询的[跟踪范围](https://opentracing.io/docs/overview/spans/)的信息. + +列信息: + +- `trace_id` ([UUID](../../sql-reference/data-types/uuid.md)) — 执行的查询的跟踪ID. + +- `span_id` ([UInt64](../../sql-reference/data-types/int-uint.md)) — `跟踪 跨度` ID. + +- `parent_span_id` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 父级`跟踪 跨度` ID. + +- `operation_name` ([String](../../sql-reference/data-types/string.md)) — 操作的名称. + +- `start_time_us` ([UInt64](../../sql-reference/data-types/int-uint.md)) — `跟踪 跨度` 开始时间 (微秒). + +- `finish_time_us` ([UInt64](../../sql-reference/data-types/int-uint.md)) — `跟踪 跨度 结束时间 (微秒). + +- `finish_date` ([Date](../../sql-reference/data-types/date.md)) — `跟踪 跨度` 完成日期. + +- `attribute.names` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — [属性](https://opentelemetry.io/docs/go/instrumentation/#attributes) 名称取决于 `跟踪 跨度`. 它们是根据[OpenTelemetry](https://opentelemetry.io/)标准中的建议填写的. + +- `attribute.values` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 属性值取决于 `跟踪 跨度`. 它们是根据 `OpenTelemetry` 标准中的建议填写的. + +**示例** + +查询: + +``` sql +SELECT * FROM system.opentelemetry_span_log LIMIT 1 FORMAT Vertical; +``` + +结果: + +``` text +Row 1: +────── +trace_id: cdab0847-0d62-61d5-4d38-dd65b19a1914 +span_id: 701487461015578150 +parent_span_id: 2991972114672045096 +operation_name: DB::Block DB::InterpreterSelectQuery::getSampleBlockImpl() +start_time_us: 1612374594529090 +finish_time_us: 1612374594529108 +finish_date: 2021-02-03 +attribute.names: [] +attribute.values: [] +``` + +**另请参阅** + +- [OpenTelemetry](../../operations/opentelemetry.md) + +[原始文章](https://clickhouse.com/docs/en/operations/system_tables/opentelemetry_span_log) diff --git a/docs/zh/operations/system-tables/parts_columns.md b/docs/zh/operations/system-tables/parts_columns.md deleted file mode 120000 index f2c7d4dde34..00000000000 --- a/docs/zh/operations/system-tables/parts_columns.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/parts_columns.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/parts_columns.md b/docs/zh/operations/system-tables/parts_columns.md new file mode 100644 index 00000000000..d603f251d30 --- /dev/null +++ b/docs/zh/operations/system-tables/parts_columns.md @@ -0,0 +1,148 @@ +# system.parts_columns {#system_tables-parts_columns} + +包含关于[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md)表的部分和列的信息. + +每一行描述一个数据部分. + +列信息: + +- `partition` ([String](../../sql-reference/data-types/string.md)) — 分区的名称. 要了解什么是分区, 请参阅[ALTER](../../sql-reference/statements/alter/index.md#query_language_queries_alter)查询的描述. + + 格式: + + - `YYYYMM` 按月自动分区. + - `any_string` 当手动分区. + +- `name` ([String](../../sql-reference/data-types/string.md)) — 数据部分的名称. + +- `part_type` ([String](../../sql-reference/data-types/string.md)) — 数据部分存储格式. + + 可能的值: + + - `Wide` — 每一列存储在文件系统中的一个单独的文件中. + - `Compact` — 所有列都存储在文件系统中的一个文件中. + + 数据存储格式由[MergeTree](../../engines/table-engines/mergetree-family/mergetree.md)表的 `min_bytes_for_wide_part` 和 `min_rows_for_wide_part` 设置控制. + +- `active` ([UInt8](../../sql-reference/data-types/int-uint.md)) — 数据部分是否处于活动状态的标志. 如果数据部分是活动的, 则在表中使用它. 否则, 它被删除. 合并后仍保留非活动数据部分. + +- `marks` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 标记数. 要获得数据部分中的大约行数, 请将“标记”乘以索引粒度(通常为8192)(此提示不适用于自适应粒度). + +- `rows` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 行数. + +- `bytes_on_disk` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 所有数据部分文件的总大小(以字节为单位). + +- `data_compressed_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 在数据部分中压缩数据的总大小. 不包括所有辅助文件(例如,带有标记的文件). + +- `data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 数据部分中未压缩数据的总大小. 不包括所有辅助文件(例如,带有标记的文件). + +- `marks_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 带标记的文件的大小. + +- `modification_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — 包含数据部分的目录被修改的时间. 这通常对应于数据部分创建的时间. + +- `remove_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — 数据部分变为非活动状态的时间. + +- `refcount` ([UInt32](../../sql-reference/data-types/int-uint.md)) — 使用数据部分的位置数. 大于2的值表示该数据部分用于查询或合并. + +- `min_date` ([Date](../../sql-reference/data-types/date.md)) — 数据部分中日期键的最小值. + +- `max_date` ([Date](../../sql-reference/data-types/date.md)) — 数据部分中日期键的最大值. + +- `partition_id` ([String](../../sql-reference/data-types/string.md)) — 分区ID. + +- `min_block_number` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 合并后组成当前部分的数据部分最小值. + +- `max_block_number` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 合并后组成当前部分的数据部分最大值. + +- `level` ([UInt32](../../sql-reference/data-types/int-uint.md)) — 合并树的深度. 0表示当前部分是通过插入而不是合并其他部分创建的. + +- `data_version` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 用于确定应该对数据部分应用哪些突变的编号(版本高于 `data_version` 的突变). + +- `primary_key_bytes_in_memory` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 主键值使用的内存量(以字节为单位). + +- `primary_key_bytes_in_memory_allocated` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 为主键值保留的内存量(以字节为单位). + +- `database` ([String](../../sql-reference/data-types/string.md)) — 数据库名称. + +- `table` ([String](../../sql-reference/data-types/string.md)) — 表名称. + +- `engine` ([String](../../sql-reference/data-types/string.md)) — 不带参数的表引擎的名称. + +- `disk_name` ([String](../../sql-reference/data-types/string.md)) — 存储数据部分的磁盘名称. + +- `path` ([String](../../sql-reference/data-types/string.md)) — 数据部件文件文件夹的绝对路径. + +- `column` ([String](../../sql-reference/data-types/string.md)) — 列名称. + +- `type` ([String](../../sql-reference/data-types/string.md)) — 列类型. + +- `column_position` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 表中以1开头的一列的序号位置. + +- `default_kind` ([String](../../sql-reference/data-types/string.md)) — 默认值的表达式类型 (`DEFAULT`, `MATERIALIZED`, `ALIAS`), 如果未定义则为空字符串. + +- `default_expression` ([String](../../sql-reference/data-types/string.md)) — 表达式的默认值, 如果未定义则为空字符串. + +- `column_bytes_on_disk` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 列的总大小(以字节为单位). + +- `column_data_compressed_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 列中压缩数据的总大小,以字节为单位. + +- `column_data_uncompressed_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 列中解压缩数据的总大小,以字节为单位. + +- `column_marks_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 带标记的列的大小,以字节为单位. + +- `bytes` ([UInt64](../../sql-reference/data-types/int-uint.md)) — `bytes_on_disk` 别名. + +- `marks_size` ([UInt64](../../sql-reference/data-types/int-uint.md)) — `marks_bytes` 别名. + +**示例** + +``` sql +SELECT * FROM system.parts_columns LIMIT 1 FORMAT Vertical; +``` + +``` text +Row 1: +────── +partition: tuple() +name: all_1_2_1 +part_type: Wide +active: 1 +marks: 2 +rows: 2 +bytes_on_disk: 155 +data_compressed_bytes: 56 +data_uncompressed_bytes: 4 +marks_bytes: 96 +modification_time: 2020-09-23 10:13:36 +remove_time: 2106-02-07 06:28:15 +refcount: 1 +min_date: 1970-01-01 +max_date: 1970-01-01 +partition_id: all +min_block_number: 1 +max_block_number: 2 +level: 1 +data_version: 1 +primary_key_bytes_in_memory: 2 +primary_key_bytes_in_memory_allocated: 64 +database: default +table: 53r93yleapyears +engine: MergeTree +disk_name: default +path: /var/lib/clickhouse/data/default/53r93yleapyears/all_1_2_1/ +column: id +type: Int8 +column_position: 1 +default_kind: +default_expression: +column_bytes_on_disk: 76 +column_data_compressed_bytes: 28 +column_data_uncompressed_bytes: 2 +column_marks_bytes: 48 +``` + +**另请参阅** + +- [MergeTree family](../../engines/table-engines/mergetree-family/mergetree.md) + +[原始文章](https://clickhouse.com/docs/en/operations/system_tables/parts_columns) diff --git a/docs/zh/operations/system-tables/query_views_log.md b/docs/zh/operations/system-tables/query_views_log.md deleted file mode 120000 index f606e4108ca..00000000000 --- a/docs/zh/operations/system-tables/query_views_log.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/query_views_log.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/query_views_log.md b/docs/zh/operations/system-tables/query_views_log.md new file mode 100644 index 00000000000..57946e5104a --- /dev/null +++ b/docs/zh/operations/system-tables/query_views_log.md @@ -0,0 +1,86 @@ +# system.query_views_log {#system_tables-query_views_log} + +包含有关运行查询时执行的从属视图的信息,例如视图类型或执行时间. + +开始记录: + +1. 在 [query_views_log](../../operations/server-configuration-parameters/settings.md#server_configuration_parameters-query_views_log) 部分配置参数. +2. 设置 [log_query_views](../../operations/settings/settings.md#settings-log-query-views) 为 1. + +数据的刷新周期是在[query_views_log](../../operations/server-configuration-parameters/settings.md#server_configuration_parameters-query_views_log)服务器设置部分的 `flush_interval_milliseconds` 参数中设置的. 要强制刷新,请使用[SYSTEM FLUSH LOGS](../../sql-reference/statements/system.md#query_language-system-flush_logs)查询. + +ClickHouse不会自动从表中删除数据. 详见 [Introduction](../../operations/system-tables/index.md#system-tables-introduction). + +您可以使用[log_queries_probability](../../operations/settings/settings.md#log-queries-probability)设置来减少在 `query_views_log` 表中注册的查询数量. + +列信息: + +- `event_date` ([Date](../../sql-reference/data-types/date.md)) — 视图的最后一个事件发生的日期. +- `event_time` ([DateTime](../../sql-reference/data-types/datetime.md)) — 视图完成执行的日期和时间. +- `event_time_microseconds` ([DateTime](../../sql-reference/data-types/datetime.md)) — 视图以微秒精度完成执行的日期和时间. +- `view_duration_ms` ([UInt64](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 视图执行的持续时间(各阶段之和), 以毫秒为单位. +- `initial_query_id` ([String](../../sql-reference/data-types/string.md)) — 初始查询的ID (用于分布式查询执行). +- `view_name` ([String](../../sql-reference/data-types/string.md)) — 视图名称. +- `view_uuid` ([UUID](../../sql-reference/data-types/uuid.md)) — 视图的UUID. +- `view_type` ([Enum8](../../sql-reference/data-types/enum.md)) — 视图类型. 值: + - `'Default' = 1` — [Default views](../../sql-reference/statements/create/view.md#normal). 不应该出现在日志中. + - `'Materialized' = 2` — [Materialized views](../../sql-reference/statements/create/view.md#materialized). + - `'Live' = 3` — [Live views](../../sql-reference/statements/create/view.md#live-view). +- `view_query` ([String](../../sql-reference/data-types/string.md)) — 视图执行的查询. +- `view_target` ([String](../../sql-reference/data-types/string.md)) — 视图目标表的名称. +- `read_rows` ([UInt64](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 读行数. +- `read_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 读字节数. +- `written_rows` ([UInt64](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 写入行数. +- `written_bytes` ([UInt64](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 写入字节数. +- `peak_memory_usage` ([Int64](../../sql-reference/data-types/int-uint.md)) — 在此视图上下文中, 已分配内存和已释放内存之间的最大差值. +- `ProfileEvents` ([Map(String, UInt64)](../../sql-reference/data-types/array.md)) — ProfileEvents度量不同的指标. 它们的描述可以在表 [system.events](../../operations/system-tables/events.md#system_tables-events) 中找到. +- `status` ([Enum8](../../sql-reference/data-types/enum.md)) — 视图状态. 值: + - `'QueryStart' = 1` — 成功启动视图执行. 不应该出现. + - `'QueryFinish' = 2` — 视图执行成功结束. + - `'ExceptionBeforeStart' = 3` — 视图执行开始前的异常. + - `'ExceptionWhileProcessing' = 4` — 视图执行期间的异常. +- `exception_code` ([Int32](../../sql-reference/data-types/int-uint.md)) — 异常代码. +- `exception` ([String](../../sql-reference/data-types/string.md)) — 异常报文. +- `stack_trace` ([String](../../sql-reference/data-types/string.md)) — [堆栈跟踪](https://en.wikipedia.org/wiki/Stack_trace). 如果查询成功完成, 则为空字符串. + +**示例** + +查询: + +``` sql +SELECT * FROM system.query_views_log LIMIT 1 \G; +``` + +结果: + +``` text +Row 1: +────── +event_date: 2021-06-22 +event_time: 2021-06-22 13:23:07 +event_time_microseconds: 2021-06-22 13:23:07.738221 +view_duration_ms: 0 +initial_query_id: c3a1ac02-9cad-479b-af54-9e9c0a7afd70 +view_name: default.matview_inner +view_uuid: 00000000-0000-0000-0000-000000000000 +view_type: Materialized +view_query: SELECT * FROM default.table_b +view_target: default.`.inner.matview_inner` +read_rows: 4 +read_bytes: 64 +written_rows: 2 +written_bytes: 32 +peak_memory_usage: 4196188 +ProfileEvents: {'FileOpen':2,'WriteBufferFromFileDescriptorWrite':2,'WriteBufferFromFileDescriptorWriteBytes':187,'IOBufferAllocs':3,'IOBufferAllocBytes':3145773,'FunctionExecute':3,'DiskWriteElapsedMicroseconds':13,'InsertedRows':2,'InsertedBytes':16,'SelectedRows':4,'SelectedBytes':48,'ContextLock':16,'RWLockAcquiredReadLocks':1,'RealTimeMicroseconds':698,'SoftPageFaults':4,'OSReadChars':463} +status: QueryFinish +exception_code: 0 +exception: +stack_trace: +``` + +**另请参阅** + +- [system.query_log](../../operations/system-tables/query_log.md#system_tables-query_log) — 包含查询执行的常用信息的 `query_log`系统表的描述. +- [system.query_thread_log](../../operations/system-tables/query_thread_log.md#system_tables-query_thread_log) — 包含关于每个查询执行线程的信息. + +[原始文章](https://clickhouse.com/docs/en/operations/system_tables/query_thread_log) diff --git a/docs/zh/operations/system-tables/quota_limits.md b/docs/zh/operations/system-tables/quota_limits.md deleted file mode 120000 index 3fecf881c92..00000000000 --- a/docs/zh/operations/system-tables/quota_limits.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/quota_limits.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/quota_limits.md b/docs/zh/operations/system-tables/quota_limits.md new file mode 100644 index 00000000000..67a2a01eb71 --- /dev/null +++ b/docs/zh/operations/system-tables/quota_limits.md @@ -0,0 +1,21 @@ +# system.quota_limits {#system_tables-quota_limits} + +包含关于所有配额的所有间隔的最大值的信息. 任何行数或0行都可以对应一个配额. + +列信息: +- `quota_name` ([String](../../sql-reference/data-types/string.md)) — 配额名称. +- `duration` ([UInt32](../../sql-reference/data-types/int-uint.md)) — 计算资源消耗的时间间隔长度,单位为秒. +- `is_randomized_interval` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 逻辑值. 它显示了间隔是否是随机的. 如果间隔不是随机的, 它总是在同一时间开始. 例如, 1 分钟的间隔总是从整数分钟开始(即它可以从 11:20:00 开始, 但它永远不会从 11:20:01 开始), 一天的间隔总是从 UTC 午夜开始. 如果间隔是随机的, 则第一个间隔在随机时间开始, 随后的间隔一个接一个开始. 值: +- `0` — 区间不是随机的. +- `1` — 区间是随机的. +- `max_queries` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 最大查询数. +- `max_query_selects` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — select 最大查询数. +- `max_query_inserts` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — insert 最大查询数. +- `max_errors` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 最大错误数. +- `max_result_rows` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 最大结果行数. +- `max_result_bytes` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 用于存储查询结果的最大RAM容量(以字节为单位). +- `max_read_rows` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 从参与查询的所有表和表函数中读取的最大行数. +- `max_read_bytes` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 从参与查询的所有表和表函数中读取的最大字节数. +- `max_execution_time` ([Nullable](../../sql-reference/data-types/nullable.md)([Float64](../../sql-reference/data-types/float.md))) — 查询执行时间的最大值, 单位为秒. + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/quota_limits) diff --git a/docs/zh/operations/system-tables/quota_usage.md b/docs/zh/operations/system-tables/quota_usage.md deleted file mode 120000 index c79f1a75033..00000000000 --- a/docs/zh/operations/system-tables/quota_usage.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/quota_usage.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/quota_usage.md b/docs/zh/operations/system-tables/quota_usage.md new file mode 100644 index 00000000000..020d14aee5e --- /dev/null +++ b/docs/zh/operations/system-tables/quota_usage.md @@ -0,0 +1,32 @@ +# system.quota_usage {#system_tables-quota_usage} + +当前用户的配额使用情况: 使用了多少, 还剩多少. + +列信息: +- `quota_name` ([String](../../sql-reference/data-types/string.md)) — 配额名称. +- `quota_key`([String](../../sql-reference/data-types/string.md)) — 配额数值. 比如, if keys = \[`ip address`\], `quota_key` 可能有一个值 ‘192.168.1.1’. +- `start_time`([Nullable](../../sql-reference/data-types/nullable.md)([DateTime](../../sql-reference/data-types/datetime.md))) — 计算资源消耗的开始时间. +- `end_time`([Nullable](../../sql-reference/data-types/nullable.md)([DateTime](../../sql-reference/data-types/datetime.md))) — 计算资源消耗的结束时间. +- `duration` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 计算资源消耗的时间间隔长度, 单位为秒. +- `queries` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 在此间隔内的请求总数. +- `query_selects` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 在此间隔内查询请求的总数. +- `query_inserts` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 在此间隔内插入请求的总数. +- `max_queries` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 最大请求数. +- `errors` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 抛出异常的查询数. +- `max_errors` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 最大错误数. +- `result_rows` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 结果给出的总行数. +- `max_result_rows` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 最大结果行数. +- `result_bytes` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 用于存储查询结果的RAM容量(以字节为单位). +- `max_result_bytes` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 用于存储查询结果的最大RAM容量,以字节为单位. +- `read_rows` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — The total number of source rows read from tables for running the query on all remote servers. +- `max_read_rows` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 参与查询的所有表和表函数中读取的最大行数. +- `read_bytes` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 参与查询的所有表和表函数中读取的总字节数. +- `max_read_bytes` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 所有表和表函数中读取的最大字节数. +- `execution_time` ([Nullable](../../sql-reference/data-types/nullable.md)([Float64](../../sql-reference/data-types/float.md))) — 总查询执行时间, 以秒为单位(挂墙时间). +- `max_execution_time` ([Nullable](../../sql-reference/data-types/nullable.md)([Float64](../../sql-reference/data-types/float.md))) — 查询最大执行时间. + +## 另请参阅 {#see-also} + +- [查看配额信息](../../sql-reference/statements/show.md#show-quota-statement) + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/quota_usage) diff --git a/docs/zh/operations/system-tables/quotas.md b/docs/zh/operations/system-tables/quotas.md deleted file mode 120000 index b6a26bf77f3..00000000000 --- a/docs/zh/operations/system-tables/quotas.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/quotas.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/quotas.md b/docs/zh/operations/system-tables/quotas.md new file mode 100644 index 00000000000..b25c213bdd1 --- /dev/null +++ b/docs/zh/operations/system-tables/quotas.md @@ -0,0 +1,28 @@ +# system.quotas {#system_tables-quotas} + +包含 [quotas](../../operations/system-tables/quotas.md) 信息. + +列信息: +- `name` ([String](../../sql-reference/data-types/string.md)) — 配额名称. +- `id` ([UUID](../../sql-reference/data-types/uuid.md)) — 配额 ID. +- `storage`([String](../../sql-reference/data-types/string.md)) — 存储配额. 可能的值:“users.xml”(如果在 users.xml 文件中配置了配额), “disk”(如果由 SQL 查询配置的配额). +- `keys` ([Array](../../sql-reference/data-types/array.md)([Enum8](../../sql-reference/data-types/enum.md))) — Key指定配额应该如何共享. 如果两个连接使用相同的配额和键,则它们共享相同数量的资源. 值: + - `[]` — 所有用户共享相同的配额. + - `['user_name']` — 相同用户名的连接共享相同的配额. + - `['ip_address']` — 来自同一IP的连接共享相同的配额. + - `['client_key']` — 具有相同密钥的连接共享相同配额. 密钥必须由客户端显式提供. 使用[clickhouse-client](../../interfaces/cli.md)时, 在 `--quota_key` 参数中传递一个key值, 或者在客户端配置文件中使用 `quota_key` 参数. 使用 HTTP 接口时, 使用 `X-ClickHouse-Quota` 报头. + - `['user_name', 'client_key']` — 具有相同 `client_key` 的连接共享相同的配额. 如果客户端没有提供密钥, 配额将跟踪 `user_name`. + - `['client_key', 'ip_address']` — 具有相同 `client_key` 的连接共享相同的配额. 如果客户端没有提供密钥, 配额将跟踪 `ip_address`. +- `durations` ([Array](../../sql-reference/data-types/array.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 时间间隔以秒为单位. +- `apply_to_all` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 逻辑值. 它显示了配额应用于哪些用户. 值: + - `0` — 配额应用于 `apply_to_list` 中指定的用户. + - `1` — 配额适用于除 `apply_to_except` 中列出的用户之外的所有用户. +- `apply_to_list` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 需要应用配额的用户名/[角色](../../operations/access-rights.md#role-management) 列表. +- `apply_to_except` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 不需要应用配额的用户名/角色列表. + +## 另请参阅 {#see-also} + +- [查看配额信息](../../sql-reference/statements/show.md#show-quotas-statement) + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/quotas) + diff --git a/docs/zh/operations/system-tables/quotas_usage.md b/docs/zh/operations/system-tables/quotas_usage.md deleted file mode 120000 index ba204a4d9c0..00000000000 --- a/docs/zh/operations/system-tables/quotas_usage.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/quotas_usage.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/quotas_usage.md b/docs/zh/operations/system-tables/quotas_usage.md new file mode 100644 index 00000000000..f554539ecfe --- /dev/null +++ b/docs/zh/operations/system-tables/quotas_usage.md @@ -0,0 +1,35 @@ +# system.quotas_usage {#system_tables-quotas_usage} + +所有用户配额使用情况. + +列信息: +- `quota_name` ([String](../../sql-reference/data-types/string.md)) — 配额名称. +- `quota_key` ([String](../../sql-reference/data-types/string.md)) — 配额key值. +- `is_current` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 当前用户配额使用情况. +- `start_time` ([Nullable](../../sql-reference/data-types/nullable.md)([DateTime](../../sql-reference/data-types/datetime.md)))) — 计算资源消耗的开始时间. +- `end_time` ([Nullable](../../sql-reference/data-types/nullable.md)([DateTime](../../sql-reference/data-types/datetime.md)))) — 计算资源消耗的结束时间. +- `duration` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt32](../../sql-reference/data-types/int-uint.md))) — 计算资源消耗的时间间隔长度,单位为秒. +- `queries` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 在此间隔内的请求总数. +- `max_queries` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 最大请求数. +- `query_selects` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 此间隔内查询请求的总数. +- `max_query_selects` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 查询请求的最大数量. +- `query_inserts` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 此间隔内插入请求的总数. +- `max_query_inserts` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 最大插入请求数. +- `errors` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 抛出异常的查询数. +- `max_errors` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 最大误差数. +- `result_rows` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 结果给出的总行数. +- `max_result_rows` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 从表中读取的最大源行数. +- `result_bytes` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 用于存储查询结果的RAM容量(以字节为单位). +- `max_result_bytes` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 用于存储查询结果的最大RAM容量, 以字节为单位. +- `read_rows` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md)))) — 为在所有远程服务器上运行查询而从表中读取的源行总数. +- `max_read_rows` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 参与查询的所有表和表函数中读取的最大行数. +- `read_bytes` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 参与查询的所有表和表函数中读取的总字节数. +- `max_read_bytes` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — 所有表和表函数中读取的最大字节数. +- `execution_time` ([Nullable](../../sql-reference/data-types/nullable.md)([Float64](../../sql-reference/data-types/float.md))) — 总查询执行时间, 以秒为单位(挂墙时间). +- `max_execution_time` ([Nullable](../../sql-reference/data-types/nullable.md)([Float64](../../sql-reference/data-types/float.md))) — 查询最大执行时间. + +## 另请参阅 {#see-also} + +- [查看配额信息](../../sql-reference/statements/show.md#show-quota-statement) + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/quotas_usage) diff --git a/docs/zh/operations/system-tables/replicated_fetches.md b/docs/zh/operations/system-tables/replicated_fetches.md deleted file mode 120000 index bf4547ebd07..00000000000 --- a/docs/zh/operations/system-tables/replicated_fetches.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/replicated_fetches.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/replicated_fetches.md b/docs/zh/operations/system-tables/replicated_fetches.md new file mode 100644 index 00000000000..fededbaf28d --- /dev/null +++ b/docs/zh/operations/system-tables/replicated_fetches.md @@ -0,0 +1,70 @@ +# system.replicated_fetches {#system_tables-replicated_fetches} + +包含当前正在运行的后台提取的信息. + +列信息: + +- `database` ([String](../../sql-reference/data-types/string.md)) — 数据库名称. + +- `table` ([String](../../sql-reference/data-types/string.md)) — 表名称. + +- `elapsed` ([Float64](../../sql-reference/data-types/float.md)) — 显示当前正在运行的后台提取开始以来经过的时间(以秒为单位). + +- `progress` ([Float64](../../sql-reference/data-types/float.md)) — 完成工作的百分比从0到1. + +- `result_part_name` ([String](../../sql-reference/data-types/string.md)) — 显示当前正在运行的后台提取的结果而形成的部分的名称. + +- `result_part_path` ([String](../../sql-reference/data-types/string.md)) — 显示当前正在运行的后台提取的结果而形成的部分的绝对路径. + +- `partition_id` ([String](../../sql-reference/data-types/string.md)) — 分区 ID. + +- `total_size_bytes_compressed` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 结果部分中压缩数据的总大小(以字节为单位). + +- `bytes_read_compressed` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 从结果部分读取的压缩字节数. + +- `source_replica_path` ([String](../../sql-reference/data-types/string.md)) — 源副本的绝对路径. + +- `source_replica_hostname` ([String](../../sql-reference/data-types/string.md)) — 源副本的主机名称. + +- `source_replica_port` ([UInt16](../../sql-reference/data-types/int-uint.md)) — 源副本的端口号. + +- `interserver_scheme` ([String](../../sql-reference/data-types/string.md)) — Name of the interserver scheme. + +- `URI` ([String](../../sql-reference/data-types/string.md)) — 统一资源标识符. + +- `to_detached` ([UInt8](../../sql-reference/data-types/int-uint.md)) — 该标志指示是否正在使用 `TO DETACHED` 表达式执行当前正在运行的后台提取. + +- `thread_id` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 线程标识符. + +**示例** + +``` sql +SELECT * FROM system.replicated_fetches LIMIT 1 FORMAT Vertical; +``` + +``` text +Row 1: +────── +database: default +table: t +elapsed: 7.243039876 +progress: 0.41832135995612835 +result_part_name: all_0_0_0 +result_part_path: /var/lib/clickhouse/store/700/70080a04-b2de-4adf-9fa5-9ea210e81766/all_0_0_0/ +partition_id: all +total_size_bytes_compressed: 1052783726 +bytes_read_compressed: 440401920 +source_replica_path: /clickhouse/test/t/replicas/1 +source_replica_hostname: node1 +source_replica_port: 9009 +interserver_scheme: http +URI: http://node1:9009/?endpoint=DataPartsExchange%3A%2Fclickhouse%2Ftest%2Ft%2Freplicas%2F1&part=all_0_0_0&client_protocol_version=4&compress=false +to_detached: 0 +thread_id: 54 +``` + +**另请参阅** + +- [管理 ReplicatedMergeTree 表](../../sql-reference/statements/system/#query-language-system-replicated) + +[原始文章](https://clickhouse.com/docs/en/operations/system_tables/replicated_fetches) diff --git a/docs/zh/operations/system-tables/replication_queue.md b/docs/zh/operations/system-tables/replication_queue.md deleted file mode 120000 index cdc452594e6..00000000000 --- a/docs/zh/operations/system-tables/replication_queue.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/replication_queue.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/replication_queue.md b/docs/zh/operations/system-tables/replication_queue.md new file mode 100644 index 00000000000..0c9e19f76d0 --- /dev/null +++ b/docs/zh/operations/system-tables/replication_queue.md @@ -0,0 +1,91 @@ +# system.replication_queue {#system_tables-replication_queue} + +包含用于 `ReplicatedMergeTree` 系列表的复制队列中存储在ZooKeeper中的任务的信息. + +列信息: + +- `database` ([String](../../sql-reference/data-types/string.md)) — 数据库名称. + +- `table` ([String](../../sql-reference/data-types/string.md)) — 表名称. + +- `replica_name` ([String](../../sql-reference/data-types/string.md)) — ZooKeeper中的副本名称. 同一张表的不同副本具有不同的名称. + +- `position` ([UInt32](../../sql-reference/data-types/int-uint.md)) — 任务在队列中的位置. + +- `node_name` ([String](../../sql-reference/data-types/string.md)) — ZooKeeper中的节点名称. + +- `type` ([String](../../sql-reference/data-types/string.md)) — 队列中任务的类型, 其中之一: + + - `GET_PART` — 从另一个副本获取分片. + - `ATTACH_PART` — 附加的部分, 可能来自我们自己的副本(如果在 `detached` 文件夹中找到). 您可以将其视为具有一些优化的 `GET_PART` , 因为它们几乎相同. + - `MERGE_PARTS` — 合并分片. + - `DROP_RANGE` — 删除指定分区内指定编号范围内的分片. + - `CLEAR_COLUMN` — 注意:已弃用. 从指定分区删除特定列. + - `CLEAR_INDEX` — 注意:已弃用. 从指定分区删除特定索引. + - `REPLACE_RANGE` — 丢弃一定范围的零件并用新零件替换它们. + - `MUTATE_PART` — 对分片应用一个或多个突变. + - `ALTER_METADATA` — 根据全局 /metadata 和 /columns 路径应用alter修改. + +- `create_time` ([Datetime](../../sql-reference/data-types/datetime.md)) — 提交任务执行的日期和时间. + +- `required_quorum` ([UInt32](../../sql-reference/data-types/int-uint.md)) — 等待任务完成并确认完成的副本数. 此列仅与 `GET_PARTS` 任务相关. + +- `source_replica` ([String](../../sql-reference/data-types/string.md)) — 源副本的名称. + +- `new_part_name` ([String](../../sql-reference/data-types/string.md)) — 新分片的名称. + +- `parts_to_merge` ([Array](../../sql-reference/data-types/array.md) ([String](../../sql-reference/data-types/string.md))) — 要合并或更新的分片名称. + +- `is_detach` ([UInt8](../../sql-reference/data-types/int-uint.md)) — 该标志指示 `DETACH_PARTS` 任务是否在队列中. + +- `is_currently_executing` ([UInt8](../../sql-reference/data-types/int-uint.md)) — 该标志指示当前是否正在执行特定任务. + +- `num_tries` ([UInt32](../../sql-reference/data-types/int-uint.md)) — 尝试完成任务失败的次数. + +- `last_exception` ([String](../../sql-reference/data-types/string.md)) — 发生的最后一个错误的短信(如果有). + +- `last_attempt_time` ([Datetime](../../sql-reference/data-types/datetime.md)) — 上次尝试任务的日期和时间. + +- `num_postponed` ([UInt32](../../sql-reference/data-types/int-uint.md)) — 延期任务数. + +- `postpone_reason` ([String](../../sql-reference/data-types/string.md)) — 任务延期的原因. + +- `last_postpone_time` ([Datetime](../../sql-reference/data-types/datetime.md)) — 上次推迟任务的日期和时间. + +- `merge_type` ([String](../../sql-reference/data-types/string.md)) — 当前合并的类型. 如果是突变则为空. + +**示例** + +``` sql +SELECT * FROM system.replication_queue LIMIT 1 FORMAT Vertical; +``` + +``` text +Row 1: +────── +database: merge +table: visits_v2 +replica_name: mtgiga001-1t.metrika.yandex.net +position: 15 +node_name: queue-0009325559 +type: MERGE_PARTS +create_time: 2020-12-07 14:04:21 +required_quorum: 0 +source_replica: mtgiga001-1t.metrika.yandex.net +new_part_name: 20201130_121373_121384_2 +parts_to_merge: ['20201130_121373_121378_1','20201130_121379_121379_0','20201130_121380_121380_0','20201130_121381_121381_0','20201130_121382_121382_0','20201130_121383_121383_0','20201130_121384_121384_0'] +is_detach: 0 +is_currently_executing: 0 +num_tries: 36 +last_exception: Code: 226, e.displayText() = DB::Exception: Marks file '/opt/clickhouse/data/merge/visits_v2/tmp_fetch_20201130_121373_121384_2/CounterID.mrk' does not exist (version 20.8.7.15 (official build)) +last_attempt_time: 2020-12-08 17:35:54 +num_postponed: 0 +postpone_reason: +last_postpone_time: 1970-01-01 03:00:00 +``` + +**另请参阅** + +- [管理 ReplicatedMergeTree 表](../../sql-reference/statements/system.md#query-language-system-replicated) + +[原始文章](https://clickhouse.com/docs/en/operations/system_tables/replication_queue) diff --git a/docs/zh/operations/system-tables/role-grants.md b/docs/zh/operations/system-tables/role-grants.md deleted file mode 120000 index 6a25ffa31ce..00000000000 --- a/docs/zh/operations/system-tables/role-grants.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/role-grants.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/role-grants.md b/docs/zh/operations/system-tables/role-grants.md new file mode 100644 index 00000000000..8957c73df73 --- /dev/null +++ b/docs/zh/operations/system-tables/role-grants.md @@ -0,0 +1,21 @@ +#system.role_grants {#system_tables-role_grants} + +包含用户和角色的角色授予. 向该表添加项, 请使用`GRANT role TO user`. + +列信息: + +- `user_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — 用户名称. + +- `role_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — 角色名称. + +- `granted_role_name` ([String](../../sql-reference/data-types/string.md)) — 授予 `role_name` 角色的角色名称. 要将一个角色授予另一个角色, 请使用`GRANT role1 TO role2`. + +- `granted_role_is_default` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 显示 `granted_role` 是否为默认角色的标志. 参考值: + - 1 — `granted_role` is a default role. + - 0 — `granted_role` is not a default role. + +- `with_admin_option` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 显示 `granted_role` 是否是具有 [ADMIN OPTION](../../sql-reference/statements/grant.md#admin-option-privilege) 特权的角色的标志. 参考值: + - 1 — 该角色具有 `ADMIN OPTION` 权限. + - 0 — 该角色不具有 `ADMIN OPTION` 权限. + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/role-grants) diff --git a/docs/zh/operations/system-tables/roles.md b/docs/zh/operations/system-tables/roles.md deleted file mode 120000 index 391bc980a48..00000000000 --- a/docs/zh/operations/system-tables/roles.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/roles.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/roles.md b/docs/zh/operations/system-tables/roles.md new file mode 100644 index 00000000000..c3537b978e4 --- /dev/null +++ b/docs/zh/operations/system-tables/roles.md @@ -0,0 +1,15 @@ +# system.roles {#system_tables-roles} + +包含有关已配置的 [角色](../../operations/access-rights.md#role-management) 信息. + +列信息: + +- `name` ([String](../../sql-reference/data-types/string.md)) — 角色名称. +- `id` ([UUID](../../sql-reference/data-types/uuid.md)) — 角色 ID. +- `storage` ([String](../../sql-reference/data-types/string.md)) — 角色存储的路径. 在 `access_control_path` 参数中配置. + +## 另请参阅 {#see-also} + +- [查看角色信息](../../sql-reference/statements/show.md#show-roles-statement) + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/roles) diff --git a/docs/zh/operations/system-tables/row_policies.md b/docs/zh/operations/system-tables/row_policies.md deleted file mode 120000 index b194161cf1d..00000000000 --- a/docs/zh/operations/system-tables/row_policies.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/row_policies.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/row_policies.md b/docs/zh/operations/system-tables/row_policies.md new file mode 100644 index 00000000000..4eaf291cc68 --- /dev/null +++ b/docs/zh/operations/system-tables/row_policies.md @@ -0,0 +1,34 @@ +# system.row_policies {#system_tables-row_policies} + +包含一个特定表的过滤器, 以及应该使用此行策略的角色和/或用户列表. + +列信息: +- `name` ([String](../../sql-reference/data-types/string.md)) — 行策略的名称. + +- `short_name` ([String](../../sql-reference/data-types/string.md)) — 行策略的短名称. 行策略的名称是复合的,例如:myfilter ON mydb.mytable. 这里 "myfilter ON mydb.mytable" 是行策略的名称, "myfilter" 是它的简称. + +- `database` ([String](../../sql-reference/data-types/string.md)) — 数据库名称. + +- `table` ([String](../../sql-reference/data-types/string.md)) — 表名称. + +- `id` ([UUID](../../sql-reference/data-types/uuid.md)) — 行策略 ID. + +- `storage` ([String](../../sql-reference/data-types/string.md)) — 存储行策略的目录名. + +- `select_filter` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — 用于过滤行的条件. + +- `is_restrictive` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 显示行策略是否限制对行的访问, 参考 [CREATE ROW POLICY](../../sql-reference/statements/create/row-policy.md#create-row-policy-as). 值: +- `0` — 行策略使用 `AS PERMISSIVE` 子句定义. +- `1` — 行策略使用 `AS RESTRICTIVE` 子句定义. + +- `apply_to_all` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 显示为所有角色和/或用户设置的行策略. + +- `apply_to_list` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 应用行策略的角色和/或用户列表. + +- `apply_to_except` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 行策略应用于除列出的角色和/或用户之外的所有角色和/或用户. + +## 另请参阅 {#see-also} + +- [SHOW POLICIES](../../sql-reference/statements/show.md#show-policies-statement) + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/row_policies) diff --git a/docs/zh/operations/system-tables/settings_profile_elements.md b/docs/zh/operations/system-tables/settings_profile_elements.md deleted file mode 120000 index 3b0e70ead49..00000000000 --- a/docs/zh/operations/system-tables/settings_profile_elements.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/settings_profile_elements.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/settings_profile_elements.md b/docs/zh/operations/system-tables/settings_profile_elements.md new file mode 100644 index 00000000000..2f5eb5b3044 --- /dev/null +++ b/docs/zh/operations/system-tables/settings_profile_elements.md @@ -0,0 +1,30 @@ +# system.settings_profile_elements {#system_tables-settings_profile_elements} + +描述settings配置文件的内容: + +- 约束. +- setting适用的角色和用户. +- 父级 setting 配置文件. + +列信息: +- `profile_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — Setting 配置文件名称. + +- `user_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — 用户名称. + +- `role_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — 角色名称. + +- `index` ([UInt64](../../sql-reference/data-types/int-uint.md)) — settings 配置文件元素的顺序编号. + +- `setting_name` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — Setting 名称. + +- `value` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — Setting 值. + +- `min` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — setting 最小值. 未设置则赋 `NULL`. + +- `max` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — setting 最大值. 未设置则赋 `NULL`. + +- `readonly` ([Nullable](../../sql-reference/data-types/nullable.md)([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges))) — 只允许读查询的配置文件. + +- `inherit_profile` ([Nullable](../../sql-reference/data-types/nullable.md)([String](../../sql-reference/data-types/string.md))) — 此setting配置文件的父配置文件. 未设置则赋 `NULL`. 设置则将从其父配置文件继承所有设置的值和约束(`min`、`max`、`readonly`). + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/settings_profile_elements) diff --git a/docs/zh/operations/system-tables/settings_profiles.md b/docs/zh/operations/system-tables/settings_profiles.md deleted file mode 120000 index 1c559bf2445..00000000000 --- a/docs/zh/operations/system-tables/settings_profiles.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/settings_profiles.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/settings_profiles.md b/docs/zh/operations/system-tables/settings_profiles.md new file mode 100644 index 00000000000..46102f9c2a6 --- /dev/null +++ b/docs/zh/operations/system-tables/settings_profiles.md @@ -0,0 +1,24 @@ +# system.settings_profiles {#system_tables-settings_profiles} + +包含 Setting 配置文件中指定的属性. + +列信息: +- `name` ([String](../../sql-reference/data-types/string.md)) — Setting 配置文件 name. + +- `id` ([UUID](../../sql-reference/data-types/uuid.md)) — Setting 配置文件 ID. + +- `storage` ([String](../../sql-reference/data-types/string.md)) — Setting 配置文件的存储路径. 在`access_control_path`参数中配置. + +- `num_elements` ([UInt64](../../sql-reference/data-types/int-uint.md)) — `system.settings_profile_elements` 表中此配置文件的元素数. + +- `apply_to_all` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 为所有角色和/或用户设置的 Setting 配置文件. + +- `apply_to_list` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 应用 Setting 配置文件的角色和/或用户列表. + +- `apply_to_except` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — Setting 配置文件适用于除所列角色和/或用户之外的所有角色和/或用户. + +## 另请参阅 {#see-also} + +- [查看配置文件信息](../../sql-reference/statements/show.md#show-profiles-statement) + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/settings_profiles) diff --git a/docs/zh/operations/system-tables/stack_trace.md b/docs/zh/operations/system-tables/stack_trace.md deleted file mode 120000 index 8dea20028f1..00000000000 --- a/docs/zh/operations/system-tables/stack_trace.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/stack_trace.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/stack_trace.md b/docs/zh/operations/system-tables/stack_trace.md new file mode 100644 index 00000000000..8e46efd17ab --- /dev/null +++ b/docs/zh/operations/system-tables/stack_trace.md @@ -0,0 +1,91 @@ +# system.stack_trace {#system-tables_stack_trace} + +包含所有服务器线程的堆栈跟踪. 允许开发人员对服务器状态进行自省. + +要分析堆栈帧, 请使用 `addressToLine`, `addressToSymbol` and `demangle` [内省函数](../../sql-reference/functions/introspection.md). + +列信息: + +- `thread_name` ([String](../../sql-reference/data-types/string.md)) — 线程名称. +- `thread_id` ([UInt64](../../sql-reference/data-types/int-uint.md)) — 线程标识符. +- `query_id` ([String](../../sql-reference/data-types/string.md)) — 用于获取从[query_log](../system-tables/query_log.md) 系统表运行的查询的详细信息查询标识符. +- `trace` ([Array(UInt64)](../../sql-reference/data-types/array.md)) — [堆栈跟踪](https://en.wikipedia.org/wiki/Stack_trace) 表示存储调用方法的物理地址列表. + +**示例** + +启用内省功能: + +``` sql +SET allow_introspection_functions = 1; +``` + +从 ClickHouse 目标文件中获取符号: + +``` sql +WITH arrayMap(x -> demangle(addressToSymbol(x)), trace) AS all SELECT thread_name, thread_id, query_id, arrayStringConcat(all, '\n') AS res FROM system.stack_trace LIMIT 1 \G; +``` + +``` text +Row 1: +────── +thread_name: clickhouse-serv + +thread_id: 686 +query_id: 1a11f70b-626d-47c1-b948-f9c7b206395d +res: sigqueue +DB::StorageSystemStackTrace::fillData(std::__1::vector::mutable_ptr, std::__1::allocator::mutable_ptr > >&, DB::Context const&, DB::SelectQueryInfo const&) const +DB::IStorageSystemOneBlock::read(std::__1::vector, std::__1::allocator >, std::__1::allocator, std::__1::allocator > > > const&, DB::SelectQueryInfo const&, DB::Context const&, DB::QueryProcessingStage::Enum, unsigned long, unsigned int) +DB::InterpreterSelectQuery::executeFetchColumns(DB::QueryProcessingStage::Enum, DB::QueryPipeline&, std::__1::shared_ptr const&, std::__1::vector, std::__1::allocator >, std::__1::allocator, std::__1::allocator > > > const&) +DB::InterpreterSelectQuery::executeImpl(DB::QueryPipeline&, std::__1::shared_ptr const&, std::__1::optional) +DB::InterpreterSelectQuery::execute() +DB::InterpreterSelectWithUnionQuery::execute() +DB::executeQueryImpl(char const*, char const*, DB::Context&, bool, DB::QueryProcessingStage::Enum, bool, DB::ReadBuffer*) +DB::executeQuery(std::__1::basic_string, std::__1::allocator > const&, DB::Context&, bool, DB::QueryProcessingStage::Enum, bool) +DB::TCPHandler::runImpl() +DB::TCPHandler::run() +Poco::Net::TCPServerConnection::start() +Poco::Net::TCPServerDispatcher::run() +Poco::PooledThread::run() +Poco::ThreadImpl::runnableEntry(void*) +start_thread +__clone +``` + +在 ClickHouse 源代码中获取文件名和行号: + +``` sql +WITH arrayMap(x -> addressToLine(x), trace) AS all, arrayFilter(x -> x LIKE '%/dbms/%', all) AS dbms SELECT thread_name, thread_id, query_id, arrayStringConcat(notEmpty(dbms) ? dbms : all, '\n') AS res FROM system.stack_trace LIMIT 1 \G; +``` + +``` text +Row 1: +────── +thread_name: clickhouse-serv + +thread_id: 686 +query_id: cad353e7-1c29-4b2e-949f-93e597ab7a54 +res: /lib/x86_64-linux-gnu/libc-2.27.so +/build/obj-x86_64-linux-gnu/../src/Storages/System/StorageSystemStackTrace.cpp:182 +/build/obj-x86_64-linux-gnu/../contrib/libcxx/include/vector:656 +/build/obj-x86_64-linux-gnu/../src/Interpreters/InterpreterSelectQuery.cpp:1338 +/build/obj-x86_64-linux-gnu/../src/Interpreters/InterpreterSelectQuery.cpp:751 +/build/obj-x86_64-linux-gnu/../contrib/libcxx/include/optional:224 +/build/obj-x86_64-linux-gnu/../src/Interpreters/InterpreterSelectWithUnionQuery.cpp:192 +/build/obj-x86_64-linux-gnu/../src/Interpreters/executeQuery.cpp:384 +/build/obj-x86_64-linux-gnu/../src/Interpreters/executeQuery.cpp:643 +/build/obj-x86_64-linux-gnu/../src/Server/TCPHandler.cpp:251 +/build/obj-x86_64-linux-gnu/../src/Server/TCPHandler.cpp:1197 +/build/obj-x86_64-linux-gnu/../contrib/poco/Net/src/TCPServerConnection.cpp:57 +/build/obj-x86_64-linux-gnu/../contrib/libcxx/include/atomic:856 +/build/obj-x86_64-linux-gnu/../contrib/poco/Foundation/include/Poco/Mutex_POSIX.h:59 +/build/obj-x86_64-linux-gnu/../contrib/poco/Foundation/include/Poco/AutoPtr.h:223 +/lib/x86_64-linux-gnu/libpthread-2.27.so +/lib/x86_64-linux-gnu/libc-2.27.so +``` + +**另请参阅** + +- [Introspection Functions](../../sql-reference/functions/introspection.md) — 哪些内省功能是可用的以及如何使用它们. +- [system.trace_log](../system-tables/trace_log.md) — 包含由抽样查询分析器收集的堆栈跟踪. +- [arrayMap](../../sql-reference/functions/array-functions.md#array-map) — `arrayMap` 函数的描述和使用示例 +- [arrayFilter](../../sql-reference/functions/array-functions.md#array-filter) — `arrayFilter` 函数的描述和使用示例. diff --git a/docs/zh/operations/system-tables/time_zones.md b/docs/zh/operations/system-tables/time_zones.md deleted file mode 120000 index d7b0f07d326..00000000000 --- a/docs/zh/operations/system-tables/time_zones.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/time_zones.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/time_zones.md b/docs/zh/operations/system-tables/time_zones.md new file mode 100644 index 00000000000..d01725edf5b --- /dev/null +++ b/docs/zh/operations/system-tables/time_zones.md @@ -0,0 +1,30 @@ +# system.time_zones {#system-time_zones} + +包含 ClickHouse 服务器支持的时区列表. 此时区列表可能因 ClickHouse 的版本而异 + +列信息: + +- `time_zone` (String) — List of supported time zones. + +**示例** + +``` sql +SELECT * FROM system.time_zones LIMIT 10 +``` + +``` text +┌─time_zone──────────┐ +│ Africa/Abidjan │ +│ Africa/Accra │ +│ Africa/Addis_Ababa │ +│ Africa/Algiers │ +│ Africa/Asmara │ +│ Africa/Asmera │ +│ Africa/Bamako │ +│ Africa/Bangui │ +│ Africa/Banjul │ +│ Africa/Bissau │ +└────────────────────┘ +``` + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/time_zones) diff --git a/docs/zh/operations/system-tables/users.md b/docs/zh/operations/system-tables/users.md deleted file mode 120000 index 540c5ac6620..00000000000 --- a/docs/zh/operations/system-tables/users.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/users.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/users.md b/docs/zh/operations/system-tables/users.md new file mode 100644 index 00000000000..521c54de801 --- /dev/null +++ b/docs/zh/operations/system-tables/users.md @@ -0,0 +1,34 @@ +# system.users {#system_tables-users} + +包含服务器上配置的[用户账号](../../operations/access-rights.md#user-account-management)的列表. + +列信息: +- `name` ([String](../../sql-reference/data-types/string.md)) — 用户名称. + +- `id` ([UUID](../../sql-reference/data-types/uuid.md)) — 用户 ID. + +- `storage` ([String](../../sql-reference/data-types/string.md)) — 用户存储路径. 在 `access_control_path` 参数中配置. + +- `auth_type` ([Enum8](../../sql-reference/data-types/enum.md)('no_password' = 0,'plaintext_password' = 1, 'sha256_password' = 2, 'double_sha1_password' = 3)) — 显示认证类型. 有多种用户识别方式: 无密码, 纯文本密码, [SHA256](https://ru.wikipedia.org/wiki/SHA-2)-encoded password or with [double SHA-1](https://ru.wikipedia.org/wiki/SHA-1)-编码的密码. + +- `auth_params` ([String](../../sql-reference/data-types/string.md)) — JSON 格式的身份验证参数取决于`auth_type`. + +- `host_ip` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 许连接到 ClickHouse 服务器的主机的 IP 地址. + +- `host_names` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 允许连接到 ClickHouse 服务器的主机名称. + +- `host_names_regexp` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 允许连接到 ClickHouse 服务器的主机名的正则表达式. + +- `host_names_like` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 使用 LIKE 谓词设置允许连接到 ClickHouse 服务器的主机名称. + +- `default_roles_all` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — 显示默认情况下为用户设置的所有授予的角色. + +- `default_roles_list` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 默认提供的授权角色列表. + +- `default_roles_except` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — 除了列出的角色之外所有授予的角色都设置为默认值. + +## 另请参阅 {#see-also} + +- [查看用户信息](../../sql-reference/statements/show.md#show-users-statement) + +[原始文章](https://clickhouse.com/docs/en/operations/system-tables/users) diff --git a/docs/zh/operations/system-tables/zookeeper_log.md b/docs/zh/operations/system-tables/zookeeper_log.md deleted file mode 120000 index c7db82e978a..00000000000 --- a/docs/zh/operations/system-tables/zookeeper_log.md +++ /dev/null @@ -1 +0,0 @@ -../../../en/operations/system-tables/zookeeper_log.md \ No newline at end of file diff --git a/docs/zh/operations/system-tables/zookeeper_log.md b/docs/zh/operations/system-tables/zookeeper_log.md new file mode 100644 index 00000000000..678e2b8a93b --- /dev/null +++ b/docs/zh/operations/system-tables/zookeeper_log.md @@ -0,0 +1,129 @@ +# system.zookeeper_log {#system-zookeeper_log} + +此表包含有关对 ZooKeeper 服务器的请求及其响应的参数的信息. + +对于请求,只填充有请求参数的列,其余列填充默认值 (`0` or `NULL`). 当响应到达时,来自响应的数据被添加到其他列. + +带有请求参数的列: + +- `type` ([Enum](../../sql-reference/data-types/enum.md)) — ZooKeeper 客户端中的事件类型. 可以具有以下值之一: + - `Request` — 请求已发送. + - `Response` — 已收到回复. + - `Finalize` — 连接丢失, 未收到响应. +- `event_date` ([Date](../../sql-reference/data-types/date.md)) — 事件发生的日期. +- `event_time` ([DateTime64](../../sql-reference/data-types/datetime64.md)) — 事件发生的日期和时间. +- `address` ([IPv6](../../sql-reference/data-types/domains/ipv6.md)) — 用于发出请求的 ZooKeeper 服务器的 IP 地址. +- `port` ([UInt16](../../sql-reference/data-types/int-uint.md)) — 用于发出请求的 ZooKeeper 服务器的端口. +- `session_id` ([Int64](../../sql-reference/data-types/int-uint.md)) — ZooKeeper 服务器为每个连接设置的会话 ID. +- `xid` ([Int32](../../sql-reference/data-types/int-uint.md)) — 会话中请求的 ID. 这通常是一个连续的请求编号. 请求行和配对的 `response`/`finalize` 行相同. +- `has_watch` ([UInt8](../../sql-reference/data-types/int-uint.md)) — 请求是否设置了 [watch](https://zookeeper.apache.org/doc/r3.3.3/zookeeperProgrammers.html#ch_zkWatches) . +- `op_num` ([Enum](../../sql-reference/data-types/enum.md)) — 请求或响应的类型. +- `path` ([String](../../sql-reference/data-types/string.md)) — 请求中指定的 ZooKeeper 节点的路径, 如果请求不需要指定路径, 则为空字符串. +- `data` ([String](../../sql-reference/data-types/string.md)) — 写入 ZooKeeper 节点的数据(对于 `SET` 和 `CREATE` 请求 - 请求想要写入的内容,对于 `GET` 请求的响应 - 读取的内容)或空字符串. +- `is_ephemeral` ([UInt8](../../sql-reference/data-types/int-uint.md)) — ZooKeeper 节点是否被创建为 [ephemeral](https://zookeeper.apache.org/doc/r3.3.3/zookeeperProgrammers.html#Ephemeral+Nodes). +- `is_sequential` ([UInt8](../../sql-reference/data-types/int-uint.md)) — ZooKeeper 节点是否被创建为 [sequential](https://zookeeper.apache.org/doc/r3.3.3/zookeeperProgrammers.html#Sequence+Nodes+--+Unique+Naming). +- `version` ([Nullable(Int32)](../../sql-reference/data-types/nullable.md)) — 请求执行时期望的 ZooKeeper 节点的版本. 这支持`CHECK`、`SET`、`REMOVE`请求(如果请求不检查版本, 则为相关的`-1`或不支持版本检查的其他请求的`NULL`). +- `requests_size` ([UInt32](../../sql-reference/data-types/int-uint.md)) —多请求中包含的请求数(这是一个特殊的请求,由几个连续的普通请求组成, 并以原子方式执行). 多请求中包含的所有请求都将具有相同的 `xid`. +- `request_idx` ([UInt32](../../sql-reference/data-types/int-uint.md)) — 包含在多请求中的请求数(对于多请求 — `0`,然后从 `1` 开始). + +带有请求响应参数的列: + +- `zxid` ([Int64](../../sql-reference/data-types/int-uint.md)) — ZooKeeper 事务 ID. ZooKeeper 服务器响应成功执行的请求而发出的序列号(`0` 表示请求没有执行/返回错误/客户端不知道请求是否被执行). +- `error` ([Nullable(Enum)](../../sql-reference/data-types/nullable.md)) — 错误代码. 可以有很多值, 这里只是其中的一些: + - `ZOK` — 请求被安全执行. + - `ZCONNECTIONLOSS` — 连接丢失. + - `ZOPERATIONTIMEOUT` — 请求执行超时已过期. + - `ZSESSIONEXPIRED` — 会话已过期. + - `NULL` — 请求完成. +- `watch_type` ([Nullable(Enum)](../../sql-reference/data-types/nullable.md)) — `watch` 事件的类型(对于带有 `op_num` = `Watch` 的响应), 对于其余响应:`NULL`. +- `watch_state` ([Nullable(Enum)](../../sql-reference/data-types/nullable.md)) — `watch` 事件的状态(对于带有 `op_num` = `Watch` 的响应), 对于其余响应:`NULL`. +- `path_created` ([String](../../sql-reference/data-types/string.md)) — 创建的 ZooKeeper 节点的路径(用于响应 `CREATE` 请求),如果节点被创建为 `sequential`, 则可能与 `path` 不同. +- `stat_czxid` ([Int64](../../sql-reference/data-types/int-uint.md)) — 导致创建此 ZooKeeper 节点的更改的 `zxid`. +- `stat_mzxid` ([Int64](../../sql-reference/data-types/int-uint.md)) — 最后一次修改该ZooKeeper节点的 `zxid`. +- `stat_pzxid` ([Int64](../../sql-reference/data-types/int-uint.md)) — 最后一次修改该ZooKeeper节点的子节点的事务ID +- `stat_version` ([Int32](../../sql-reference/data-types/int-uint.md)) — 此 ZooKeeper 节点的数据更改次数. +- `stat_cversion` ([Int32](../../sql-reference/data-types/int-uint.md)) — 此 ZooKeeper 节点的子节点的更改次数. +- `stat_dataLength` ([Int32](../../sql-reference/data-types/int-uint.md)) — 这个 ZooKeeper 节点的数据字段的长度. +- `stat_numChildren` ([Int32](../../sql-reference/data-types/int-uint.md)) — 此 ZooKeeper 节点的子节点数. +- `children` ([Array(String)](../../sql-reference/data-types/array.md)) — ZooKeeper 子节点列表(用于响应 `LIST` 请求). + +**示例** + +查询: + +``` sql +SELECT * FROM system.zookeeper_log WHERE (session_id = '106662742089334927') AND (xid = '10858') FORMAT Vertical; +``` + +结果: + +``` text +Row 1: +────── +type: Request +event_date: 2021-08-09 +event_time: 2021-08-09 21:38:30.291792 +address: :: +port: 2181 +session_id: 106662742089334927 +xid: 10858 +has_watch: 1 +op_num: List +path: /clickhouse/task_queue/ddl +data: +is_ephemeral: 0 +is_sequential: 0 +version: ᴺᵁᴸᴸ +requests_size: 0 +request_idx: 0 +zxid: 0 +error: ᴺᵁᴸᴸ +watch_type: ᴺᵁᴸᴸ +watch_state: ᴺᵁᴸᴸ +path_created: +stat_czxid: 0 +stat_mzxid: 0 +stat_pzxid: 0 +stat_version: 0 +stat_cversion: 0 +stat_dataLength: 0 +stat_numChildren: 0 +children: [] + +Row 2: +────── +type: Response +event_date: 2021-08-09 +event_time: 2021-08-09 21:38:30.292086 +address: :: +port: 2181 +session_id: 106662742089334927 +xid: 10858 +has_watch: 1 +op_num: List +path: /clickhouse/task_queue/ddl +data: +is_ephemeral: 0 +is_sequential: 0 +version: ᴺᵁᴸᴸ +requests_size: 0 +request_idx: 0 +zxid: 16926267 +error: ZOK +watch_type: ᴺᵁᴸᴸ +watch_state: ᴺᵁᴸᴸ +path_created: +stat_czxid: 16925469 +stat_mzxid: 16925469 +stat_pzxid: 16926179 +stat_version: 0 +stat_cversion: 7 +stat_dataLength: 0 +stat_numChildren: 7 +children: ['query-0000000006','query-0000000005','query-0000000004','query-0000000003','query-0000000002','query-0000000001','query-0000000000'] +``` + +**另请参阅** + +- [ZooKeeper](../../operations/tips.md#zookeeper) +- [ZooKeeper 指南](https://zookeeper.apache.org/doc/r3.3.3/zookeeperProgrammers.html) diff --git a/docs/zh/operations/tips.md b/docs/zh/operations/tips.md index a4755086941..63a74abd7d8 100644 --- a/docs/zh/operations/tips.md +++ b/docs/zh/operations/tips.md @@ -71,7 +71,7 @@ echo 4096 | sudo tee /sys/block/md2/md/stripe_cache_size ## 文件系统 {#file-system} -Ext4是最可靠的选择。 设置挂载选项 `noatime, nobarrier`. +Ext4是最可靠的选择。 设置挂载选项 `noatime`. XFS也是合适的,但它还没有经过ClickHouse的全面测试。 大多数其他文件系统也应该可以正常工作。 具有延迟分配的文件系统工作得更好。 diff --git a/docs/zh/operations/utilities/clickhouse-copier.md b/docs/zh/operations/utilities/clickhouse-copier.md index b68390fce04..537006ecf0d 100644 --- a/docs/zh/operations/utilities/clickhouse-copier.md +++ b/docs/zh/operations/utilities/clickhouse-copier.md @@ -41,7 +41,7 @@ clickhouse-copier --daemon --config zookeeper.xml --task-path /task/path --base- ## Zookeeper.xml格式 {#format-of-zookeeper-xml} ``` xml - + trace 100M @@ -54,13 +54,13 @@ clickhouse-copier --daemon --config zookeeper.xml --task-path /task/path --base- 2181 - + ``` ## 复制任务的配置 {#configuration-of-copying-tasks} ``` xml - + @@ -163,7 +163,7 @@ clickhouse-copier --daemon --config zookeeper.xml --task-path /task/path --base- ... - + ``` `clickhouse-copier` 跟踪更改 `/task/path/description` 并在飞行中应用它们。 例如,如果你改变的值 `max_workers`,运行任务的进程数也会发生变化。 diff --git a/docs/zh/sql-reference/aggregate-functions/reference/argmax.md b/docs/zh/sql-reference/aggregate-functions/reference/argmax.md index 9d90590b2f1..ed3d2d07a58 100644 --- a/docs/zh/sql-reference/aggregate-functions/reference/argmax.md +++ b/docs/zh/sql-reference/aggregate-functions/reference/argmax.md @@ -6,20 +6,12 @@ toc_priority: 106 计算 `val` 最大值对应的 `arg` 值。 如果 `val` 最大值存在几个不同的 `arg` 值,输出遇到的第一个值。 -这个函数的Tuple版本将返回 `val` 最大值对应的元组。本函数适合和 `SimpleAggregateFunction` 搭配使用。 - **语法** ``` sql argMax(arg, val) ``` -或 - -``` sql -argMax(tuple(arg, val)) -``` - **参数** - `arg` — Argument. @@ -31,12 +23,6 @@ argMax(tuple(arg, val)) 类型: 匹配 `arg` 类型。 -对于输入中的元组: - -- 元组 `(arg, val)`, 其中 `val` 最大值,`arg` 是对应的值。 - -类型: [元组](../../../sql-reference/data-types/tuple.md)。 - **示例** 输入表: @@ -52,13 +38,13 @@ argMax(tuple(arg, val)) 查询: ``` sql -SELECT argMax(user, salary), argMax(tuple(user, salary), salary), argMax(tuple(user, salary)) FROM salary; +SELECT argMax(user, salary), argMax(tuple(user, salary), salary) FROM salary; ``` 结果: ``` text -┌─argMax(user, salary)─┬─argMax(tuple(user, salary), salary)─┬─argMax(tuple(user, salary))─┐ -│ director │ ('director',5000) │ ('director',5000) │ -└──────────────────────┴─────────────────────────────────────┴─────────────────────────────┘ +┌─argMax(user, salary)─┬─argMax(tuple(user, salary), salary)─┐ +│ director │ ('director',5000) │ +└──────────────────────┴─────────────────────────────────────┘ ``` diff --git a/docs/zh/sql-reference/aggregate-functions/reference/argmin.md b/docs/zh/sql-reference/aggregate-functions/reference/argmin.md index 0dd4625ac0d..8d987300ad4 100644 --- a/docs/zh/sql-reference/aggregate-functions/reference/argmin.md +++ b/docs/zh/sql-reference/aggregate-functions/reference/argmin.md @@ -8,8 +8,6 @@ toc_priority: 105 计算 `val` 最小值对应的 `arg` 值。 如果 `val` 最小值存在几个不同的 `arg` 值,输出遇到的第一个(`arg`)值。 -这个函数的Tuple版本将返回 `val` 最小值对应的tuple。本函数适合和`SimpleAggregateFunction`搭配使用。 - **示例:** 输入表: @@ -25,13 +23,13 @@ toc_priority: 105 查询: ``` sql -SELECT argMin(user, salary), argMin(tuple(user, salary)) FROM salary; +SELECT argMin(user, salary), argMin(tuple(user, salary), salary) FROM salary; ``` 结果: ``` text -┌─argMin(user, salary)─┬─argMin(tuple(user, salary))─┐ -│ worker │ ('worker',1000) │ -└──────────────────────┴─────────────────────────────┘ +┌─argMin(user, salary)─┬─argMin(tuple(user, salary), salary)─┐ +│ worker │ ('worker',1000) │ +└──────────────────────┴─────────────────────────────────────┘ ``` diff --git a/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md b/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md index 78d4c1ea236..083ed0318ba 100644 --- a/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md +++ b/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md @@ -28,7 +28,7 @@ ClickHouse为字典中的错误生成异常。 错误示例: 配置如下所示: ``` xml - + ... @@ -38,7 +38,7 @@ ClickHouse为字典中的错误生成异常。 错误示例: ... - + ``` 相应的 [DDL-查询](../../statements/create.md#create-dictionary-query): @@ -208,7 +208,7 @@ dictGetT('dict_name', 'attr_name', id, date) 配置示例: ``` xml - + ... @@ -237,7 +237,7 @@ dictGetT('dict_name', 'attr_name', id, date) - + ``` 或 diff --git a/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md b/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md index 399224cb8c4..c0a31535b08 100644 --- a/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md +++ b/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources.md @@ -12,7 +12,7 @@ toc_title: "\u5916\u90E8\u5B57\u5178\u7684\u6765\u6E90" 如果使用xml-file配置字典,则配置如下所示: ``` xml - + ... @@ -23,7 +23,7 @@ toc_title: "\u5916\u90E8\u5B57\u5178\u7684\u6765\u6E90" ... ... - + ``` 在情况下 [DDL-查询](../../statements/create.md#create-dictionary-query),相等的配置将看起来像: @@ -272,7 +272,7 @@ $ sudo apt-get install -y unixodbc odbcinst odbc-postgresql ClickHouse中的字典配置: ``` xml - + table_name @@ -301,7 +301,7 @@ ClickHouse中的字典配置: - + ``` 或 @@ -367,7 +367,7 @@ $ sudo apt-get install tdsodbc freetds-bin sqsh 在ClickHouse中配置字典: ``` xml - + test @@ -397,7 +397,7 @@ $ sudo apt-get install tdsodbc freetds-bin sqsh - + ``` 或 diff --git a/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts.md b/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts.md index 609d1c11f56..036ba3d707f 100644 --- a/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts.md +++ b/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts.md @@ -28,7 +28,7 @@ ClickHouse: 字典配置文件具有以下格式: ``` xml - + An optional element with any content. Ignored by the ClickHouse server. @@ -40,7 +40,7 @@ ClickHouse: - + ``` 你可以 [配置](external-dicts-dict.md) 同一文件中的任意数量的字典。 diff --git a/programs/client/Client.cpp b/programs/client/Client.cpp index 98d3044f007..0c4141c74f2 100644 --- a/programs/client/Client.cpp +++ b/programs/client/Client.cpp @@ -86,7 +86,6 @@ void Client::processError(const String & query) const { if (server_exception) { - bool print_stack_trace = config().getBool("stacktrace", false); fmt::print(stderr, "Received exception from server (version {}):\n{}\n", server_version, getExceptionMessage(*server_exception, print_stack_trace, true)); @@ -225,7 +224,7 @@ bool Client::executeMultiQuery(const String & all_queries_text) { // Surprisingly, this is a client error. A server error would // have been reported w/o throwing (see onReceiveSeverException()). - client_exception = std::make_unique(getCurrentExceptionMessage(true), getCurrentExceptionCode()); + client_exception = std::make_unique(getCurrentExceptionMessage(print_stack_trace), getCurrentExceptionCode()); have_error = true; } // Check whether the error (or its absence) matches the test hints @@ -489,8 +488,8 @@ try } catch (const Exception & e) { - bool print_stack_trace = config().getBool("stacktrace", false) && e.code() != ErrorCodes::NETWORK_ERROR; - std::cerr << getExceptionMessage(e, print_stack_trace, true) << std::endl << std::endl; + bool need_print_stack_trace = config().getBool("stacktrace", false) && e.code() != ErrorCodes::NETWORK_ERROR; + std::cerr << getExceptionMessage(e, need_print_stack_trace, true) << std::endl << std::endl; /// If exception code isn't zero, we should return non-zero return code anyway. return e.code() ? e.code() : -1; } @@ -813,7 +812,7 @@ bool Client::processWithFuzzing(const String & full_query) // uniformity. // Surprisingly, this is a client exception, because we get the // server exception w/o throwing (see onReceiveException()). - client_exception = std::make_unique(getCurrentExceptionMessage(true), getCurrentExceptionCode()); + client_exception = std::make_unique(getCurrentExceptionMessage(print_stack_trace), getCurrentExceptionCode()); have_error = true; } @@ -1008,9 +1007,6 @@ void Client::addOptions(OptionsDescription & options_description) ("max_client_network_bandwidth", po::value(), "the maximum speed of data exchange over the network for the client in bytes per second.") ("compression", po::value(), "enable or disable compression") - ("log-level", po::value(), "client log level") - ("server_logs_file", po::value(), "put server logs into specified file") - ("query-fuzzer-runs", po::value()->default_value(0), "After executing every SELECT query, do random mutations in it and run again specified number of times. This is used for testing to discover unexpected corner cases.") ("interleave-queries-file", po::value>()->multitoken(), "file path with queries to execute before every file from 'queries-file'; multiple files can be specified (--queries-file file1 file2...); this is needed to enable more aggressive fuzzing of newly added tests (see 'query-fuzzer-runs' option)") @@ -1126,8 +1122,6 @@ void Client::processOptions(const OptionsDescription & options_description, max_client_network_bandwidth = options["max_client_network_bandwidth"].as(); if (options.count("compression")) config().setBool("compression", options["compression"].as()); - if (options.count("server_logs_file")) - server_logs_file = options["server_logs_file"].as(); if (options.count("no-warnings")) config().setBool("no-warnings", true); @@ -1179,6 +1173,7 @@ void Client::processConfig() if (!query_id.empty()) global_context->setCurrentQueryId(query_id); } + print_stack_trace = config().getBool("stacktrace", false); if (config().has("multiquery")) is_multiquery = true; diff --git a/programs/install/Install.cpp b/programs/install/Install.cpp index 606af7ecd0d..556932510fb 100644 --- a/programs/install/Install.cpp +++ b/programs/install/Install.cpp @@ -495,12 +495,12 @@ int mainEntryClickHouseInstall(int argc, char ** argv) { std::string data_file = config_d / "data-paths.xml"; WriteBufferFromFile out(data_file); - out << "\n" + out << "\n" " " << data_path.string() << "\n" " " << (data_path / "tmp").string() << "\n" " " << (data_path / "user_files").string() << "\n" " " << (data_path / "format_schemas").string() << "\n" - "\n"; + "\n"; out.sync(); out.finalize(); fmt::print("Data path configuration override is saved to file {}.\n", data_file); @@ -510,12 +510,12 @@ int mainEntryClickHouseInstall(int argc, char ** argv) { std::string logger_file = config_d / "logger.xml"; WriteBufferFromFile out(logger_file); - out << "\n" + out << "\n" " \n" " " << (log_path / "clickhouse-server.log").string() << "\n" " " << (log_path / "clickhouse-server.err.log").string() << "\n" " \n" - "\n"; + "\n"; out.sync(); out.finalize(); fmt::print("Log path configuration override is saved to file {}.\n", logger_file); @@ -525,13 +525,13 @@ int mainEntryClickHouseInstall(int argc, char ** argv) { std::string user_directories_file = config_d / "user-directories.xml"; WriteBufferFromFile out(user_directories_file); - out << "\n" + out << "\n" " \n" " \n" " " << (data_path / "access").string() << "\n" " \n" " \n" - "\n"; + "\n"; out.sync(); out.finalize(); fmt::print("User directory path configuration override is saved to file {}.\n", user_directories_file); @@ -541,7 +541,7 @@ int mainEntryClickHouseInstall(int argc, char ** argv) { std::string openssl_file = config_d / "openssl.xml"; WriteBufferFromFile out(openssl_file); - out << "\n" + out << "\n" " \n" " \n" " " << (config_dir / "server.crt").string() << "\n" @@ -549,7 +549,7 @@ int mainEntryClickHouseInstall(int argc, char ** argv) " " << (config_dir / "dhparam.pem").string() << "\n" " \n" " \n" - "\n"; + "\n"; out.sync(); out.finalize(); fmt::print("OpenSSL path configuration override is saved to file {}.\n", openssl_file); @@ -716,25 +716,25 @@ int mainEntryClickHouseInstall(int argc, char ** argv) hash_hex.resize(64); for (size_t i = 0; i < 32; ++i) writeHexByteLowercase(hash[i], &hash_hex[2 * i]); - out << "\n" + out << "\n" " \n" " \n" " \n" " " << hash_hex << "\n" " \n" " \n" - "\n"; + "\n"; out.sync(); out.finalize(); fmt::print(HILITE "Password for default user is saved in file {}." END_HILITE "\n", password_file); #else - out << "\n" + out << "\n" " \n" " \n" " \n" " \n" " \n" - "\n"; + "\n"; out.sync(); out.finalize(); fmt::print(HILITE "Password for default user is saved in plaintext in file {}." END_HILITE "\n", password_file); @@ -777,9 +777,9 @@ int mainEntryClickHouseInstall(int argc, char ** argv) { std::string listen_file = config_d / "listen.xml"; WriteBufferFromFile out(listen_file); - out << "\n" + out << "\n" " ::\n" - "\n"; + "\n"; out.sync(); out.finalize(); fmt::print("The choice is saved in file {}.\n", listen_file); @@ -809,13 +809,27 @@ int mainEntryClickHouseInstall(int argc, char ** argv) if (has_password_for_default_user) maybe_password = " --password"; - fmt::print( - "\nClickHouse has been successfully installed.\n" - "\nStart clickhouse-server with:\n" - " sudo clickhouse start\n" - "\nStart clickhouse-client with:\n" - " clickhouse-client{}\n\n", - maybe_password); + fs::path pid_file = pid_path / "clickhouse-server.pid"; + if (fs::exists(pid_file)) + { + fmt::print( + "\nClickHouse has been successfully installed.\n" + "\nRestart clickhouse-server with:\n" + " sudo clickhouse restart\n" + "\nStart clickhouse-client with:\n" + " clickhouse-client{}\n\n", + maybe_password); + } + else + { + fmt::print( + "\nClickHouse has been successfully installed.\n" + "\nStart clickhouse-server with:\n" + " sudo clickhouse start\n" + "\nStart clickhouse-client with:\n" + " clickhouse-client{}\n\n", + maybe_password); + } } catch (const fs::filesystem_error &) { diff --git a/programs/keeper/Keeper.cpp b/programs/keeper/Keeper.cpp index da3c42a3213..6e001c57e75 100644 --- a/programs/keeper/Keeper.cpp +++ b/programs/keeper/Keeper.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -331,6 +332,8 @@ int Keeper::main(const std::vector & /*args*/) const Settings & settings = global_context->getSettingsRef(); + std::string include_from_path = config().getString("include_from", "/etc/metrika.xml"); + GlobalThreadPool::initialize(config().getUInt("max_thread_pool_size", 100)); static ServerErrorHandler error_handler; @@ -402,8 +405,27 @@ int Keeper::main(const std::vector & /*args*/) for (auto & server : *servers) server.start(); + zkutil::EventPtr unused_event = std::make_shared(); + zkutil::ZooKeeperNodeCache unused_cache([] { return nullptr; }); + /// ConfigReloader have to strict parameters which are redundant in our case + auto main_config_reloader = std::make_unique( + config_path, + include_from_path, + config().getString("path", ""), + std::move(unused_cache), + unused_event, + [&](ConfigurationPtr config, bool /* initial_loading */) + { + if (config->has("keeper_server")) + global_context->updateKeeperConfiguration(*config); + }, + /* already_loaded = */ false); /// Reload it right now (initial loading) + SCOPE_EXIT({ LOG_INFO(log, "Shutting down."); + /// Stop reloading of the main config. This must be done before `global_context->shutdown()` because + /// otherwise the reloading may pass a changed config to some destroyed parts of ContextSharedPart. + main_config_reloader.reset(); global_context->shutdown(); @@ -450,6 +472,7 @@ int Keeper::main(const std::vector & /*args*/) buildLoggers(config(), logger()); + main_config_reloader->start(); LOG_INFO(log, "Ready for connections."); diff --git a/programs/local/LocalServer.cpp b/programs/local/LocalServer.cpp index 4d8977c9e62..dc7daf2846a 100644 --- a/programs/local/LocalServer.cpp +++ b/programs/local/LocalServer.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -18,7 +19,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -35,7 +38,6 @@ #include #include #include -#include #include namespace fs = std::filesystem; @@ -62,7 +64,6 @@ void LocalServer::processError(const String &) const String message; if (server_exception) { - bool print_stack_trace = config().getBool("stacktrace", false); message = getExceptionMessage(*server_exception, print_stack_trace, true); } else if (client_exception) @@ -131,9 +132,12 @@ bool LocalServer::executeMultiQuery(const String & all_queries_text) } catch (...) { + if (!is_interactive && !ignore_error) + throw; + // Surprisingly, this is a client error. A server error would // have been reported w/o throwing (see onReceiveSeverException()). - client_exception = std::make_unique(getCurrentExceptionMessage(true), getCurrentExceptionCode()); + client_exception = std::make_unique(getCurrentExceptionMessage(print_stack_trace), getCurrentExceptionCode()); have_error = true; } @@ -177,26 +181,8 @@ void LocalServer::initialize(Poco::Util::Application & self) ConfigProcessor config_processor(config_path, false, true); config_processor.setConfigPath(fs::path(config_path).parent_path()); auto loaded_config = config_processor.loadConfig(); - config_processor.savePreprocessedConfig(loaded_config, loaded_config.configuration->getString("path", ".")); config().add(loaded_config.configuration.duplicate(), PRIO_DEFAULT, false); } - - if (config().has("logger.console") || config().has("logger.level") || config().has("logger.log")) - { - // force enable logging - config().setString("logger", "logger"); - // sensitive data rules are not used here - buildLoggers(config(), logger(), "clickhouse-local"); - } - else - { - // Turn off server logging to stderr - if (!config().has("verbose")) - { - Poco::Logger::root().setLevel("none"); - Poco::Logger::root().setChannel(Poco::AutoPtr(new Poco::NullChannel())); - } - } } @@ -282,28 +268,40 @@ void LocalServer::tryInitPath() global_context->setFlagsPath(path + "flags"); global_context->setUserFilesPath(""); // user's files are everywhere + + /// top_level_domains_lists + const std::string & top_level_domains_path = config().getString("top_level_domains_path", path + "top_level_domains/"); + if (!top_level_domains_path.empty()) + TLDListsHolder::getInstance().parseConfig(fs::path(top_level_domains_path) / "", config()); } void LocalServer::cleanup() { - connection.reset(); - - if (global_context) + try { - global_context->shutdown(); - global_context.reset(); + connection.reset(); + + if (global_context) + { + global_context->shutdown(); + global_context.reset(); + } + + status.reset(); + + // Delete the temporary directory if needed. + if (temporary_directory_to_delete) + { + const auto dir = *temporary_directory_to_delete; + temporary_directory_to_delete.reset(); + LOG_DEBUG(&logger(), "Removing temporary directory: {}", dir.string()); + remove_all(dir); + } } - - status.reset(); - - // Delete the temporary directory if needed. - if (temporary_directory_to_delete) + catch (...) { - const auto dir = *temporary_directory_to_delete; - temporary_directory_to_delete.reset(); - LOG_DEBUG(&logger(), "Removing temporary directory: {}", dir.string()); - remove_all(dir); + tryLogCurrentException(__PRETTY_FUNCTION__); } } @@ -345,7 +343,7 @@ static ConfigurationPtr getConfigurationFromXMLString(const char * xml_data) void LocalServer::setupUsers() { static const char * minimal_default_user_xml = - "" + "" " " " " " " @@ -362,7 +360,7 @@ void LocalServer::setupUsers() " " " " " " - ""; + ""; ConfigurationPtr users_config; @@ -371,7 +369,6 @@ void LocalServer::setupUsers() const auto users_config_path = config().getString("users_config", config().getString("config-file", "config.xml")); ConfigProcessor config_processor(users_config_path); const auto loaded_config = config_processor.loadConfig(); - config_processor.savePreprocessedConfig(loaded_config, config().getString("path", DBMS_DEFAULT_PATH)); users_config = loaded_config.configuration; } else @@ -446,23 +443,20 @@ try cleanup(); return Application::EXIT_OK; } +catch (const DB::Exception & e) +{ + cleanup(); + + bool need_print_stack_trace = config().getBool("stacktrace", false); + std::cerr << getExceptionMessage(e, need_print_stack_trace, true) << std::endl; + return e.code() ? e.code() : -1; +} catch (...) { - try - { - cleanup(); - } - catch (...) - { - tryLogCurrentException(__PRETTY_FUNCTION__); - } + cleanup(); - if (!ignore_error) - std::cerr << getCurrentExceptionMessage(config().hasOption("stacktrace")) << '\n'; - - auto code = getCurrentExceptionCode(); - /// If exception code isn't zero, we should return non-zero return code anyway. - return code ? code : -1; + std::cerr << getCurrentExceptionMessage(false) << std::endl; + return getCurrentExceptionCode(); } @@ -485,6 +479,36 @@ void LocalServer::processConfig() ignore_error = config().getBool("ignore-error", false); is_multiquery = true; } + print_stack_trace = config().getBool("stacktrace", false); + + auto logging = (config().has("logger.console") + || config().has("logger.level") + || config().has("log-level") + || config().has("logger.log")); + + auto file_logging = config().has("server_logs_file"); + if (is_interactive && logging && !file_logging) + throw Exception("For interactive mode logging is allowed only with --server_logs_file option", + ErrorCodes::BAD_ARGUMENTS); + + if (file_logging) + { + auto level = Poco::Logger::parseLevel(config().getString("log-level", "trace")); + Poco::Logger::root().setLevel(level); + Poco::Logger::root().setChannel(Poco::AutoPtr(new Poco::SimpleFileChannel(server_logs_file))); + } + else if (logging) + { + // force enable logging + config().setString("logger", "logger"); + // sensitive data rules are not used here + buildLoggers(config(), logger(), "clickhouse-local"); + } + else + { + Poco::Logger::root().setLevel("none"); + Poco::Logger::root().setChannel(Poco::AutoPtr(new Poco::NullChannel())); + } shared_context = Context::createShared(); global_context = Context::createGlobal(shared_context.get()); @@ -666,6 +690,7 @@ void LocalServer::addOptions(OptionsDescription & options_description) ("no-system-tables", "do not attach system tables (better startup time)") ("path", po::value(), "Storage path") + ("top_level_domains_path", po::value(), "Path to lists with custom TLDs") ; } diff --git a/programs/server/Server.cpp b/programs/server/Server.cpp index d850ca45e26..ce7d6973f68 100644 --- a/programs/server/Server.cpp +++ b/programs/server/Server.cpp @@ -863,6 +863,9 @@ if (ThreadFuzzer::instance().isEffective()) if (config->has("max_concurrent_queries")) global_context->getProcessList().setMaxSize(config->getInt("max_concurrent_queries", 0)); + if (config->has("keeper_server")) + global_context->updateKeeperConfiguration(*config); + if (!initial_loading) { /// We do not load ZooKeeper configuration on the first config loading @@ -957,9 +960,14 @@ if (ThreadFuzzer::instance().isEffective()) global_context->setMMappedFileCache(mmap_cache_size); #if USE_EMBEDDED_COMPILER + /// 128 MB constexpr size_t compiled_expression_cache_size_default = 1024 * 1024 * 128; size_t compiled_expression_cache_size = config().getUInt64("compiled_expression_cache_size", compiled_expression_cache_size_default); - CompiledExpressionCacheFactory::instance().init(compiled_expression_cache_size); + + constexpr size_t compiled_expression_cache_elements_size_default = 10000; + size_t compiled_expression_cache_elements_size = config().getUInt64("compiled_expression_cache_elements_size", compiled_expression_cache_elements_size_default); + + CompiledExpressionCacheFactory::instance().init(compiled_expression_cache_size, compiled_expression_cache_elements_size); #endif /// Set path for format schema files diff --git a/programs/server/config.d/listen.xml.disabled b/programs/server/config.d/listen.xml.disabled index de8c737ff75..f94e5c88568 100644 --- a/programs/server/config.d/listen.xml.disabled +++ b/programs/server/config.d/listen.xml.disabled @@ -1,3 +1,3 @@ - + :: - + diff --git a/programs/server/config.d/tls.xml.disabled b/programs/server/config.d/tls.xml.disabled index c81f005f2ed..b88b4b07231 100644 --- a/programs/server/config.d/tls.xml.disabled +++ b/programs/server/config.d/tls.xml.disabled @@ -1,4 +1,4 @@ - + 8443 9440 @@ -6,4 +6,4 @@ - + diff --git a/programs/server/config.xml b/programs/server/config.xml index e38a6daeaed..37f36aa5215 100644 --- a/programs/server/config.xml +++ b/programs/server/config.xml @@ -351,9 +351,12 @@ --> 1000 - + 134217728 + + 10000 + /var/lib/clickhouse/ diff --git a/programs/server/config.yaml.example b/programs/server/config.yaml.example index b2d016e06e5..c312e6a2208 100644 --- a/programs/server/config.yaml.example +++ b/programs/server/config.yaml.example @@ -279,9 +279,12 @@ mark_cache_size: 5368709120 # also it can be dropped manually by the SYSTEM DROP MMAP CACHE query. mmap_cache_size: 1000 -# Cache size for compiled expressions. +# Cache size in bytes for compiled expressions. compiled_expression_cache_size: 134217728 +# Cache size in elements for compiled expressions. +compiled_expression_cache_elements_size: 10000 + # Path to data directory, with trailing slash. path: /var/lib/clickhouse/ diff --git a/programs/server/play.html b/programs/server/play.html index ac60ecfb624..f7154643504 100644 --- a/programs/server/play.html +++ b/programs/server/play.html @@ -338,7 +338,7 @@
- +
@@ -549,13 +549,38 @@ document.getElementById('logo-container').style.display = 'block'; } + + function formatReadable(number = 0, decimals = 2, units = []) { + const k = 1000; + const i = number ? Math.floor(Math.log(number) / Math.log(k)) : 0; + const unit = units[i]; + const dm = unit ? decimals : 0; + return Number(number / Math.pow(k, i)).toFixed(dm) + unit; + } + + function formatReadableBytes(bytes) { + const units = [' B', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB']; + + return formatReadable(bytes, 2, units); + } + + function formatReadableRows(rows) { + const units = ['', ' thousand', ' million', ' billion', ' trillion', ' quadrillion']; + + return formatReadable(rows, 2, units); + } function renderResult(response) { clear(); let stats = document.getElementById('stats'); - stats.innerText = 'Elapsed: ' + response.statistics.elapsed.toFixed(3) + " sec, read " + response.statistics.rows_read + " rows."; + const seconds = response.statistics.elapsed.toFixed(3); + const rows = response.statistics.rows_read; + const bytes = response.statistics.bytes_read; + const formatted_bytes = formatReadableBytes(bytes); + const formatted_rows = formatReadableRows(rows); + stats.innerText = `Elapsed: ${seconds} sec, read ${formatted_rows} rows, ${formatted_bytes}.`; /// We can also render graphs if user performed EXPLAIN PIPELINE graph=1. if (response.data.length > 3 && response.data[0][0] === "digraph" && document.getElementById('query').value.match(/^\s*EXPLAIN/i)) { diff --git a/src/Access/AccessEntityIO.cpp b/src/Access/AccessEntityIO.cpp index 2160f3e9db8..199b3b22efc 100644 --- a/src/Access/AccessEntityIO.cpp +++ b/src/Access/AccessEntityIO.cpp @@ -7,26 +7,26 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include diff --git a/src/Access/AccessRights.h b/src/Access/AccessRights.h index 2657b66d824..32a4462d212 100644 --- a/src/Access/AccessRights.h +++ b/src/Access/AccessRights.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include diff --git a/src/Access/Authentication.cpp b/src/Access/Authentication.cpp index f07bdb10578..d0aef37c15b 100644 --- a/src/Access/Authentication.cpp +++ b/src/Access/Authentication.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -17,8 +18,8 @@ namespace ErrorCodes namespace { - using Digest = Authentication::Digest; - using Util = Authentication::Util; + using Digest = AuthenticationData::Digest; + using Util = AuthenticationData::Util; bool checkPasswordPlainText(const String & password, const Digest & password_plaintext) { @@ -67,76 +68,76 @@ namespace } -bool Authentication::areCredentialsValid(const Credentials & credentials, const ExternalAuthenticators & external_authenticators) const +bool Authentication::areCredentialsValid(const Credentials & credentials, const AuthenticationData & auth_data, const ExternalAuthenticators & external_authenticators) { if (!credentials.isReady()) return false; if (const auto * gss_acceptor_context = typeid_cast(&credentials)) { - switch (type) + switch (auth_data.getType()) { - case NO_PASSWORD: - case PLAINTEXT_PASSWORD: - case SHA256_PASSWORD: - case DOUBLE_SHA1_PASSWORD: - case LDAP: - throw Require("ClickHouse Basic Authentication"); + case AuthenticationType::NO_PASSWORD: + case AuthenticationType::PLAINTEXT_PASSWORD: + case AuthenticationType::SHA256_PASSWORD: + case AuthenticationType::DOUBLE_SHA1_PASSWORD: + case AuthenticationType::LDAP: + throw Authentication::Require("ClickHouse Basic Authentication"); - case KERBEROS: - return external_authenticators.checkKerberosCredentials(kerberos_realm, *gss_acceptor_context); + case AuthenticationType::KERBEROS: + return external_authenticators.checkKerberosCredentials(auth_data.getKerberosRealm(), *gss_acceptor_context); - case MAX_TYPE: + case AuthenticationType::MAX_TYPE: break; } } if (const auto * mysql_credentials = typeid_cast(&credentials)) { - switch (type) + switch (auth_data.getType()) { - case NO_PASSWORD: + case AuthenticationType::NO_PASSWORD: return true; // N.B. even if the password is not empty! - case PLAINTEXT_PASSWORD: - return checkPasswordPlainTextMySQL(mysql_credentials->getScramble(), mysql_credentials->getScrambledPassword(), password_hash); + case AuthenticationType::PLAINTEXT_PASSWORD: + return checkPasswordPlainTextMySQL(mysql_credentials->getScramble(), mysql_credentials->getScrambledPassword(), auth_data.getPasswordHashBinary()); - case DOUBLE_SHA1_PASSWORD: - return checkPasswordDoubleSHA1MySQL(mysql_credentials->getScramble(), mysql_credentials->getScrambledPassword(), password_hash); + case AuthenticationType::DOUBLE_SHA1_PASSWORD: + return checkPasswordDoubleSHA1MySQL(mysql_credentials->getScramble(), mysql_credentials->getScrambledPassword(), auth_data.getPasswordHashBinary()); - case SHA256_PASSWORD: - case LDAP: - case KERBEROS: - throw Require("ClickHouse Basic Authentication"); + case AuthenticationType::SHA256_PASSWORD: + case AuthenticationType::LDAP: + case AuthenticationType::KERBEROS: + throw Authentication::Require("ClickHouse Basic Authentication"); - case MAX_TYPE: + case AuthenticationType::MAX_TYPE: break; } } if (const auto * basic_credentials = typeid_cast(&credentials)) { - switch (type) + switch (auth_data.getType()) { - case NO_PASSWORD: + case AuthenticationType::NO_PASSWORD: return true; // N.B. even if the password is not empty! - case PLAINTEXT_PASSWORD: - return checkPasswordPlainText(basic_credentials->getPassword(), password_hash); + case AuthenticationType::PLAINTEXT_PASSWORD: + return checkPasswordPlainText(basic_credentials->getPassword(), auth_data.getPasswordHashBinary()); - case SHA256_PASSWORD: - return checkPasswordSHA256(basic_credentials->getPassword(), password_hash); + case AuthenticationType::SHA256_PASSWORD: + return checkPasswordSHA256(basic_credentials->getPassword(), auth_data.getPasswordHashBinary()); - case DOUBLE_SHA1_PASSWORD: - return checkPasswordDoubleSHA1(basic_credentials->getPassword(), password_hash); + case AuthenticationType::DOUBLE_SHA1_PASSWORD: + return checkPasswordDoubleSHA1(basic_credentials->getPassword(), auth_data.getPasswordHashBinary()); - case LDAP: - return external_authenticators.checkLDAPCredentials(ldap_server_name, *basic_credentials); + case AuthenticationType::LDAP: + return external_authenticators.checkLDAPCredentials(auth_data.getLDAPServerName(), *basic_credentials); - case KERBEROS: - throw Require(kerberos_realm); + case AuthenticationType::KERBEROS: + throw Authentication::Require(auth_data.getKerberosRealm()); - case MAX_TYPE: + case AuthenticationType::MAX_TYPE: break; } } @@ -144,7 +145,7 @@ bool Authentication::areCredentialsValid(const Credentials & credentials, const if ([[maybe_unused]] const auto * always_allow_credentials = typeid_cast(&credentials)) return true; - throw Exception("areCredentialsValid(): authentication type " + toString(type) + " not supported", ErrorCodes::NOT_IMPLEMENTED); + throw Exception("areCredentialsValid(): authentication type " + toString(auth_data.getType()) + " not supported", ErrorCodes::NOT_IMPLEMENTED); } } diff --git a/src/Access/Authentication.h b/src/Access/Authentication.h index e43d3793ee0..000ba8ca324 100644 --- a/src/Access/Authentication.h +++ b/src/Access/Authentication.h @@ -1,60 +1,26 @@ #pragma once -#include +#include #include -#include -#include -#include -#include +#include namespace DB { namespace ErrorCodes { - extern const int SUPPORT_IS_DISABLED; extern const int BAD_ARGUMENTS; - extern const int LOGICAL_ERROR; - extern const int NOT_IMPLEMENTED; } class Credentials; class ExternalAuthenticators; -/// Authentication type and encrypted password for checking when a user logins. -class Authentication + +/// TODO: Try to move this checking to Credentials. +struct Authentication { -public: - enum Type - { - /// User doesn't have to enter password. - NO_PASSWORD, - - /// Password is stored as is. - PLAINTEXT_PASSWORD, - - /// Password is encrypted in SHA256 hash. - SHA256_PASSWORD, - - /// SHA1(SHA1(password)). - /// This kind of hash is used by the `mysql_native_password` authentication plugin. - DOUBLE_SHA1_PASSWORD, - - /// Password is checked by a [remote] LDAP server. Connection will be made at each authentication attempt. - LDAP, - - /// Kerberos authentication performed through GSS-API negotiation loop. - KERBEROS, - - MAX_TYPE, - }; - - struct TypeInfo - { - const char * const raw_name; - const String name; /// Lowercased with underscores, e.g. "sha256_password". - static const TypeInfo & get(Type type_); - }; + /// Checks the credentials (passwords, readiness, etc.) + static bool areCredentialsValid(const Credentials & credentials, const AuthenticationData & auth_data, const ExternalAuthenticators & external_authenticators); // A signaling class used to communicate requirements for credentials. template @@ -67,110 +33,9 @@ public: private: const String realm; }; - - using Digest = std::vector; - - Authentication(Authentication::Type type_ = NO_PASSWORD) : type(type_) {} - Authentication(const Authentication & src) = default; - Authentication & operator =(const Authentication & src) = default; - Authentication(Authentication && src) = default; - Authentication & operator =(Authentication && src) = default; - - Type getType() const { return type; } - - /// Sets the password and encrypt it using the authentication type set in the constructor. - void setPassword(const String & password_); - - /// Returns the password. Allowed to use only for Type::PLAINTEXT_PASSWORD. - String getPassword() const; - - /// Sets the password as a string of hexadecimal digits. - void setPasswordHashHex(const String & hash); - String getPasswordHashHex() const; - - /// Sets the password in binary form. - void setPasswordHashBinary(const Digest & hash); - const Digest & getPasswordHashBinary() const { return password_hash; } - - /// Sets the server name for authentication type LDAP. - const String & getLDAPServerName() const; - void setLDAPServerName(const String & name); - - /// Sets the realm name for authentication type KERBEROS. - const String & getKerberosRealm() const; - void setKerberosRealm(const String & realm); - - /// Checks the credentials (passwords, readiness, etc.) - bool areCredentialsValid(const Credentials & credentials, const ExternalAuthenticators & external_authenticators) const; - - friend bool operator ==(const Authentication & lhs, const Authentication & rhs) { return (lhs.type == rhs.type) && (lhs.password_hash == rhs.password_hash); } - friend bool operator !=(const Authentication & lhs, const Authentication & rhs) { return !(lhs == rhs); } - - struct Util - { - static Digest encodePlainText(const std::string_view & text) { return Digest(text.data(), text.data() + text.size()); } - static Digest encodeSHA256(const std::string_view & text); - static Digest encodeSHA1(const std::string_view & text); - static Digest encodeSHA1(const Digest & text) { return encodeSHA1(std::string_view{reinterpret_cast(text.data()), text.size()}); } - static Digest encodeDoubleSHA1(const std::string_view & text) { return encodeSHA1(encodeSHA1(text)); } - static Digest encodeDoubleSHA1(const Digest & text) { return encodeSHA1(encodeSHA1(text)); } - }; - -private: - Type type = Type::NO_PASSWORD; - Digest password_hash; - String ldap_server_name; - String kerberos_realm; }; -inline const Authentication::TypeInfo & Authentication::TypeInfo::get(Type type_) -{ - static constexpr auto make_info = [](const char * raw_name_) - { - String init_name = raw_name_; - boost::to_lower(init_name); - return TypeInfo{raw_name_, std::move(init_name)}; - }; - - switch (type_) - { - case NO_PASSWORD: - { - static const auto info = make_info("NO_PASSWORD"); - return info; - } - case PLAINTEXT_PASSWORD: - { - static const auto info = make_info("PLAINTEXT_PASSWORD"); - return info; - } - case SHA256_PASSWORD: - { - static const auto info = make_info("SHA256_PASSWORD"); - return info; - } - case DOUBLE_SHA1_PASSWORD: - { - static const auto info = make_info("DOUBLE_SHA1_PASSWORD"); - return info; - } - case LDAP: - { - static const auto info = make_info("LDAP"); - return info; - } - case KERBEROS: - { - static const auto info = make_info("KERBEROS"); - return info; - } - case MAX_TYPE: - break; - } - throw Exception("Unknown authentication type: " + std::to_string(static_cast(type_)), ErrorCodes::LOGICAL_ERROR); -} - template Authentication::Require::Require(const String & realm_) : Exception("Credentials required", ErrorCodes::BAD_ARGUMENTS) @@ -184,148 +49,4 @@ const String & Authentication::Require::getRealm() const return realm; } -inline String toString(Authentication::Type type_) -{ - return Authentication::TypeInfo::get(type_).raw_name; -} - - -inline Authentication::Digest Authentication::Util::encodeSHA256(const std::string_view & text [[maybe_unused]]) -{ -#if USE_SSL - Digest hash; - hash.resize(32); - ::DB::encodeSHA256(text, hash.data()); - return hash; -#else - throw DB::Exception( - "SHA256 passwords support is disabled, because ClickHouse was built without SSL library", - DB::ErrorCodes::SUPPORT_IS_DISABLED); -#endif -} - -inline Authentication::Digest Authentication::Util::encodeSHA1(const std::string_view & text) -{ - Poco::SHA1Engine engine; - engine.update(text.data(), text.size()); - return engine.digest(); -} - - -inline void Authentication::setPassword(const String & password_) -{ - switch (type) - { - case PLAINTEXT_PASSWORD: - return setPasswordHashBinary(Util::encodePlainText(password_)); - - case SHA256_PASSWORD: - return setPasswordHashBinary(Util::encodeSHA256(password_)); - - case DOUBLE_SHA1_PASSWORD: - return setPasswordHashBinary(Util::encodeDoubleSHA1(password_)); - - case NO_PASSWORD: - case LDAP: - case KERBEROS: - throw Exception("Cannot specify password for authentication type " + toString(type), ErrorCodes::LOGICAL_ERROR); - - case MAX_TYPE: - break; - } - throw Exception("setPassword(): authentication type " + toString(type) + " not supported", ErrorCodes::NOT_IMPLEMENTED); -} - - -inline String Authentication::getPassword() const -{ - if (type != PLAINTEXT_PASSWORD) - throw Exception("Cannot decode the password", ErrorCodes::LOGICAL_ERROR); - return String(password_hash.data(), password_hash.data() + password_hash.size()); -} - - -inline void Authentication::setPasswordHashHex(const String & hash) -{ - Digest digest; - digest.resize(hash.size() / 2); - boost::algorithm::unhex(hash.begin(), hash.end(), digest.data()); - setPasswordHashBinary(digest); -} - -inline String Authentication::getPasswordHashHex() const -{ - if (type == LDAP || type == KERBEROS) - throw Exception("Cannot get password hex hash for authentication type " + toString(type), ErrorCodes::LOGICAL_ERROR); - - String hex; - hex.resize(password_hash.size() * 2); - boost::algorithm::hex(password_hash.begin(), password_hash.end(), hex.data()); - return hex; -} - - -inline void Authentication::setPasswordHashBinary(const Digest & hash) -{ - switch (type) - { - case PLAINTEXT_PASSWORD: - { - password_hash = hash; - return; - } - - case SHA256_PASSWORD: - { - if (hash.size() != 32) - throw Exception( - "Password hash for the 'SHA256_PASSWORD' authentication type has length " + std::to_string(hash.size()) - + " but must be exactly 32 bytes.", - ErrorCodes::BAD_ARGUMENTS); - password_hash = hash; - return; - } - - case DOUBLE_SHA1_PASSWORD: - { - if (hash.size() != 20) - throw Exception( - "Password hash for the 'DOUBLE_SHA1_PASSWORD' authentication type has length " + std::to_string(hash.size()) - + " but must be exactly 20 bytes.", - ErrorCodes::BAD_ARGUMENTS); - password_hash = hash; - return; - } - - case NO_PASSWORD: - case LDAP: - case KERBEROS: - throw Exception("Cannot specify password binary hash for authentication type " + toString(type), ErrorCodes::LOGICAL_ERROR); - - case MAX_TYPE: - break; - } - throw Exception("setPasswordHashBinary(): authentication type " + toString(type) + " not supported", ErrorCodes::NOT_IMPLEMENTED); -} - -inline const String & Authentication::getLDAPServerName() const -{ - return ldap_server_name; -} - -inline void Authentication::setLDAPServerName(const String & name) -{ - ldap_server_name = name; -} - -inline const String & Authentication::getKerberosRealm() const -{ - return kerberos_realm; -} - -inline void Authentication::setKerberosRealm(const String & realm) -{ - kerberos_realm = realm; -} - } diff --git a/src/Access/AccessFlags.h b/src/Access/Common/AccessFlags.h similarity index 99% rename from src/Access/AccessFlags.h rename to src/Access/Common/AccessFlags.h index b107248e02b..87dc17522ab 100644 --- a/src/Access/AccessFlags.h +++ b/src/Access/Common/AccessFlags.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include #include diff --git a/src/Access/AccessRightsElement.cpp b/src/Access/Common/AccessRightsElement.cpp similarity index 99% rename from src/Access/AccessRightsElement.cpp rename to src/Access/Common/AccessRightsElement.cpp index 823019ffebd..5d62de69e40 100644 --- a/src/Access/AccessRightsElement.cpp +++ b/src/Access/Common/AccessRightsElement.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/src/Access/AccessRightsElement.h b/src/Access/Common/AccessRightsElement.h similarity index 99% rename from src/Access/AccessRightsElement.h rename to src/Access/Common/AccessRightsElement.h index c46a4b54e6e..012c8aa0d12 100644 --- a/src/Access/AccessRightsElement.h +++ b/src/Access/Common/AccessRightsElement.h @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace DB diff --git a/src/Access/AccessType.h b/src/Access/Common/AccessType.h similarity index 99% rename from src/Access/AccessType.h rename to src/Access/Common/AccessType.h index 5e156b23e58..aa7dcbb006b 100644 --- a/src/Access/AccessType.h +++ b/src/Access/Common/AccessType.h @@ -110,7 +110,7 @@ enum class AccessType (anyone can kill his own queries) */\ \ M(MOVE_PARTITION_BETWEEN_SHARDS, "", GLOBAL, ALL) /* required to be able to move a part/partition to a table - identified by it's ZooKeeper path */\ + identified by its ZooKeeper path */\ \ M(CREATE_USER, "", GLOBAL, ACCESS_MANAGEMENT) \ M(ALTER_USER, "", GLOBAL, ACCESS_MANAGEMENT) \ diff --git a/src/Access/AllowedClientHosts.cpp b/src/Access/Common/AllowedClientHosts.cpp similarity index 99% rename from src/Access/AllowedClientHosts.cpp rename to src/Access/Common/AllowedClientHosts.cpp index f306b1386dd..c5e87844376 100644 --- a/src/Access/AllowedClientHosts.cpp +++ b/src/Access/Common/AllowedClientHosts.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include diff --git a/src/Access/AllowedClientHosts.h b/src/Access/Common/AllowedClientHosts.h similarity index 100% rename from src/Access/AllowedClientHosts.h rename to src/Access/Common/AllowedClientHosts.h diff --git a/src/Access/Common/AuthenticationData.cpp b/src/Access/Common/AuthenticationData.cpp new file mode 100644 index 00000000000..e460d1dcc4d --- /dev/null +++ b/src/Access/Common/AuthenticationData.cpp @@ -0,0 +1,196 @@ +#include +#include +#include +#include +#include +#include +#include + + +namespace DB +{ +namespace ErrorCodes +{ + extern const int SUPPORT_IS_DISABLED; + extern const int BAD_ARGUMENTS; + extern const int LOGICAL_ERROR; + extern const int NOT_IMPLEMENTED; +} + + +const AuthenticationTypeInfo & AuthenticationTypeInfo::get(AuthenticationType type_) +{ + static constexpr auto make_info = [](const char * raw_name_) + { + String init_name = raw_name_; + boost::to_lower(init_name); + return AuthenticationTypeInfo{raw_name_, std::move(init_name)}; + }; + + switch (type_) + { + case AuthenticationType::NO_PASSWORD: + { + static const auto info = make_info("NO_PASSWORD"); + return info; + } + case AuthenticationType::PLAINTEXT_PASSWORD: + { + static const auto info = make_info("PLAINTEXT_PASSWORD"); + return info; + } + case AuthenticationType::SHA256_PASSWORD: + { + static const auto info = make_info("SHA256_PASSWORD"); + return info; + } + case AuthenticationType::DOUBLE_SHA1_PASSWORD: + { + static const auto info = make_info("DOUBLE_SHA1_PASSWORD"); + return info; + } + case AuthenticationType::LDAP: + { + static const auto info = make_info("LDAP"); + return info; + } + case AuthenticationType::KERBEROS: + { + static const auto info = make_info("KERBEROS"); + return info; + } + case AuthenticationType::MAX_TYPE: + break; + } + throw Exception("Unknown authentication type: " + std::to_string(static_cast(type_)), ErrorCodes::LOGICAL_ERROR); +} + + +AuthenticationData::Digest AuthenticationData::Util::encodeSHA256(const std::string_view & text [[maybe_unused]]) +{ +#if USE_SSL + Digest hash; + hash.resize(32); + ::DB::encodeSHA256(text, hash.data()); + return hash; +#else + throw DB::Exception( + "SHA256 passwords support is disabled, because ClickHouse was built without SSL library", + DB::ErrorCodes::SUPPORT_IS_DISABLED); +#endif +} + + +AuthenticationData::Digest AuthenticationData::Util::encodeSHA1(const std::string_view & text) +{ + Poco::SHA1Engine engine; + engine.update(text.data(), text.size()); + return engine.digest(); +} + + +bool operator ==(const AuthenticationData & lhs, const AuthenticationData & rhs) +{ + return (lhs.type == rhs.type) && (lhs.password_hash == rhs.password_hash) + && (lhs.ldap_server_name == rhs.ldap_server_name) && (lhs.kerberos_realm == rhs.kerberos_realm); +} + + +void AuthenticationData::setPassword(const String & password_) +{ + switch (type) + { + case AuthenticationType::PLAINTEXT_PASSWORD: + return setPasswordHashBinary(Util::encodePlainText(password_)); + + case AuthenticationType::SHA256_PASSWORD: + return setPasswordHashBinary(Util::encodeSHA256(password_)); + + case AuthenticationType::DOUBLE_SHA1_PASSWORD: + return setPasswordHashBinary(Util::encodeDoubleSHA1(password_)); + + case AuthenticationType::NO_PASSWORD: + case AuthenticationType::LDAP: + case AuthenticationType::KERBEROS: + throw Exception("Cannot specify password for authentication type " + toString(type), ErrorCodes::LOGICAL_ERROR); + + case AuthenticationType::MAX_TYPE: + break; + } + throw Exception("setPassword(): authentication type " + toString(type) + " not supported", ErrorCodes::NOT_IMPLEMENTED); +} + + +String AuthenticationData::getPassword() const +{ + if (type != AuthenticationType::PLAINTEXT_PASSWORD) + throw Exception("Cannot decode the password", ErrorCodes::LOGICAL_ERROR); + return String(password_hash.data(), password_hash.data() + password_hash.size()); +} + + +void AuthenticationData::setPasswordHashHex(const String & hash) +{ + Digest digest; + digest.resize(hash.size() / 2); + boost::algorithm::unhex(hash.begin(), hash.end(), digest.data()); + setPasswordHashBinary(digest); +} + + +String AuthenticationData::getPasswordHashHex() const +{ + if (type == AuthenticationType::LDAP || type == AuthenticationType::KERBEROS) + throw Exception("Cannot get password hex hash for authentication type " + toString(type), ErrorCodes::LOGICAL_ERROR); + + String hex; + hex.resize(password_hash.size() * 2); + boost::algorithm::hex(password_hash.begin(), password_hash.end(), hex.data()); + return hex; +} + + +void AuthenticationData::setPasswordHashBinary(const Digest & hash) +{ + switch (type) + { + case AuthenticationType::PLAINTEXT_PASSWORD: + { + password_hash = hash; + return; + } + + case AuthenticationType::SHA256_PASSWORD: + { + if (hash.size() != 32) + throw Exception( + "Password hash for the 'SHA256_PASSWORD' authentication type has length " + std::to_string(hash.size()) + + " but must be exactly 32 bytes.", + ErrorCodes::BAD_ARGUMENTS); + password_hash = hash; + return; + } + + case AuthenticationType::DOUBLE_SHA1_PASSWORD: + { + if (hash.size() != 20) + throw Exception( + "Password hash for the 'DOUBLE_SHA1_PASSWORD' authentication type has length " + std::to_string(hash.size()) + + " but must be exactly 20 bytes.", + ErrorCodes::BAD_ARGUMENTS); + password_hash = hash; + return; + } + + case AuthenticationType::NO_PASSWORD: + case AuthenticationType::LDAP: + case AuthenticationType::KERBEROS: + throw Exception("Cannot specify password binary hash for authentication type " + toString(type), ErrorCodes::LOGICAL_ERROR); + + case AuthenticationType::MAX_TYPE: + break; + } + throw Exception("setPasswordHashBinary(): authentication type " + toString(type) + " not supported", ErrorCodes::NOT_IMPLEMENTED); +} + +} diff --git a/src/Access/Common/AuthenticationData.h b/src/Access/Common/AuthenticationData.h new file mode 100644 index 00000000000..5e47fbb9e15 --- /dev/null +++ b/src/Access/Common/AuthenticationData.h @@ -0,0 +1,103 @@ +#pragma once + +#include +#include + +namespace DB +{ + +enum class AuthenticationType +{ + /// User doesn't have to enter password. + NO_PASSWORD, + + /// Password is stored as is. + PLAINTEXT_PASSWORD, + + /// Password is encrypted in SHA256 hash. + SHA256_PASSWORD, + + /// SHA1(SHA1(password)). + /// This kind of hash is used by the `mysql_native_password` authentication plugin. + DOUBLE_SHA1_PASSWORD, + + /// Password is checked by a [remote] LDAP server. Connection will be made at each authentication attempt. + LDAP, + + /// Kerberos authentication performed through GSS-API negotiation loop. + KERBEROS, + + MAX_TYPE, +}; + +struct AuthenticationTypeInfo +{ + const char * const raw_name; + const String name; /// Lowercased with underscores, e.g. "sha256_password". + static const AuthenticationTypeInfo & get(AuthenticationType type_); +}; + + +/// Stores data for checking password when a user logins. +class AuthenticationData +{ +public: + using Digest = std::vector; + + AuthenticationData(AuthenticationType type_ = AuthenticationType::NO_PASSWORD) : type(type_) {} + AuthenticationData(const AuthenticationData & src) = default; + AuthenticationData & operator =(const AuthenticationData & src) = default; + AuthenticationData(AuthenticationData && src) = default; + AuthenticationData & operator =(AuthenticationData && src) = default; + + AuthenticationType getType() const { return type; } + + /// Sets the password and encrypt it using the authentication type set in the constructor. + void setPassword(const String & password_); + + /// Returns the password. Allowed to use only for Type::PLAINTEXT_PASSWORD. + String getPassword() const; + + /// Sets the password as a string of hexadecimal digits. + void setPasswordHashHex(const String & hash); + String getPasswordHashHex() const; + + /// Sets the password in binary form. + void setPasswordHashBinary(const Digest & hash); + const Digest & getPasswordHashBinary() const { return password_hash; } + + /// Sets the server name for authentication type LDAP. + const String & getLDAPServerName() const { return ldap_server_name; } + void setLDAPServerName(const String & name) { ldap_server_name = name; } + + /// Sets the realm name for authentication type KERBEROS. + const String & getKerberosRealm() const { return kerberos_realm; } + void setKerberosRealm(const String & realm) { kerberos_realm = realm; } + + friend bool operator ==(const AuthenticationData & lhs, const AuthenticationData & rhs); + friend bool operator !=(const AuthenticationData & lhs, const AuthenticationData & rhs) { return !(lhs == rhs); } + + struct Util + { + static Digest encodePlainText(const std::string_view & text) { return Digest(text.data(), text.data() + text.size()); } + static Digest encodeSHA256(const std::string_view & text); + static Digest encodeSHA1(const std::string_view & text); + static Digest encodeSHA1(const Digest & text) { return encodeSHA1(std::string_view{reinterpret_cast(text.data()), text.size()}); } + static Digest encodeDoubleSHA1(const std::string_view & text) { return encodeSHA1(encodeSHA1(text)); } + static Digest encodeDoubleSHA1(const Digest & text) { return encodeSHA1(encodeSHA1(text)); } + }; + +private: + AuthenticationType type = AuthenticationType::NO_PASSWORD; + Digest password_hash; + String ldap_server_name; + String kerberos_realm; +}; + + +inline String toString(AuthenticationType type_) +{ + return AuthenticationTypeInfo::get(type_).raw_name; +} + +} diff --git a/src/Access/Common/CMakeLists.txt b/src/Access/Common/CMakeLists.txt new file mode 100644 index 00000000000..6a7682ec4bd --- /dev/null +++ b/src/Access/Common/CMakeLists.txt @@ -0,0 +1,5 @@ +include("${ClickHouse_SOURCE_DIR}/cmake/dbms_glob_sources.cmake") + +add_headers_and_sources(clickhouse_common_access .) +add_library(clickhouse_common_access ${clickhouse_common_access_headers} ${clickhouse_common_access_sources}) +target_link_libraries(clickhouse_common_access PUBLIC clickhouse_common_io) diff --git a/src/Access/DiskAccessStorage.cpp b/src/Access/DiskAccessStorage.cpp index e3d773f4d91..247bcc1ee89 100644 --- a/src/Access/DiskAccessStorage.cpp +++ b/src/Access/DiskAccessStorage.cpp @@ -1,19 +1,19 @@ #include -#include -#include -#include -#include -#include #include #include #include #include #include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include diff --git a/src/Access/GSSAcceptor.h b/src/Access/GSSAcceptor.h index aa11507e559..4501622cd81 100644 --- a/src/Access/GSSAcceptor.h +++ b/src/Access/GSSAcceptor.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #include #include diff --git a/src/Access/IAccessStorage.cpp b/src/Access/IAccessStorage.cpp index aade1fdd6f1..a0ad5d4ec79 100644 --- a/src/Access/IAccessStorage.cpp +++ b/src/Access/IAccessStorage.cpp @@ -1,6 +1,7 @@ #include -#include +#include #include +#include #include #include #include @@ -495,7 +496,7 @@ bool IAccessStorage::areCredentialsValidImpl( if (credentials.getUserName() != user.getName()) return false; - return user.authentication.areCredentialsValid(credentials, external_authenticators); + return Authentication::areCredentialsValid(credentials, user.auth_data, external_authenticators); } diff --git a/src/Access/LDAPAccessStorage.cpp b/src/Access/LDAPAccessStorage.cpp index 8a612982c79..182e391cc77 100644 --- a/src/Access/LDAPAccessStorage.cpp +++ b/src/Access/LDAPAccessStorage.cpp @@ -527,8 +527,8 @@ UUID LDAPAccessStorage::loginImpl(const Credentials & credentials, const Poco::N // User does not exist, so we create one, and will add it if authentication is successful. auto user = std::make_shared(); user->setName(credentials.getUserName()); - user->authentication = Authentication(Authentication::Type::LDAP); - user->authentication.setLDAPServerName(ldap_server_name); + user->auth_data = AuthenticationData(AuthenticationType::LDAP); + user->auth_data.setLDAPServerName(ldap_server_name); if (!isAddressAllowedImpl(*user, address)) throwAddressNotAllowed(address); @@ -555,8 +555,8 @@ UUID LDAPAccessStorage::getIDOfLoggedUserImpl(const String & user_name) const // User does not exist, so we create one, and add it pretending that the authentication is successful. auto user = std::make_shared(); user->setName(user_name); - user->authentication = Authentication(Authentication::Type::LDAP); - user->authentication.setLDAPServerName(ldap_server_name); + user->auth_data = AuthenticationData(AuthenticationType::LDAP); + user->auth_data.setLDAPServerName(ldap_server_name); LDAPClient::SearchResultsList external_roles; diff --git a/src/Access/LDAPClient.h b/src/Access/LDAPClient.h index 143047c6f95..3d6ee9c8dc9 100644 --- a/src/Access/LDAPClient.h +++ b/src/Access/LDAPClient.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #include diff --git a/src/Access/RolesOrUsersSet.cpp b/src/Access/RolesOrUsersSet.cpp index ebd4f0f7a40..97acd5c1a76 100644 --- a/src/Access/RolesOrUsersSet.cpp +++ b/src/Access/RolesOrUsersSet.cpp @@ -1,9 +1,9 @@ #include +#include +#include #include #include #include -#include -#include #include #include #include diff --git a/src/Access/SettingsProfileElement.cpp b/src/Access/SettingsProfileElement.cpp index b42bcd1c279..a5d6dbf60f7 100644 --- a/src/Access/SettingsProfileElement.cpp +++ b/src/Access/SettingsProfileElement.cpp @@ -2,11 +2,11 @@ #include #include #include -#include #include #include #include #include +#include #include diff --git a/src/Access/User.cpp b/src/Access/User.cpp index e21b48e11a0..d7c7f5c7ada 100644 --- a/src/Access/User.cpp +++ b/src/Access/User.cpp @@ -9,7 +9,7 @@ bool User::equal(const IAccessEntity & other) const if (!IAccessEntity::equal(other)) return false; const auto & other_user = typeid_cast(other); - return (authentication == other_user.authentication) && (allowed_client_hosts == other_user.allowed_client_hosts) + return (auth_data == other_user.auth_data) && (allowed_client_hosts == other_user.allowed_client_hosts) && (access == other_user.access) && (granted_roles == other_user.granted_roles) && (default_roles == other_user.default_roles) && (settings == other_user.settings) && (grantees == other_user.grantees) && (default_database == other_user.default_database); } diff --git a/src/Access/User.h b/src/Access/User.h index 6b61d5afdea..34badd5f847 100644 --- a/src/Access/User.h +++ b/src/Access/User.h @@ -2,8 +2,8 @@ #include #include -#include -#include +#include +#include #include #include #include @@ -15,7 +15,7 @@ namespace DB */ struct User : public IAccessEntity { - Authentication authentication; + AuthenticationData auth_data; AllowedClientHosts allowed_client_hosts = AllowedClientHosts::AnyHostTag{}; AccessRights access; GrantedRoles granted_roles; diff --git a/src/Access/UsersConfigAccessStorage.cpp b/src/Access/UsersConfigAccessStorage.cpp index 7c5baa92b27..2d202c5094d 100644 --- a/src/Access/UsersConfigAccessStorage.cpp +++ b/src/Access/UsersConfigAccessStorage.cpp @@ -75,18 +75,18 @@ namespace if (has_password_plaintext) { - user->authentication = Authentication{Authentication::PLAINTEXT_PASSWORD}; - user->authentication.setPassword(config.getString(user_config + ".password")); + user->auth_data = AuthenticationData{AuthenticationType::PLAINTEXT_PASSWORD}; + user->auth_data.setPassword(config.getString(user_config + ".password")); } else if (has_password_sha256_hex) { - user->authentication = Authentication{Authentication::SHA256_PASSWORD}; - user->authentication.setPasswordHashHex(config.getString(user_config + ".password_sha256_hex")); + user->auth_data = AuthenticationData{AuthenticationType::SHA256_PASSWORD}; + user->auth_data.setPasswordHashHex(config.getString(user_config + ".password_sha256_hex")); } else if (has_password_double_sha1_hex) { - user->authentication = Authentication{Authentication::DOUBLE_SHA1_PASSWORD}; - user->authentication.setPasswordHashHex(config.getString(user_config + ".password_double_sha1_hex")); + user->auth_data = AuthenticationData{AuthenticationType::DOUBLE_SHA1_PASSWORD}; + user->auth_data.setPasswordHashHex(config.getString(user_config + ".password_double_sha1_hex")); } else if (has_ldap) { @@ -98,15 +98,15 @@ namespace if (ldap_server_name.empty()) throw Exception("LDAP server name cannot be empty for user " + user_name + ".", ErrorCodes::BAD_ARGUMENTS); - user->authentication = Authentication{Authentication::LDAP}; - user->authentication.setLDAPServerName(ldap_server_name); + user->auth_data = AuthenticationData{AuthenticationType::LDAP}; + user->auth_data.setLDAPServerName(ldap_server_name); } else if (has_kerberos) { const auto realm = config.getString(user_config + ".kerberos.realm", ""); - user->authentication = Authentication{Authentication::KERBEROS}; - user->authentication.setKerberosRealm(realm); + user->auth_data = AuthenticationData{AuthenticationType::KERBEROS}; + user->auth_data.setKerberosRealm(realm); } const auto profile_name_config = user_config + ".profile"; diff --git a/src/AggregateFunctions/AggregateFunctionAvg.h b/src/AggregateFunctions/AggregateFunctionAvg.h index fd8f9faa3f8..a9c06562e72 100644 --- a/src/AggregateFunctions/AggregateFunctionAvg.h +++ b/src/AggregateFunctions/AggregateFunctionAvg.h @@ -9,9 +9,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_EMBEDDED_COMPILER # include diff --git a/src/AggregateFunctions/AggregateFunctionBitwise.h b/src/AggregateFunctions/AggregateFunctionBitwise.h index 90db2469828..d79192ab38a 100644 --- a/src/AggregateFunctions/AggregateFunctionBitwise.h +++ b/src/AggregateFunctions/AggregateFunctionBitwise.h @@ -9,9 +9,7 @@ #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_EMBEDDED_COMPILER # include diff --git a/src/AggregateFunctions/AggregateFunctionCount.h b/src/AggregateFunctions/AggregateFunctionCount.h index 0b4052c987b..022789cc96c 100644 --- a/src/AggregateFunctions/AggregateFunctionCount.h +++ b/src/AggregateFunctions/AggregateFunctionCount.h @@ -10,9 +10,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_EMBEDDED_COMPILER # include diff --git a/src/AggregateFunctions/AggregateFunctionIf.h b/src/AggregateFunctions/AggregateFunctionIf.h index 79999437ca1..c7c5dbf441e 100644 --- a/src/AggregateFunctions/AggregateFunctionIf.h +++ b/src/AggregateFunctions/AggregateFunctionIf.h @@ -5,9 +5,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_EMBEDDED_COMPILER # include diff --git a/src/AggregateFunctions/AggregateFunctionMinMaxAny.h b/src/AggregateFunctions/AggregateFunctionMinMaxAny.h index 189272a7058..ad3ccdcc48e 100644 --- a/src/AggregateFunctions/AggregateFunctionMinMaxAny.h +++ b/src/AggregateFunctions/AggregateFunctionMinMaxAny.h @@ -14,9 +14,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_EMBEDDED_COMPILER # include diff --git a/src/AggregateFunctions/AggregateFunctionNull.h b/src/AggregateFunctions/AggregateFunctionNull.h index 7890e96ef66..503243f98b0 100644 --- a/src/AggregateFunctions/AggregateFunctionNull.h +++ b/src/AggregateFunctions/AggregateFunctionNull.h @@ -10,9 +10,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_EMBEDDED_COMPILER # include diff --git a/src/AggregateFunctions/AggregateFunctionSum.h b/src/AggregateFunctions/AggregateFunctionSum.h index e7f0357f644..f6a9bdda7fd 100644 --- a/src/AggregateFunctions/AggregateFunctionSum.h +++ b/src/AggregateFunctions/AggregateFunctionSum.h @@ -14,9 +14,7 @@ #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_EMBEDDED_COMPILER # include diff --git a/src/AggregateFunctions/AggregateFunctionSumMap.h b/src/AggregateFunctions/AggregateFunctionSumMap.h index 3bc1ff2b61f..e573cf08c50 100644 --- a/src/AggregateFunctions/AggregateFunctionSumMap.h +++ b/src/AggregateFunctions/AggregateFunctionSumMap.h @@ -395,9 +395,7 @@ private: using Self = AggregateFunctionSumMapFiltered; using Base = AggregateFunctionMapBase; - /// ARCADIA_BUILD disallow unordered_set for big ints for some reason - static constexpr const bool allow_hash = !is_over_big_int; - using ContainerT = std::conditional_t, std::set>; + using ContainerT = std::unordered_set; ContainerT keys_to_keep; @@ -418,13 +416,10 @@ public: "Aggregate function {} requires an Array as a parameter", getName()); - if constexpr (allow_hash) - keys_to_keep.reserve(keys_to_keep_.size()); + keys_to_keep.reserve(keys_to_keep_.size()); for (const Field & f : keys_to_keep_) - { keys_to_keep.emplace(f.safeGet()); - } } String getName() const override diff --git a/src/AggregateFunctions/IAggregateFunction.h b/src/AggregateFunctions/IAggregateFunction.h index 61e4e424652..e86fc13ccc4 100644 --- a/src/AggregateFunctions/IAggregateFunction.h +++ b/src/AggregateFunctions/IAggregateFunction.h @@ -9,9 +9,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #include #include diff --git a/src/AggregateFunctions/ThetaSketchData.h b/src/AggregateFunctions/ThetaSketchData.h index b2e32db6c75..bc583250002 100644 --- a/src/AggregateFunctions/ThetaSketchData.h +++ b/src/AggregateFunctions/ThetaSketchData.h @@ -1,15 +1,13 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_DATASKETCHES #include #include -#include // Y_IGNORE -#include // Y_IGNORE +#include +#include namespace DB diff --git a/src/AggregateFunctions/registerAggregateFunctions.cpp b/src/AggregateFunctions/registerAggregateFunctions.cpp index 5d0af719290..bffc344062e 100644 --- a/src/AggregateFunctions/registerAggregateFunctions.cpp +++ b/src/AggregateFunctions/registerAggregateFunctions.cpp @@ -98,9 +98,7 @@ void registerAggregateFunctions() registerAggregateFunctionUniqUpTo(factory); registerAggregateFunctionTopK(factory); registerAggregateFunctionsBitwise(factory); -#if !defined(ARCADIA_BUILD) registerAggregateFunctionsBitmap(factory); -#endif registerAggregateFunctionsMaxIntersections(factory); registerAggregateFunctionHistogram(factory); registerAggregateFunctionRetention(factory); diff --git a/src/Backups/BackupEntryFromImmutableFile.cpp b/src/Backups/BackupEntryFromImmutableFile.cpp index 9be1b53c85d..4d1574056ef 100644 --- a/src/Backups/BackupEntryFromImmutableFile.cpp +++ b/src/Backups/BackupEntryFromImmutableFile.cpp @@ -41,7 +41,7 @@ std::unique_ptr BackupEntryFromImmutableFile::getReadBuffer() const if (disk) return disk->readFile(file_path); else - return createReadBufferFromFileBase(file_path, {}, 0); + return createReadBufferFromFileBase(file_path, /* settings= */ {}); } } diff --git a/src/Backups/BackupEntryFromSmallFile.cpp b/src/Backups/BackupEntryFromSmallFile.cpp index a4dd00ad9b1..c91afde7c2b 100644 --- a/src/Backups/BackupEntryFromSmallFile.cpp +++ b/src/Backups/BackupEntryFromSmallFile.cpp @@ -10,7 +10,7 @@ namespace { String readFile(const String & file_path) { - auto buf = createReadBufferFromFileBase(file_path, {}, 0); + auto buf = createReadBufferFromFileBase(file_path, /* settings= */ {}); String s; readStringUntilEOF(s, *buf); return s; diff --git a/src/Bridge/LibraryBridgeHelper.cpp b/src/Bridge/LibraryBridgeHelper.cpp index e5c6c09ba62..bd0604ec8e0 100644 --- a/src/Bridge/LibraryBridgeHelper.cpp +++ b/src/Bridge/LibraryBridgeHelper.cpp @@ -258,6 +258,7 @@ Pipe LibraryBridgeHelper::loadBase(const Poco::URI & uri, ReadWriteBufferFromHTT 0, Poco::Net::HTTPBasicCredentials{}, DBMS_DEFAULT_BUFFER_SIZE, + getContext()->getReadSettings(), ReadWriteBufferFromHTTP::HTTPHeaderEntries{}); auto source = FormatFactory::instance().getInput(LibraryBridgeHelper::DEFAULT_FORMAT, *read_buf_ptr, sample_block, getContext(), DEFAULT_BLOCK_SIZE); diff --git a/src/Bridge/XDBCBridgeHelper.h b/src/Bridge/XDBCBridgeHelper.h index d6d2af3a045..d321c1f23de 100644 --- a/src/Bridge/XDBCBridgeHelper.h +++ b/src/Bridge/XDBCBridgeHelper.h @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include #include @@ -15,9 +15,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace DB diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 09aaa85c394..0a7c3123f9d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -77,6 +77,7 @@ add_headers_and_sources(clickhouse_common_io IO) add_headers_and_sources(clickhouse_common_io IO/S3) list (REMOVE_ITEM clickhouse_common_io_sources Common/malloc.cpp Common/new_delete.cpp) +add_headers_and_sources(dbms Disks/IO) if (USE_SQLITE) add_headers_and_sources(dbms Databases/SQLite) endif() @@ -109,6 +110,10 @@ if (USE_HDFS) add_headers_and_sources(dbms Disks/HDFS) endif() +if(USE_FILELOG) + add_headers_and_sources(dbms Storages/FileLog) +endif() + list (APPEND clickhouse_common_io_sources ${CONFIG_BUILD}) list (APPEND clickhouse_common_io_headers ${CONFIG_VERSION} ${CONFIG_COMMON}) @@ -161,6 +166,7 @@ endif() target_link_libraries (clickhouse_common_io PRIVATE jemalloc) +add_subdirectory(Access/Common) add_subdirectory(Common/ZooKeeper) add_subdirectory(Common/Config) @@ -192,6 +198,7 @@ add_object_library(clickhouse_databases Databases) add_object_library(clickhouse_databases_mysql Databases/MySQL) add_object_library(clickhouse_disks Disks) add_object_library(clickhouse_interpreters Interpreters) +add_object_library(clickhouse_interpreters_access Interpreters/Access) add_object_library(clickhouse_interpreters_mysql Interpreters/MySQL) add_object_library(clickhouse_interpreters_clusterproxy Interpreters/ClusterProxy) add_object_library(clickhouse_interpreters_jit Interpreters/JIT) @@ -285,6 +292,14 @@ target_link_libraries (clickhouse_common_io dragonbox_to_chars ) +# Use X86 AVX2/AVX512 instructions to accelerate filter operations +set_source_files_properties( + Columns/ColumnFixedString.cpp + Columns/ColumnsCommon.cpp + Columns/ColumnVector.cpp + Columns/ColumnDecimal.cpp + PROPERTIES COMPILE_FLAGS "${X86_INTRINSICS_FLAGS}") + if(RE2_LIBRARY) target_link_libraries(clickhouse_common_io PUBLIC ${RE2_LIBRARY}) endif() diff --git a/src/Client/ClientBase.cpp b/src/Client/ClientBase.cpp index a7c8fdb4641..ebc6c7d3107 100644 --- a/src/Client/ClientBase.cpp +++ b/src/Client/ClientBase.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -14,9 +15,7 @@ #include "Core/Block.h" #include "Core/Protocol.h" -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #include #include #include @@ -54,12 +53,18 @@ #include namespace fs = std::filesystem; +using namespace std::literals; namespace DB { -static const NameSet exit_strings{"exit", "quit", "logout", "учше", "йгше", "дщпщге", "exit;", "quit;", "logout;", "учшеж", "йгшеж", "дщпщгеж", "q", "й", "\\q", "\\Q", "\\й", "\\Й", ":q", "Жй"}; +static const NameSet exit_strings +{ + "exit", "quit", "logout", "учше", "йгше", "дщпщге", + "exit;", "quit;", "logout;", "учшеж", "йгшеж", "дщпщгеж", + "q", "й", "\\q", "\\Q", "\\й", "\\Й", ":q", "Жй" +}; namespace ErrorCodes { @@ -105,9 +110,11 @@ void interruptSignalHandler(int signum) _exit(signum); } + ClientBase::~ClientBase() = default; ClientBase::ClientBase() = default; + void ClientBase::setupSignalHandler() { exit_on_signal.test_and_set(); @@ -170,8 +177,7 @@ ASTPtr ClientBase::parseQuery(const char *& pos, const char * end, bool allow_mu } -// Consumes trailing semicolons and tries to consume the same-line trailing -// comment. +/// Consumes trailing semicolons and tries to consume the same-line trailing comment. void ClientBase::adjustQueryEnd(const char *& this_query_end, const char * all_queries_end, int max_parser_depth) { // We have to skip the trailing semicolon that might be left @@ -248,7 +254,8 @@ void ClientBase::onData(Block & block, ASTPtr parsed_query) if (block.rows() == 0 || (query_fuzzer_runs != 0 && processed_rows >= 100)) return; - if (need_render_progress && (stdout_is_a_tty || is_interactive)) + /// If results are written INTO OUTFILE, we can avoid clearing progress to avoid flicker. + if (need_render_progress && (stdout_is_a_tty || is_interactive) && !select_into_file) progress_indication.clearProgressOutput(); output_format->write(materializeBlock(block)); @@ -259,7 +266,11 @@ void ClientBase::onData(Block & block, ASTPtr parsed_query) /// Restore progress bar after data block. if (need_render_progress && (stdout_is_a_tty || is_interactive)) + { + if (select_into_file) + std::cerr << "\r"; progress_indication.writeProgress(); + } } @@ -330,12 +341,15 @@ void ClientBase::initBlockOutputStream(const Block & block, ASTPtr parsed_query) String current_format = format; + select_into_file = false; + /// The query can specify output format or output file. - /// FIXME: try to prettify this cast using `as<>()` if (const auto * query_with_output = dynamic_cast(parsed_query.get())) { if (query_with_output->out_file) { + select_into_file = true; + const auto & out_file_node = query_with_output->out_file->as(); const auto & out_file = out_file_node.value.safeGet(); @@ -368,11 +382,14 @@ void ClientBase::initBlockOutputStream(const Block & block, ASTPtr parsed_query) if (has_vertical_output_suffix) current_format = "Vertical"; - /// It is not clear how to write progress with parallel formatting. It may increase code complexity significantly. - if (!need_render_progress) - output_format = global_context->getOutputFormatParallelIfPossible(current_format, out_file_buf ? *out_file_buf : *out_buf, block); + /// It is not clear how to write progress intermixed with data with parallel formatting. + /// It may increase code complexity significantly. + if (!need_render_progress || select_into_file) + output_format = global_context->getOutputFormatParallelIfPossible( + current_format, out_file_buf ? *out_file_buf : *out_buf, block); else - output_format = global_context->getOutputFormat(current_format, out_file_buf ? *out_file_buf : *out_buf, block); + output_format = global_context->getOutputFormat( + current_format, out_file_buf ? *out_file_buf : *out_buf, block); output_format->doWritePrefix(); } @@ -1364,9 +1381,7 @@ void ClientBase::runInteractive() catch (const Exception & e) { /// We don't need to handle the test hints in the interactive mode. - bool print_stack_trace = config().getBool("stacktrace", false); std::cerr << "Exception on client:" << std::endl << getExceptionMessage(e, print_stack_trace, true) << std::endl << std::endl; - client_exception = std::make_unique(e); } @@ -1450,8 +1465,7 @@ void ClientBase::clearTerminal() /// It is needed if garbage is left in terminal. /// Show cursor. It can be left hidden by invocation of previous programs. /// A test for this feature: perl -e 'print "x"x100000'; echo -ne '\033[0;0H\033[?25l'; clickhouse-client - std::cout << "\033[0J" - "\033[?25h"; + std::cout << "\033[0J" "\033[?25h"; } @@ -1476,7 +1490,7 @@ void ClientBase::readArguments(int argc, char ** argv, Arguments & common_argume { const char * arg = argv[arg_num]; - if (0 == strcmp(arg, "--external")) + if (arg == "--external"sv) { in_external_group = true; external_tables_arguments.emplace_back(Arguments{""}); @@ -1491,8 +1505,8 @@ void ClientBase::readArguments(int argc, char ** argv, Arguments & common_argume } /// Options with value after whitespace. else if (in_external_group - && (0 == strcmp(arg, "--file") || 0 == strcmp(arg, "--name") || 0 == strcmp(arg, "--format") - || 0 == strcmp(arg, "--structure") || 0 == strcmp(arg, "--types"))) + && (arg == "--file"sv || arg == "--name"sv || arg == "--format"sv + || arg == "--structure"sv || arg == "--types"sv)) { if (arg_num + 1 < argc) { @@ -1598,9 +1612,13 @@ void ClientBase::init(int argc, char ** argv) ("disable_suggestion,A", "Disable loading suggestion data. Note that suggestion data is loaded asynchronously through a second connection to ClickHouse server. Also it is reasonable to disable suggestion if you want to paste a query with TAB characters. Shorthand option -A is for those who get used to mysql client.") ("time,t", "print query execution time to stderr in non-interactive mode (for benchmarks)") + ("echo", "in batch mode, print query before execution") ("verbose", "print query and other debugging info") + ("log-level", po::value(), "log level") + ("server_logs_file", po::value(), "put server logs into specified file") + ("multiline,m", "multiline") ("multiquery,n", "multiquery") @@ -1687,6 +1705,8 @@ void ClientBase::init(int argc, char ** argv) config().setBool("verbose", true); if (options.count("log-level")) Poco::Logger::root().setLevel(options["log-level"].as()); + if (options.count("server_logs_file")) + server_logs_file = options["server_logs_file"].as(); if (options.count("hardware-utilization")) progress_indication.print_hardware_utilization = true; diff --git a/src/Client/ClientBase.h b/src/Client/ClientBase.h index 2e6cd1f66a6..93906946616 100644 --- a/src/Client/ClientBase.h +++ b/src/Client/ClientBase.h @@ -155,6 +155,7 @@ protected: ConnectionParameters connection_parameters; String format; /// Query results output format. + bool select_into_file = false; /// If writing result INTO OUTFILE. It affects progress rendering. bool is_default_format = true; /// false, if format is set in the config or command line. size_t format_max_block_size = 0; /// Max block size for console output. String insert_format; /// Format of INSERT data that is read from stdin in batch mode. @@ -202,6 +203,7 @@ protected: bool written_first_block = false; size_t processed_rows = 0; /// How many rows have been read or written. + bool print_stack_trace = false; /// The last exception that was received from the server. Is used for the /// return code in batch mode. std::unique_ptr server_exception; diff --git a/src/Client/Connection.cpp b/src/Client/Connection.cpp index 3c920e8cabe..d7d80606804 100644 --- a/src/Client/Connection.cpp +++ b/src/Client/Connection.cpp @@ -31,10 +31,8 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -# include -#endif +#include +#include #if USE_SSL # include diff --git a/src/Client/Connection.h b/src/Client/Connection.h index 17d6b41a2e5..3b49760ba10 100644 --- a/src/Client/Connection.h +++ b/src/Client/Connection.h @@ -4,9 +4,7 @@ #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #include #include diff --git a/src/Client/ConnectionParameters.cpp b/src/Client/ConnectionParameters.cpp index 9ec4d663eef..dbd463583f5 100644 --- a/src/Client/ConnectionParameters.cpp +++ b/src/Client/ConnectionParameters.cpp @@ -12,9 +12,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -#include // Y_IGNORE -#endif +#include namespace DB @@ -55,12 +53,10 @@ ConnectionParameters::ConnectionParameters(const Poco::Util::AbstractConfigurati } if (password_prompt) { -#if !defined(ARCADIA_BUILD) std::string prompt{"Password for user (" + user + "): "}; char buf[1000] = {}; if (auto * result = readpassphrase(prompt.c_str(), buf, sizeof(buf), 0)) password = result; -#endif } /// By default compression is disabled if address looks like localhost. diff --git a/src/Client/HedgedConnections.cpp b/src/Client/HedgedConnections.cpp index 1ca890f40f9..c73bea53d10 100644 --- a/src/Client/HedgedConnections.cpp +++ b/src/Client/HedgedConnections.cpp @@ -236,12 +236,12 @@ void HedgedConnections::sendCancel() if (!sent_query || cancelled) throw Exception("Cannot cancel. Either no query sent or already cancelled.", ErrorCodes::LOGICAL_ERROR); + cancelled = true; + for (auto & offset_status : offset_states) for (auto & replica : offset_status.replicas) if (replica.connection) replica.connection->sendCancel(); - - cancelled = true; } Packet HedgedConnections::drain() diff --git a/src/Client/LocalConnection.cpp b/src/Client/LocalConnection.cpp index 0e1dc95d0c5..4f476b57c27 100644 --- a/src/Client/LocalConnection.cpp +++ b/src/Client/LocalConnection.cpp @@ -70,7 +70,10 @@ void LocalConnection::sendQuery( query_context = session.makeQueryContext(); query_context->setCurrentQueryId(query_id); if (send_progress) + { query_context->setProgressCallback([this] (const Progress & value) { return this->updateProgress(value); }); + query_context->setFileProgressCallback([this](const FileProgress & value) { this->updateProgress(Progress(value)); }); + } CurrentThread::QueryScope query_scope_holder(query_context); @@ -285,13 +288,6 @@ bool LocalConnection::poll(size_t) return true; } - if (send_progress && !state->sent_progress) - { - state->sent_progress = true; - next_packet_type = Protocol::Server::Progress; - return true; - } - if (state->block && state->block.value()) { next_packet_type = Protocol::Server::Data; diff --git a/src/Columns/Collator.cpp b/src/Columns/Collator.cpp index d33f65e3836..312216054f5 100644 --- a/src/Columns/Collator.cpp +++ b/src/Columns/Collator.cpp @@ -1,8 +1,6 @@ #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_ICU # include diff --git a/src/Columns/ColumnDecimal.cpp b/src/Columns/ColumnDecimal.cpp index d8c5ced4b6b..48f890edaaf 100644 --- a/src/Columns/ColumnDecimal.cpp +++ b/src/Columns/ColumnDecimal.cpp @@ -237,6 +237,40 @@ ColumnPtr ColumnDecimal::filter(const IColumn::Filter & filt, ssize_t result_ const UInt8 * filt_end = filt_pos + size; const T * data_pos = data.data(); + /** A slightly more optimized version. + * Based on the assumption that often pieces of consecutive values + * completely pass or do not pass the filter. + * Therefore, we will optimistically check the parts of `SIMD_BYTES` values. + */ + static constexpr size_t SIMD_BYTES = 64; + const UInt8 * filt_end_aligned = filt_pos + size / SIMD_BYTES * SIMD_BYTES; + + while (filt_pos < filt_end_aligned) + { + UInt64 mask = Bytes64MaskToBits64Mask(filt_pos); + + if (0xffffffffffffffff == mask) + { + res_data.insert(data_pos, data_pos + SIMD_BYTES); + } + else + { + while (mask) + { + size_t index = __builtin_ctzll(mask); + res_data.push_back(data_pos[index]); + #ifdef __BMI__ + mask = _blsr_u64(mask); + #else + mask = mask & (mask-1); + #endif + } + } + + filt_pos += SIMD_BYTES; + data_pos += SIMD_BYTES; + } + while (filt_pos < filt_end) { if (*filt_pos) diff --git a/src/Columns/ColumnFixedString.cpp b/src/Columns/ColumnFixedString.cpp index 94127fa8eb3..cc4e7b12a04 100644 --- a/src/Columns/ColumnFixedString.cpp +++ b/src/Columns/ColumnFixedString.cpp @@ -231,24 +231,20 @@ ColumnPtr ColumnFixedString::filter(const IColumn::Filter & filt, ssize_t result const UInt8 * filt_end = filt_pos + col_size; const UInt8 * data_pos = chars.data(); -#ifdef __SSE2__ /** A slightly more optimized version. * Based on the assumption that often pieces of consecutive values * completely pass or do not pass the filter. * Therefore, we will optimistically check the parts of `SIMD_BYTES` values. */ - - static constexpr size_t SIMD_BYTES = 16; - const __m128i zero16 = _mm_setzero_si128(); - const UInt8 * filt_end_sse = filt_pos + col_size / SIMD_BYTES * SIMD_BYTES; + static constexpr size_t SIMD_BYTES = 64; + const UInt8 * filt_end_aligned = filt_pos + col_size / SIMD_BYTES * SIMD_BYTES; const size_t chars_per_simd_elements = SIMD_BYTES * n; - while (filt_pos < filt_end_sse) + while (filt_pos < filt_end_aligned) { - UInt16 mask = _mm_movemask_epi8(_mm_cmpeq_epi8(_mm_loadu_si128(reinterpret_cast(filt_pos)), zero16)); - mask = ~mask; + uint64_t mask = Bytes64MaskToBits64Mask(filt_pos); - if (0xFFFF == mask) + if (0xffffffffffffffff == mask) { res->chars.insert(data_pos, data_pos + chars_per_simd_elements); } @@ -257,17 +253,20 @@ ColumnPtr ColumnFixedString::filter(const IColumn::Filter & filt, ssize_t result size_t res_chars_size = res->chars.size(); while (mask) { - size_t index = __builtin_ctz(mask); + size_t index = __builtin_ctzll(mask); res->chars.resize(res_chars_size + n); memcpySmallAllowReadWriteOverflow15(&res->chars[res_chars_size], data_pos + index * n, n); res_chars_size += n; - mask = mask & (mask - 1); + #ifdef __BMI__ + mask = _blsr_u64(mask); + #else + mask = mask & (mask-1); + #endif } } data_pos += chars_per_simd_elements; filt_pos += SIMD_BYTES; } -#endif size_t res_chars_size = res->chars.size(); while (filt_pos < filt_end) diff --git a/src/Columns/ColumnVector.cpp b/src/Columns/ColumnVector.cpp index 3ee692a3ff4..b9079857aa4 100644 --- a/src/Columns/ColumnVector.cpp +++ b/src/Columns/ColumnVector.cpp @@ -311,23 +311,19 @@ ColumnPtr ColumnVector::filter(const IColumn::Filter & filt, ssize_t result_s const UInt8 * filt_end = filt_pos + size; const T * data_pos = data.data(); -#ifdef __SSE2__ /** A slightly more optimized version. * Based on the assumption that often pieces of consecutive values * completely pass or do not pass the filter. * Therefore, we will optimistically check the parts of `SIMD_BYTES` values. */ + static constexpr size_t SIMD_BYTES = 64; + const UInt8 * filt_end_aligned = filt_pos + size / SIMD_BYTES * SIMD_BYTES; - static constexpr size_t SIMD_BYTES = 16; - const __m128i zero16 = _mm_setzero_si128(); - const UInt8 * filt_end_sse = filt_pos + size / SIMD_BYTES * SIMD_BYTES; - - while (filt_pos < filt_end_sse) + while (filt_pos < filt_end_aligned) { - UInt16 mask = _mm_movemask_epi8(_mm_cmpeq_epi8(_mm_loadu_si128(reinterpret_cast(filt_pos)), zero16)); - mask = ~mask; + UInt64 mask = Bytes64MaskToBits64Mask(filt_pos); - if (0xFFFF == mask) + if (0xffffffffffffffff == mask) { res_data.insert(data_pos, data_pos + SIMD_BYTES); } @@ -335,16 +331,19 @@ ColumnPtr ColumnVector::filter(const IColumn::Filter & filt, ssize_t result_s { while (mask) { - size_t index = __builtin_ctz(mask); + size_t index = __builtin_ctzll(mask); res_data.push_back(data_pos[index]); - mask = mask & (mask - 1); + #ifdef __BMI__ + mask = _blsr_u64(mask); + #else + mask = mask & (mask-1); + #endif } } filt_pos += SIMD_BYTES; data_pos += SIMD_BYTES; } -#endif while (filt_pos < filt_end) { diff --git a/src/Columns/ColumnsCommon.cpp b/src/Columns/ColumnsCommon.cpp index a4d7de34382..6d16790e2f8 100644 --- a/src/Columns/ColumnsCommon.cpp +++ b/src/Columns/ColumnsCommon.cpp @@ -1,7 +1,3 @@ -#ifdef __SSE2__ - #include -#endif - #include #include #include @@ -229,19 +225,19 @@ namespace memcpy(&res_elems[elems_size_old], &src_elems[arr_offset], arr_size * sizeof(T)); }; - #ifdef __SSE2__ - const __m128i zero_vec = _mm_setzero_si128(); - static constexpr size_t SIMD_BYTES = 16; + /** A slightly more optimized version. + * Based on the assumption that often pieces of consecutive values + * completely pass or do not pass the filter. + * Therefore, we will optimistically check the parts of `SIMD_BYTES` values. + */ + static constexpr size_t SIMD_BYTES = 64; const auto * filt_end_aligned = filt_pos + size / SIMD_BYTES * SIMD_BYTES; while (filt_pos < filt_end_aligned) { - UInt16 mask = _mm_movemask_epi8(_mm_cmpeq_epi8( - _mm_loadu_si128(reinterpret_cast(filt_pos)), - zero_vec)); - mask = ~mask; + uint64_t mask = Bytes64MaskToBits64Mask(filt_pos); - if (mask == 0xffff) + if (0xffffffffffffffff == mask) { /// SIMD_BYTES consecutive rows pass the filter const auto first = offsets_pos == offsets_begin; @@ -260,16 +256,19 @@ namespace { while (mask) { - size_t index = __builtin_ctz(mask); + size_t index = __builtin_ctzll(mask); copy_array(offsets_pos + index); - mask = mask & (mask - 1); + #ifdef __BMI__ + mask = _blsr_u64(mask); + #else + mask = mask & (mask-1); + #endif } } filt_pos += SIMD_BYTES; offsets_pos += SIMD_BYTES; } - #endif while (filt_pos < filt_end) { diff --git a/src/Columns/ColumnsCommon.h b/src/Columns/ColumnsCommon.h index 25f87e90bba..b84b1de7d67 100644 --- a/src/Columns/ColumnsCommon.h +++ b/src/Columns/ColumnsCommon.h @@ -2,7 +2,12 @@ #include #include - +#ifdef __SSE2__ +#include +#endif +#if defined(__AVX512F__) || defined(__AVX512BW__) || defined(__AVX__) || defined(__AVX2__) +#include +#endif /// Common helper methods for implementation of different columns. @@ -15,6 +20,40 @@ namespace ErrorCodes extern const int LOGICAL_ERROR; } +/// Transform 64-byte mask to 64-bit mask +inline UInt64 Bytes64MaskToBits64Mask(const UInt8 * bytes64) +{ +#if defined(__AVX512F__) && defined(__AVX512BW__) + static const __m512i zero64 = _mm512_setzero_epi32(); + UInt64 res = _mm512_cmp_epi8_mask(_mm512_loadu_si512(reinterpret_cast(bytes64)), zero64, _MM_CMPINT_EQ); +#elif defined(__AVX__) && defined(__AVX2__) + static const __m256i zero32 = _mm256_setzero_si256(); + UInt64 res = + (static_cast(_mm256_movemask_epi8(_mm256_cmpeq_epi8( + _mm256_loadu_si256(reinterpret_cast(bytes64)), zero32))) & 0xffffffff) + | (static_cast(_mm256_movemask_epi8(_mm256_cmpeq_epi8( + _mm256_loadu_si256(reinterpret_cast(bytes64+32)), zero32))) << 32); +#elif defined(__SSE2__) && defined(__POPCNT__) + static const __m128i zero16 = _mm_setzero_si128(); + UInt64 res = + (static_cast(_mm_movemask_epi8(_mm_cmpeq_epi8( + _mm_loadu_si128(reinterpret_cast(bytes64)), zero16))) & 0xffff) + | ((static_cast(_mm_movemask_epi8(_mm_cmpeq_epi8( + _mm_loadu_si128(reinterpret_cast(bytes64 + 16)), zero16))) << 16) & 0xffff0000) + | ((static_cast(_mm_movemask_epi8(_mm_cmpeq_epi8( + _mm_loadu_si128(reinterpret_cast(bytes64 + 32)), zero16))) << 32) & 0xffff00000000) + | ((static_cast(_mm_movemask_epi8(_mm_cmpeq_epi8( + _mm_loadu_si128(reinterpret_cast(bytes64 + 48)), zero16))) << 48) & 0xffff000000000000); +#else + UInt64 res = 0; + const UInt8 * pos = bytes64; + const UInt8 * end = pos + 64; + for (; pos < end; ++pos) + res |= ((*pos == 0)<<(pos-bytes64)); +#endif + return ~res; +} + /// Counts how many bytes of `filt` are greater than zero. size_t countBytesInFilter(const UInt8 * filt, size_t sz); size_t countBytesInFilter(const IColumn::Filter & filt); diff --git a/src/Common/ClickHouseRevision.cpp b/src/Common/ClickHouseRevision.cpp index 2c52ebb064a..c7c27436466 100644 --- a/src/Common/ClickHouseRevision.cpp +++ b/src/Common/ClickHouseRevision.cpp @@ -1,8 +1,5 @@ #include - -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace ClickHouseRevision { diff --git a/src/Common/CompactArray.h b/src/Common/CompactArray.h index 7291fe3f18d..89e2b43a943 100644 --- a/src/Common/CompactArray.h +++ b/src/Common/CompactArray.h @@ -55,28 +55,6 @@ public: return locus; } - /// Used only in arcadia/metrika - void readText(ReadBuffer & in) - { - for (size_t i = 0; i < BITSET_SIZE; ++i) - { - if (i != 0) - assertChar(',', in); - readIntText(bitset[i], in); - } - } - - /// Used only in arcadia/metrika - void writeText(WriteBuffer & out) const - { - for (size_t i = 0; i < BITSET_SIZE; ++i) - { - if (i != 0) - writeCString(",", out); - writeIntText(bitset[i], out); - } - } - private: /// number of bytes in bitset static constexpr size_t BITSET_SIZE = (static_cast(bucket_count) * content_width + 7) / 8; diff --git a/src/Common/Config/ConfigProcessor.cpp b/src/Common/Config/ConfigProcessor.cpp index 09397e31787..da7405b993f 100644 --- a/src/Common/Config/ConfigProcessor.cpp +++ b/src/Common/Config/ConfigProcessor.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) - #include -#endif +#include #include "ConfigProcessor.h" #include "YAMLParser.h" diff --git a/src/Common/Config/ConfigProcessor.h b/src/Common/Config/ConfigProcessor.h index caffad5faca..2a92a709934 100644 --- a/src/Common/Config/ConfigProcessor.h +++ b/src/Common/Config/ConfigProcessor.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) - #include -#endif +#include #include #include diff --git a/src/Common/Config/YAMLParser.cpp b/src/Common/Config/YAMLParser.cpp index 9f52d9cf36c..1d6d7166669 100644 --- a/src/Common/Config/YAMLParser.cpp +++ b/src/Common/Config/YAMLParser.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) - #include -#endif +#include #if USE_YAML_CPP #include "YAMLParser.h" @@ -19,7 +17,7 @@ #include #include -#include // Y_IGNORE +#include #include diff --git a/src/Common/Config/YAMLParser.h b/src/Common/Config/YAMLParser.h index b983e85a4fe..b181669f45f 100644 --- a/src/Common/Config/YAMLParser.h +++ b/src/Common/Config/YAMLParser.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) - #include -#endif +#include #include diff --git a/src/Common/DNSResolver.cpp b/src/Common/DNSResolver.cpp index d69291b79c0..79ab7f82fe0 100644 --- a/src/Common/DNSResolver.cpp +++ b/src/Common/DNSResolver.cpp @@ -114,11 +114,7 @@ static DNSResolver::IPAddresses resolveIPAddressImpl(const std::string & host) try { -#if defined(ARCADIA_BUILD) - addresses = Poco::Net::DNS::hostByName(host, &Poco::Net::DNS::DEFAULT_DNS_TIMEOUT, flags).addresses(); -#else addresses = Poco::Net::DNS::hostByName(host, flags).addresses(); -#endif } catch (const Poco::Net::DNSException & e) { diff --git a/src/Common/ErrorCodes.cpp b/src/Common/ErrorCodes.cpp index 1aff1460125..ec2bd025627 100644 --- a/src/Common/ErrorCodes.cpp +++ b/src/Common/ErrorCodes.cpp @@ -577,7 +577,7 @@ M(607, BACKUP_ELEMENT_DUPLICATE) \ M(608, CANNOT_RESTORE_TABLE) \ M(609, FUNCTION_ALREADY_EXISTS) \ - M(610, CANNOT_DROP_SYSTEM_FUNCTION) \ + M(610, CANNOT_DROP_FUNCTION) \ M(611, CANNOT_CREATE_RECURSIVE_FUNCTION) \ M(612, OBJECT_ALREADY_STORED_ON_DISK) \ M(613, OBJECT_WAS_NOT_STORED_ON_DISK) \ @@ -591,6 +591,9 @@ M(621, CANNOT_NORMALIZE_STRING) \ M(622, CANNOT_PARSE_CAPN_PROTO_SCHEMA) \ M(623, CAPN_PROTO_BAD_CAST) \ + M(624, BAD_FILE_TYPE) \ + M(625, IO_SETUP_ERROR) \ + M(626, CANNOT_SKIP_UNKNOWN_FIELD) \ \ M(999, KEEPER_EXCEPTION) \ M(1000, POCO_EXCEPTION) \ diff --git a/src/Common/Exception.cpp b/src/Common/Exception.cpp index d506d48c25d..fc6a18fd3b9 100644 --- a/src/Common/Exception.cpp +++ b/src/Common/Exception.cpp @@ -17,9 +17,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace fs = std::filesystem; diff --git a/src/Common/FileChecker.cpp b/src/Common/FileChecker.cpp index 14705a9b0b0..4de5a92a1b8 100644 --- a/src/Common/FileChecker.cpp +++ b/src/Common/FileChecker.cpp @@ -15,6 +15,7 @@ namespace DB namespace ErrorCodes { extern const int UNEXPECTED_END_OF_FILE; + extern const int LOGICAL_ERROR; } @@ -37,9 +38,16 @@ void FileChecker::setPath(const String & file_info_path_) files_info_path = file_info_path_; } +String FileChecker::getPath() const +{ + return files_info_path; +} + void FileChecker::update(const String & full_file_path) { - map[fileName(full_file_path)] = disk->getFileSize(full_file_path); + bool exists = disk->exists(full_file_path); + auto real_size = exists ? disk->getFileSize(full_file_path) : 0; /// No race condition assuming no one else is working with these files. + map[fileName(full_file_path)] = real_size; } void FileChecker::setEmpty(const String & full_file_path) @@ -47,9 +55,12 @@ void FileChecker::setEmpty(const String & full_file_path) map[fileName(full_file_path)] = 0; } -FileChecker::Map FileChecker::getFileSizes() const +size_t FileChecker::getFileSize(const String & full_file_path) const { - return map; + auto it = map.find(fileName(full_file_path)); + if (it == map.end()) + throw Exception(ErrorCodes::LOGICAL_ERROR, "File {} is not added to the file checker", full_file_path); + return it->second; } CheckResults FileChecker::check() const @@ -63,18 +74,18 @@ CheckResults FileChecker::check() const { const String & name = name_size.first; String path = parentPath(files_info_path) + name; - if (!disk->exists(path)) + bool exists = disk->exists(path); + auto real_size = exists ? disk->getFileSize(path) : 0; /// No race condition assuming no one else is working with these files. + + if (real_size != name_size.second) { - results.emplace_back(name, false, "File " + path + " doesn't exist"); + String failure_message = exists + ? ("Size of " + path + " is wrong. Size is " + toString(real_size) + " but should be " + toString(name_size.second)) + : ("File " + path + " doesn't exist"); + results.emplace_back(name, false, failure_message); break; } - auto real_size = disk->getFileSize(path); - if (real_size != name_size.second) - { - results.emplace_back(name, false, "Size of " + path + " is wrong. Size is " + toString(real_size) + " but should be " + toString(name_size.second)); - break; - } results.emplace_back(name, true, ""); } @@ -97,7 +108,7 @@ void FileChecker::repair() if (real_size > expected_size) { - LOG_WARNING(&Poco::Logger::get("FileChecker"), "Will truncate file {} that has size {} to size {}", path, real_size, expected_size); + LOG_WARNING(log, "Will truncate file {} that has size {} to size {}", path, real_size, expected_size); disk->truncateFile(path, expected_size); } } diff --git a/src/Common/FileChecker.h b/src/Common/FileChecker.h index 688c2b78486..a0ea449393e 100644 --- a/src/Common/FileChecker.h +++ b/src/Common/FileChecker.h @@ -8,12 +8,14 @@ namespace DB { -/// stores the sizes of all columns, and can check whether the columns are corrupted +/// Stores the sizes of all columns, and can check whether the columns are corrupted. class FileChecker { public: FileChecker(DiskPtr disk_, const String & file_info_path_); + void setPath(const String & file_info_path_); + String getPath() const; void update(const String & full_file_path); void setEmpty(const String & full_file_path); @@ -28,20 +30,17 @@ public: /// The purpose of this function is to rollback a group of unfinished writes. void repair(); - /// File name -> size. - using Map = std::map; - - Map getFileSizes() const; + /// Returns stored file size. + size_t getFileSize(const String & full_file_path) const; private: void load(); - DiskPtr disk; + const DiskPtr disk; + const Poco::Logger * log = &Poco::Logger::get("FileChecker"); + String files_info_path; - - Map map; - - Poco::Logger * log = &Poco::Logger::get("FileChecker"); + std::map map; }; } diff --git a/src/Common/LRUCache.h b/src/Common/LRUCache.h index 93abfce3c4e..bbc09fd3aff 100644 --- a/src/Common/LRUCache.h +++ b/src/Common/LRUCache.h @@ -36,12 +36,13 @@ public: using Mapped = TMapped; using MappedPtr = std::shared_ptr; -private: - using Clock = std::chrono::steady_clock; - -public: - LRUCache(size_t max_size_) - : max_size(std::max(static_cast(1), max_size_)) {} + /** Initialize LRUCache with max_size and max_elements_size. + * max_elements_size == 0 means no elements size restrictions. + */ + LRUCache(size_t max_size_, size_t max_elements_size_ = 0) + : max_size(std::max(static_cast(1), max_size_)) + , max_elements_size(max_elements_size_) + {} MappedPtr get(const Key & key) { @@ -252,6 +253,7 @@ private: /// Total weight of values. size_t current_size = 0; const size_t max_size; + const size_t max_elements_size; std::atomic hits {0}; std::atomic misses {0}; @@ -311,7 +313,8 @@ private: { size_t current_weight_lost = 0; size_t queue_size = cells.size(); - while ((current_size > max_size) && (queue_size > 1)) + + while ((current_size > max_size || (max_elements_size != 0 && queue_size > max_elements_size)) && (queue_size > 1)) { const Key & key = queue.front(); diff --git a/src/Common/OpenSSLHelpers.cpp b/src/Common/OpenSSLHelpers.cpp index d7e73b75f56..d73e08e79a9 100644 --- a/src/Common/OpenSSLHelpers.cpp +++ b/src/Common/OpenSSLHelpers.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL #include "OpenSSLHelpers.h" diff --git a/src/Common/OpenSSLHelpers.h b/src/Common/OpenSSLHelpers.h index e5cfcef9afe..f0dbbc10b4c 100644 --- a/src/Common/OpenSSLHelpers.h +++ b/src/Common/OpenSSLHelpers.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL # include diff --git a/src/Common/OptimizedRegularExpression.h b/src/Common/OptimizedRegularExpression.h index fddefe596c4..f7223c2efa9 100644 --- a/src/Common/OptimizedRegularExpression.h +++ b/src/Common/OptimizedRegularExpression.h @@ -7,9 +7,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_RE2_ST # include diff --git a/src/Common/ProfileEvents.cpp b/src/Common/ProfileEvents.cpp index 941a3ab0896..ee44b9eb927 100644 --- a/src/Common/ProfileEvents.cpp +++ b/src/Common/ProfileEvents.cpp @@ -227,7 +227,8 @@ M(CreatedHTTPConnections, "Total amount of created HTTP connections (counter increase every time connection is created).") \ \ M(CannotWriteToWriteBufferDiscard, "Number of stack traces dropped by query profiler or signal handler because pipe is full or cannot write to pipe.") \ - M(QueryProfilerSignalOverruns, "Number of times we drop processing of a signal due to overrun plus the number of signals that OS has not delivered due to overrun.") \ + M(QueryProfilerSignalOverruns, "Number of times we drop processing of a query profiler signal due to overrun plus the number of signals that OS has not delivered due to overrun.") \ + M(QueryProfilerRuns, "Number of times QueryProfiler had been run.") \ \ M(CreatedLogEntryForMerge, "Successfully created log entry to merge parts in ReplicatedMergeTree.") \ M(NotCreatedLogEntryForMerge, "Log entry to merge parts in ReplicatedMergeTree is not created due to concurrent log update by another replica.") \ @@ -249,6 +250,17 @@ M(S3WriteRequestsRedirects, "Number of redirects in POST, DELETE, PUT and PATCH requests to S3 storage.") \ M(QueryMemoryLimitExceeded, "Number of times when memory limit exceeded for query.") \ \ + M(RemoteFSReadMicroseconds, "Time of reading from remote filesystem.") \ + M(RemoteFSReadBytes, "Read bytes from remote filesystem.") \ + \ + M(RemoteFSSeeks, "Total number of seeks for async buffer") \ + M(RemoteFSPrefetches, "Number of prefetches made with asynchronous reading from remote filesystem") \ + M(RemoteFSCancelledPrefetches, "Number of cancelled prefecthes (because of seek)") \ + M(RemoteFSUnusedPrefetches, "Number of prefetches pending at buffer destruction") \ + M(RemoteFSPrefetchedReads, "Number of reads from prefecthed buffer") \ + M(RemoteFSUnprefetchedReads, "Number of reads from unprefetched buffer") \ + M(RemoteFSBuffers, "Number of buffers created for asynchronous reading from remote filesystem") \ + \ M(SleepFunctionCalls, "Number of times a sleep function (sleep, sleepEachRow) has been called.") \ M(SleepFunctionMicroseconds, "Time spent sleeping due to a sleep function call.") \ \ diff --git a/src/Common/ProgressIndication.cpp b/src/Common/ProgressIndication.cpp index bf3397f50e1..26dae8d5b73 100644 --- a/src/Common/ProgressIndication.cpp +++ b/src/Common/ProgressIndication.cpp @@ -14,17 +14,19 @@ namespace { - constexpr UInt64 ZERO = 0; + constexpr UInt64 ALL_THREADS = 0; UInt64 calculateNewCoresNumber(DB::ThreadIdToTimeMap const & prev, DB::ThreadIdToTimeMap const& next) { - if (next.find(ZERO) == next.end()) - return ZERO; - auto accumulated = std::accumulate(next.cbegin(), next.cend(), ZERO, - [&prev](UInt64 acc, auto const & elem) + if (next.find(ALL_THREADS) == next.end()) + return 0; + + auto accumulated = std::accumulate(next.cbegin(), next.cend(), 0, + [&prev](UInt64 acc, const auto & elem) { - if (elem.first == ZERO) + if (elem.first == ALL_THREADS) return acc; + auto thread_time = elem.second.time(); auto it = prev.find(elem.first); if (it != prev.end()) @@ -32,9 +34,9 @@ namespace return acc + thread_time; }); - auto elapsed = next.at(ZERO).time() - (prev.contains(ZERO) ? prev.at(ZERO).time() : ZERO); - if (elapsed == ZERO) - return ZERO; + auto elapsed = next.at(ALL_THREADS).time() - (prev.contains(ALL_THREADS) ? prev.at(ALL_THREADS).time() : 0); + if (elapsed == 0) + return 0; return (accumulated + elapsed - 1) / elapsed; } } @@ -109,7 +111,7 @@ size_t ProgressIndication::getUsedThreadsCount() const UInt64 ProgressIndication::getApproximateCoresNumber() const { - return std::accumulate(host_active_cores.cbegin(), host_active_cores.cend(), ZERO, + return std::accumulate(host_active_cores.cbegin(), host_active_cores.cend(), 0, [](UInt64 acc, auto const & elem) { return acc + elem.second; @@ -121,11 +123,12 @@ ProgressIndication::MemoryUsage ProgressIndication::getMemoryUsage() const return std::accumulate(thread_data.cbegin(), thread_data.cend(), MemoryUsage{}, [](MemoryUsage const & acc, auto const & host_data) { - auto host_usage = std::accumulate(host_data.second.cbegin(), host_data.second.cend(), ZERO, - [](UInt64 memory, auto const & data) - { - return memory + data.second.memory_usage; - }); + UInt64 host_usage = 0; + // In ProfileEvents packets thread id 0 specifies common profiling information + // for all threads executing current query on specific host. So instead of summing per thread + // memory consumption it's enough to look for data with thread id 0. + if (auto it = host_data.second.find(ALL_THREADS); it != host_data.second.end()) + host_usage = it->second.memory_usage; return MemoryUsage{.total = acc.total + host_usage, .max = std::max(acc.max, host_usage)}; }); } diff --git a/src/Common/QueryProfiler.cpp b/src/Common/QueryProfiler.cpp index aa40226093a..77b8d0dda5e 100644 --- a/src/Common/QueryProfiler.cpp +++ b/src/Common/QueryProfiler.cpp @@ -15,6 +15,7 @@ namespace ProfileEvents { extern const Event QueryProfilerSignalOverruns; + extern const Event QueryProfilerRuns; } namespace DB @@ -60,6 +61,7 @@ namespace const StackTrace stack_trace(signal_context); TraceCollector::collect(trace_type, stack_trace, 0); + ProfileEvents::increment(ProfileEvents::QueryProfilerRuns); errno = saved_errno; } diff --git a/src/Common/QueryProfiler.h b/src/Common/QueryProfiler.h index 6ef55ce871a..4014a93996f 100644 --- a/src/Common/QueryProfiler.h +++ b/src/Common/QueryProfiler.h @@ -4,9 +4,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace Poco diff --git a/src/Common/RemoteHostFilter.cpp b/src/Common/RemoteHostFilter.cpp index 73c84364f3c..ba7f163fd16 100644 --- a/src/Common/RemoteHostFilter.cpp +++ b/src/Common/RemoteHostFilter.cpp @@ -18,14 +18,14 @@ void RemoteHostFilter::checkURL(const Poco::URI & uri) const { if (!checkForDirectEntry(uri.getHost()) && !checkForDirectEntry(uri.getHost() + ":" + toString(uri.getPort()))) - throw Exception("URL \"" + uri.toString() + "\" is not allowed in config.xml", ErrorCodes::UNACCEPTABLE_URL); + throw Exception("URL \"" + uri.toString() + "\" is not allowed in configuration file, see ", ErrorCodes::UNACCEPTABLE_URL); } void RemoteHostFilter::checkHostAndPort(const std::string & host, const std::string & port) const { if (!checkForDirectEntry(host) && !checkForDirectEntry(host + ":" + port)) - throw Exception("URL \"" + host + ":" + port + "\" is not allowed in config.xml", ErrorCodes::UNACCEPTABLE_URL); + throw Exception("URL \"" + host + ":" + port + "\" is not allowed in configuration file, see ", ErrorCodes::UNACCEPTABLE_URL); } void RemoteHostFilter::setValuesFromConfig(const Poco::Util::AbstractConfiguration & config) diff --git a/src/Common/SparseHashMap.h b/src/Common/SparseHashMap.h index 0f86cc13612..3f38d52a2b8 100644 --- a/src/Common/SparseHashMap.h +++ b/src/Common/SparseHashMap.h @@ -1,24 +1,10 @@ #pragma once /// SparseHashMap is a wrapper for google::sparse_hash_map. -#if defined(ARCADIA_BUILD) -#define HASH_FUN_H -template -struct THash; -#endif #include -#if !defined(ARCADIA_BUILD) - template , - class EqualKey = std::equal_to, - class Alloc = google::libc_allocator_with_realloc>> - using SparseHashMap = google::sparse_hash_map; -#else - template , - class EqualKey = std::equal_to, - class Alloc = google::sparsehash::libc_allocator_with_realloc>> - using SparseHashMap = google::sparsehash::sparse_hash_map; - - #undef THash -#endif +template , + class EqualKey = std::equal_to, + class Alloc = google::libc_allocator_with_realloc>> +using SparseHashMap = google::sparse_hash_map; diff --git a/src/Common/StackTrace.cpp b/src/Common/StackTrace.cpp index fc995e435ec..6c52d31c9a1 100644 --- a/src/Common/StackTrace.cpp +++ b/src/Common/StackTrace.cpp @@ -13,9 +13,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_UNWIND # include @@ -201,7 +199,7 @@ void StackTrace::symbolize( const StackTrace::FramePointers & frame_pointers, [[maybe_unused]] size_t offset, size_t size, StackTrace::Frames & frames) { -#if defined(__ELF__) && !defined(__FreeBSD__) && !defined(ARCADIA_BUILD) +#if defined(__ELF__) && !defined(__FreeBSD__) auto symbol_index_ptr = DB::SymbolIndex::instance(); const DB::SymbolIndex & symbol_index = *symbol_index_ptr; diff --git a/src/Common/StringSearcher.h b/src/Common/StringSearcher.h index af1d36adf81..f34bc6f7322 100644 --- a/src/Common/StringSearcher.h +++ b/src/Common/StringSearcher.h @@ -116,9 +116,9 @@ public: /// lower and uppercase variants of the first octet of the first character in `needle` size_t length_l = UTF8::convertCodePointToUTF8(first_l_u32, l_seq, sizeof(l_seq)); - size_t length_r = UTF8::convertCodePointToUTF8(first_u_u32, u_seq, sizeof(u_seq)); + size_t length_u = UTF8::convertCodePointToUTF8(first_u_u32, u_seq, sizeof(u_seq)); - if (length_l != length_r) + if (length_l != length_u) throw Exception{"UTF8 sequences with different lowercase and uppercase lengths are not supported", ErrorCodes::UNSUPPORTED_PARAMETER}; } @@ -183,6 +183,31 @@ public: #endif } + template > + ALWAYS_INLINE bool compareTrivial(const CharT * haystack_pos, const CharT * const haystack_end, const uint8_t * needle_pos) const + { + while (haystack_pos < haystack_end && needle_pos < needle_end) + { + auto haystack_code_point = UTF8::convertUTF8ToCodePoint(haystack_pos, haystack_end - haystack_pos); + auto needle_code_point = UTF8::convertUTF8ToCodePoint(needle_pos, needle_end - needle_pos); + + /// Invalid UTF-8, should not compare equals + if (!haystack_code_point || !needle_code_point) + break; + + /// Not equals case insensitive. + if (Poco::Unicode::toLower(*haystack_code_point) != Poco::Unicode::toLower(*needle_code_point)) + break; + + /// @note assuming sequences for lowercase and uppercase have exact same length (that is not always true) + const auto len = UTF8::seqLength(*haystack_pos); + haystack_pos += len; + needle_pos += len; + } + + return needle_pos == needle_end; + } + template > ALWAYS_INLINE bool compare(const CharT * /*haystack*/, const CharT * haystack_end, const CharT * pos) const { @@ -200,34 +225,15 @@ public: { if (mask == cachemask) { - pos += cache_valid_len; - auto needle_pos = needle + cache_valid_len; - - while (needle_pos < needle_end) - { - auto haystack_code_point = UTF8::convertUTF8ToCodePoint(pos, haystack_end - pos); - auto needle_code_point = UTF8::convertUTF8ToCodePoint(needle_pos, needle_end - needle_pos); - - /// Invalid UTF-8, should not compare equals - if (!haystack_code_point || !needle_code_point) - break; - - /// Not equals case insensitive. - if (Poco::Unicode::toLower(*haystack_code_point) != Poco::Unicode::toLower(*needle_code_point)) - break; - - /// @note assuming sequences for lowercase and uppercase have exact same length (that is not always true) - const auto len = UTF8::seqLength(*pos); - pos += len; - needle_pos += len; - } - - if (needle_pos == needle_end) + if (compareTrivial(pos, haystack_end, needle)) return true; } } else if ((mask & cachemask) == cachemask) - return true; + { + if (compareTrivial(pos, haystack_end, needle)) + return true; + } return false; } @@ -238,25 +244,7 @@ public: pos += first_needle_symbol_is_ascii; auto needle_pos = needle + first_needle_symbol_is_ascii; - while (needle_pos < needle_end) - { - auto haystack_code_point = UTF8::convertUTF8ToCodePoint(pos, haystack_end - pos); - auto needle_code_point = UTF8::convertUTF8ToCodePoint(needle_pos, needle_end - needle_pos); - - /// Invalid UTF-8, should not compare equals - if (!haystack_code_point || !needle_code_point) - break; - - /// Not equals case insensitive. - if (Poco::Unicode::toLower(*haystack_code_point) != Poco::Unicode::toLower(*needle_code_point)) - break; - - const auto len = UTF8::seqLength(*pos); - pos += len; - needle_pos += len; - } - - if (needle_pos == needle_end) + if (compareTrivial(pos, haystack_end, needle_pos)) return true; } @@ -299,40 +287,21 @@ public: const auto v_against_l_offset = _mm_cmpeq_epi8(v_haystack_offset, cachel); const auto v_against_u_offset = _mm_cmpeq_epi8(v_haystack_offset, cacheu); const auto v_against_l_or_u_offset = _mm_or_si128(v_against_l_offset, v_against_u_offset); - const auto mask_offset = _mm_movemask_epi8(v_against_l_or_u_offset); + const auto mask_offset_both = _mm_movemask_epi8(v_against_l_or_u_offset); if (0xffff == cachemask) { - if (mask_offset == cachemask) + if (mask_offset_both == cachemask) { - auto haystack_pos = haystack + cache_valid_len; - auto needle_pos = needle + cache_valid_len; - - while (haystack_pos < haystack_end && needle_pos < needle_end) - { - auto haystack_code_point = UTF8::convertUTF8ToCodePoint(haystack_pos, haystack_end - haystack_pos); - auto needle_code_point = UTF8::convertUTF8ToCodePoint(needle_pos, needle_end - needle_pos); - - /// Invalid UTF-8, should not compare equals - if (!haystack_code_point || !needle_code_point) - break; - - /// Not equals case insensitive. - if (Poco::Unicode::toLower(*haystack_code_point) != Poco::Unicode::toLower(*needle_code_point)) - break; - - /// @note assuming sequences for lowercase and uppercase have exact same length (that is not always true) - const auto len = UTF8::seqLength(*haystack_pos); - haystack_pos += len; - needle_pos += len; - } - - if (needle_pos == needle_end) + if (compareTrivial(haystack, haystack_end, needle)) return haystack; } } - else if ((mask_offset & cachemask) == cachemask) - return haystack; + else if ((mask_offset_both & cachemask) == cachemask) + { + if (compareTrivial(haystack, haystack_end, needle)) + return haystack; + } /// first octet was ok, but not the first 16, move to start of next sequence and reapply haystack += UTF8::seqLength(*haystack); @@ -349,25 +318,7 @@ public: auto haystack_pos = haystack + first_needle_symbol_is_ascii; auto needle_pos = needle + first_needle_symbol_is_ascii; - while (haystack_pos < haystack_end && needle_pos < needle_end) - { - auto haystack_code_point = UTF8::convertUTF8ToCodePoint(haystack_pos, haystack_end - haystack_pos); - auto needle_code_point = UTF8::convertUTF8ToCodePoint(needle_pos, needle_end - needle_pos); - - /// Invalid UTF-8, should not compare equals - if (!haystack_code_point || !needle_code_point) - break; - - /// Not equals case insensitive. - if (Poco::Unicode::toLower(*haystack_code_point) != Poco::Unicode::toLower(*needle_code_point)) - break; - - const auto len = UTF8::seqLength(*haystack_pos); - haystack_pos += len; - needle_pos += len; - } - - if (needle_pos == needle_end) + if (compareTrivial(haystack_pos, haystack_end, needle_pos)) return haystack; } diff --git a/src/Common/ThreadStatus.cpp b/src/Common/ThreadStatus.cpp index 42bb53aed67..c976e4ca16a 100644 --- a/src/Common/ThreadStatus.cpp +++ b/src/Common/ThreadStatus.cpp @@ -26,7 +26,7 @@ namespace ErrorCodes thread_local ThreadStatus * current_thread = nullptr; thread_local ThreadStatus * main_thread = nullptr; -#if !defined(SANITIZER) && !defined(ARCADIA_BUILD) +#if !defined(SANITIZER) namespace { @@ -88,7 +88,7 @@ ThreadStatus::ThreadStatus() /// Will set alternative signal stack to provide diagnostics for stack overflow errors. /// If not already installed for current thread. /// Sanitizer makes larger stack usage and also it's incompatible with alternative stack by default (it sets up and relies on its own). -#if !defined(SANITIZER) && !defined(ARCADIA_BUILD) +#if !defined(SANITIZER) if (!has_alt_stack) { /// Don't repeat tries even if not installed successfully. @@ -147,11 +147,9 @@ ThreadStatus::~ThreadStatus() thread_group->threads.erase(this); } -#if !defined(ARCADIA_BUILD) /// It may cause segfault if query_context was destroyed, but was not detached auto query_context_ptr = query_context.lock(); assert((!query_context_ptr && query_id.empty()) || (query_context_ptr && query_id == query_context_ptr->getCurrentQueryId())); -#endif if (deleter) deleter(); diff --git a/src/Common/ZooKeeper/ZooKeeper.cpp b/src/Common/ZooKeeper/ZooKeeper.cpp index 3d505c088db..f05a10b8815 100644 --- a/src/Common/ZooKeeper/ZooKeeper.cpp +++ b/src/Common/ZooKeeper/ZooKeeper.cpp @@ -730,7 +730,10 @@ bool ZooKeeper::waitForDisappear(const std::string & path, const WaitCondition & } }; - while (!condition || !condition()) + /// do-while control structure to allow using this function in non-blocking + /// fashion with a wait condition which returns false by the time this + /// method is called. + do { /// Use getData insteand of exists to avoid watch leak. impl->get(path, callback, watch); @@ -746,7 +749,8 @@ bool ZooKeeper::waitForDisappear(const std::string & path, const WaitCondition & if (state->event_type == Coordination::DELETED) return true; - } + } while (!condition || !condition()); + return false; } diff --git a/src/Common/ZooKeeper/ZooKeeperImpl.cpp b/src/Common/ZooKeeper/ZooKeeperImpl.cpp index 63b4a61b866..09b2548f2f4 100644 --- a/src/Common/ZooKeeper/ZooKeeperImpl.cpp +++ b/src/Common/ZooKeeper/ZooKeeperImpl.cpp @@ -9,9 +9,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL # include diff --git a/src/Common/checkStackSize.cpp b/src/Common/checkStackSize.cpp index 69757a12f52..f1b56ac83a3 100644 --- a/src/Common/checkStackSize.cpp +++ b/src/Common/checkStackSize.cpp @@ -1,6 +1,7 @@ #include #include #include +#include /// THREAD_SANITIZER #include #include @@ -86,15 +87,24 @@ __attribute__((__weak__)) void checkStackSize() uintptr_t int_frame_address = reinterpret_cast(frame_address); uintptr_t int_stack_address = reinterpret_cast(stack_address); +#if !defined(THREAD_SANITIZER) + /// It's overkill to use more then half of stack. + static constexpr double STACK_SIZE_FREE_RATIO = 0.5; +#else + /// Under TSan recursion eats too much RAM, so half of stack is too much. + /// So under TSan only 5% of a stack is allowed (this is ~400K) + static constexpr double STACK_SIZE_FREE_RATIO = 0.05; +#endif + /// We assume that stack grows towards lower addresses. And that it starts to grow from the end of a chunk of memory of max_stack_size. if (int_frame_address > int_stack_address + max_stack_size) throw Exception("Logical error: frame address is greater than stack begin address", ErrorCodes::LOGICAL_ERROR); size_t stack_size = int_stack_address + max_stack_size - int_frame_address; + size_t max_stack_size_allowed = max_stack_size * STACK_SIZE_FREE_RATIO; - /// Just check if we have already eat more than a half of stack size. It's a bit overkill (a half of stack size is wasted). - /// It's safe to assume that overflow in multiplying by two cannot occur. - if (stack_size * 2 > max_stack_size) + /// Just check if we have eat more than a STACK_SIZE_FREE_RATIO of stack size already. + if (stack_size > max_stack_size_allowed) { throw Exception(ErrorCodes::TOO_DEEP_RECURSION, "Stack size too large. Stack address: {}, frame address: {}, stack size: {}, maximum stack size: {}", diff --git a/src/Common/clearPasswordFromCommandLine.cpp b/src/Common/clearPasswordFromCommandLine.cpp index 0ff56e25c3f..7cdf09c9b8f 100644 --- a/src/Common/clearPasswordFromCommandLine.cpp +++ b/src/Common/clearPasswordFromCommandLine.cpp @@ -1,11 +1,14 @@ #include -#include "clearPasswordFromCommandLine.h" +#include +#include + +using namespace std::literals; void clearPasswordFromCommandLine(int argc, char ** argv) { for (int arg = 1; arg < argc; ++arg) { - if (arg + 1 < argc && 0 == strcmp(argv[arg], "--password")) + if (arg + 1 < argc && argv[arg] == "--password"sv) { ++arg; memset(argv[arg], 0, strlen(argv[arg])); diff --git a/src/Common/tests/gtest_getMultipleValuesFromConfig.cpp b/src/Common/tests/gtest_getMultipleValuesFromConfig.cpp index 30aba9418ba..e813cf4c75c 100644 --- a/src/Common/tests/gtest_getMultipleValuesFromConfig.cpp +++ b/src/Common/tests/gtest_getMultipleValuesFromConfig.cpp @@ -11,14 +11,14 @@ TEST(Common, getMultipleValuesFromConfig) { std::istringstream // STYLE_CHECK_ALLOW_STD_STRING_STREAM xml_isteam(R"END( - + 0 1 2 3 -)END"); +)END"); Poco::AutoPtr config = new Poco::Util::XMLConfiguration(xml_isteam); std::vector answer = getMultipleValuesFromConfig(*config, "first_level", "second_level"); diff --git a/src/Compression/CachedCompressedReadBuffer.cpp b/src/Compression/CachedCompressedReadBuffer.cpp index 4a583773b4b..c19e854dd45 100644 --- a/src/Compression/CachedCompressedReadBuffer.cpp +++ b/src/Compression/CachedCompressedReadBuffer.cpp @@ -28,6 +28,12 @@ void CachedCompressedReadBuffer::initInput() } +void CachedCompressedReadBuffer::prefetch() +{ + file_in->prefetch(); +} + + bool CachedCompressedReadBuffer::nextImpl() { /// Let's check for the presence of a decompressed block in the cache, grab the ownership of this block, if it exists. diff --git a/src/Compression/CachedCompressedReadBuffer.h b/src/Compression/CachedCompressedReadBuffer.h index bb24f699eed..16770e343cc 100644 --- a/src/Compression/CachedCompressedReadBuffer.h +++ b/src/Compression/CachedCompressedReadBuffer.h @@ -33,8 +33,11 @@ private: UncompressedCache::MappedPtr owned_cell; void initInput(); + bool nextImpl() override; + void prefetch() override; + /// Passed into file_in. ReadBufferFromFileBase::ProfileCallback profile_callback; clockid_t clock_type {}; @@ -55,6 +58,18 @@ public: profile_callback = profile_callback_; clock_type = clock_type_; } + + void setReadUntilPosition(size_t position) override + { + if (file_in) + file_in->setReadUntilPosition(position); + } + + void setReadUntilEnd() override + { + if (file_in) + file_in->setReadUntilEnd(); + } }; } diff --git a/src/Compression/CompressedReadBufferFromFile.cpp b/src/Compression/CompressedReadBufferFromFile.cpp index 2cfd6d65c1c..1a70b27e9f4 100644 --- a/src/Compression/CompressedReadBufferFromFile.cpp +++ b/src/Compression/CompressedReadBufferFromFile.cpp @@ -44,12 +44,6 @@ bool CompressedReadBufferFromFile::nextImpl() } -void CompressedReadBufferFromFile::prefetch() -{ - file_in.prefetch(); -} - - CompressedReadBufferFromFile::CompressedReadBufferFromFile(std::unique_ptr buf, bool allow_different_codecs_) : BufferWithOwnMemory(0), p_file_in(std::move(buf)), file_in(*p_file_in) { @@ -58,17 +52,9 @@ CompressedReadBufferFromFile::CompressedReadBufferFromFile(std::unique_ptr(0) - , p_file_in(createReadBufferFromFileBase(path, settings, estimated_size)) - , file_in(*p_file_in) +void CompressedReadBufferFromFile::prefetch() { - compressed_in = &file_in; - allow_different_codecs = allow_different_codecs_; + file_in.prefetch(); } diff --git a/src/Compression/CompressedReadBufferFromFile.h b/src/Compression/CompressedReadBufferFromFile.h index 5f027851da3..2be8ce372c2 100644 --- a/src/Compression/CompressedReadBufferFromFile.h +++ b/src/Compression/CompressedReadBufferFromFile.h @@ -42,13 +42,11 @@ private: /* size_t nextimpl_working_buffer_offset; */ bool nextImpl() override; + void prefetch() override; public: - CompressedReadBufferFromFile(std::unique_ptr buf, bool allow_different_codecs_ = false); - - CompressedReadBufferFromFile( - const std::string & path, const ReadSettings & settings, size_t estimated_size, bool allow_different_codecs_ = false); + explicit CompressedReadBufferFromFile(std::unique_ptr buf, bool allow_different_codecs_ = false); /// Seek is lazy in some sense. We move position in compressed file_in to offset_in_compressed_file, but don't /// read data into working_buffer and don't shit our position to offset_in_decompressed_block. Instead @@ -61,6 +59,10 @@ public: { file_in.setProfileCallback(profile_callback_, clock_type_); } + + void setReadUntilPosition(size_t position) override { file_in.setReadUntilPosition(position); } + + void setReadUntilEnd() override { file_in.setReadUntilEnd(); } }; } diff --git a/src/Compression/CompressionCodecEncrypted.cpp b/src/Compression/CompressionCodecEncrypted.cpp index 18cd5469786..c3f14fe1449 100644 --- a/src/Compression/CompressionCodecEncrypted.cpp +++ b/src/Compression/CompressionCodecEncrypted.cpp @@ -1,6 +1,5 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include +#include #include #include #include @@ -13,10 +12,10 @@ // This depends on BoringSSL-specific API, notably . #if USE_SSL && USE_INTERNAL_SSL_LIBRARY #include -#include // Y_IGNORE +#include #include #include -#include // Y_IGNORE +#include #endif // Common part for both parts (with SSL and without) @@ -83,9 +82,11 @@ namespace ErrorCodes namespace { -constexpr size_t tag_size = 16; /// AES-GCM-SIV always uses a tag of 16 bytes length -constexpr size_t key_id_max_size = 8; /// Max size of varint. -constexpr size_t nonce_max_size = 13; /// Nonce size and one byte to show if nonce in in text +constexpr size_t tag_size = 16; /// AES-GCM-SIV always uses a tag of 16 bytes length +constexpr size_t key_id_max_size = 8; /// Max size of varint. +constexpr size_t nonce_max_size = 13; /// Nonce size and one byte to show if nonce in in text +constexpr size_t actual_nonce_size = 12; /// Nonce actual size +const String empty_nonce = {"\0\0\0\0\0\0\0\0\0\0\0\0", actual_nonce_size}; /// Get encryption/decryption algorithms. auto getMethod(EncryptionMethod Method) @@ -139,7 +140,7 @@ size_t encrypt(const std::string_view & plaintext, char * ciphertext_and_tag, En EVP_AEAD_CTX_zero(&encrypt_ctx); const int ok_init = EVP_AEAD_CTX_init(&encrypt_ctx, getMethod(method)(), reinterpret_cast(key.data()), key.size(), - 16 /* tag size */, nullptr); + tag_size, nullptr); if (!ok_init) throw Exception(lastErrorString(), ErrorCodes::OPENSSL_ERROR); @@ -147,7 +148,7 @@ size_t encrypt(const std::string_view & plaintext, char * ciphertext_and_tag, En size_t out_len; const int ok_open = EVP_AEAD_CTX_seal(&encrypt_ctx, reinterpret_cast(ciphertext_and_tag), - &out_len, plaintext.size() + 16, + &out_len, plaintext.size() + tag_size, reinterpret_cast(nonce.data()), nonce.size(), reinterpret_cast(plaintext.data()), plaintext.size(), nullptr, 0); @@ -169,7 +170,7 @@ size_t decrypt(const std::string_view & ciphertext, char * plaintext, Encryption const int ok_init = EVP_AEAD_CTX_init(&decrypt_ctx, getMethod(method)(), reinterpret_cast(key.data()), key.size(), - 16 /* tag size */, nullptr); + tag_size, nullptr); if (!ok_init) throw Exception(lastErrorString(), ErrorCodes::OPENSSL_ERROR); @@ -223,7 +224,7 @@ inline char* writeNonce(const String& nonce, char* dest) { /// If nonce consists of nul bytes, it shouldn't be in dest. Zero byte is the only byte that should be written. /// Otherwise, 1 is written and data from nonce is copied - if (nonce != String("\0\0\0\0\0\0\0\0\0\0\0\0", 12)) + if (nonce != empty_nonce) { *dest = 1; ++dest; @@ -248,15 +249,15 @@ inline const char* readNonce(String& nonce, const char* source) /// If first is zero byte: move source and set zero-bytes nonce if (!*source) { - nonce = {"\0\0\0\0\0\0\0\0\0\0\0\0", 12}; + nonce = empty_nonce; return ++source; } /// Move to next byte. Nonce will begin from there ++source; /// Otherwise, use data from source in nonce - nonce = {source, 12}; - source += 12; + nonce = {source, actual_nonce_size}; + source += actual_nonce_size; return source; } @@ -334,14 +335,14 @@ void CompressionCodecEncrypted::Configuration::loadImpl( if (!new_params->keys_storage[method].contains(new_params->current_key_id[method])) throw Exception(ErrorCodes::BAD_ARGUMENTS, "Not found a key with the current ID {}", new_params->current_key_id[method]); - /// Read nonce (in hex or in string). Its length should be 12 bytes. + /// Read nonce (in hex or in string). Its length should be 12 bytes (actual_nonce_size). if (config.has(config_prefix + ".nonce_hex")) new_params->nonce[method] = unhexKey(config.getString(config_prefix + ".nonce_hex")); else new_params->nonce[method] = config.getString(config_prefix + ".nonce", ""); - if (new_params->nonce[method].size() != 12 && !new_params->nonce[method].empty()) - throw Exception(ErrorCodes::BAD_ARGUMENTS, "Got nonce with unexpected size {}, the size should be 12", new_params->nonce[method].size()); + if (new_params->nonce[method].size() != actual_nonce_size && !new_params->nonce[method].empty()) + throw Exception(ErrorCodes::BAD_ARGUMENTS, "Got nonce with unexpected size {}, the size should be {}", new_params->nonce[method].size(), actual_nonce_size); } bool CompressionCodecEncrypted::Configuration::tryLoad(const Poco::Util::AbstractConfiguration & config, const String & config_prefix) @@ -401,7 +402,7 @@ void CompressionCodecEncrypted::Configuration::getCurrentKeyAndNonce(EncryptionM /// This will lead to data loss. nonce = current_params->nonce[method]; if (nonce.empty()) - nonce = {"\0\0\0\0\0\0\0\0\0\0\0\0", 12}; + nonce = empty_nonce; } String CompressionCodecEncrypted::Configuration::getKey(EncryptionMethod method, const UInt64 & key_id) const @@ -450,8 +451,10 @@ UInt32 CompressionCodecEncrypted::getMaxCompressedDataSize(UInt32 uncompressed_s UInt32 CompressionCodecEncrypted::doCompressData(const char * source, UInt32 source_size, char * dest) const { - // Generate an IV out of the data block and the key-generation - // key. It is completely deterministic, but does not leak any + // Nonce, key and plaintext will be used to generate authentication tag + // and message encryption key. AES-GCM-SIV authenticates the encoded additional data and plaintext. + // For this purpose message_authentication_key is used. + // Algorithm is completely deterministic, but does not leak any // information about the data block except for equivalence of // identical blocks (under the same key). @@ -472,8 +475,7 @@ UInt32 CompressionCodecEncrypted::doCompressData(const char * source, UInt32 sou char* ciphertext = writeNonce(nonce, ciphertext_with_nonce); UInt64 nonce_size = ciphertext - ciphertext_with_nonce; - // The IV will be used as an authentication tag. The ciphertext and the - // tag will be written directly in the dest buffer. + // The ciphertext and the authentication tag will be written directly in the dest buffer. size_t out_len = encrypt(plaintext, ciphertext, encryption_method, current_key, nonce); /// Length of encrypted text should be equal to text length plus tag_size (which was added by algorithm). diff --git a/src/Compression/CompressionCodecEncrypted.h b/src/Compression/CompressionCodecEncrypted.h index 75c29ee98a1..763e4da5d56 100644 --- a/src/Compression/CompressionCodecEncrypted.h +++ b/src/Compression/CompressionCodecEncrypted.h @@ -1,6 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include #include #include @@ -134,5 +133,3 @@ private: }; } - -#endif /* NOT Arcadia_build */ diff --git a/src/Compression/CompressionFactory.cpp b/src/Compression/CompressionFactory.cpp index 4dbc72c22f5..b665e898aa6 100644 --- a/src/Compression/CompressionFactory.cpp +++ b/src/Compression/CompressionFactory.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #include #include diff --git a/src/Compression/examples/cached_compressed_read_buffer.cpp b/src/Compression/examples/cached_compressed_read_buffer.cpp index 1bc08c0842b..546c9835af8 100644 --- a/src/Compression/examples/cached_compressed_read_buffer.cpp +++ b/src/Compression/examples/cached_compressed_read_buffer.cpp @@ -37,7 +37,7 @@ int main(int argc, char ** argv) path, [&]() { - return createReadBufferFromFileBase(path, {}, 0); + return createReadBufferFromFileBase(path, {}); }, &cache ); @@ -56,7 +56,7 @@ int main(int argc, char ** argv) path, [&]() { - return createReadBufferFromFileBase(path, {}, 0); + return createReadBufferFromFileBase(path, {}); }, &cache ); diff --git a/src/Coordination/Changelog.cpp b/src/Coordination/Changelog.cpp index 14df3aab03b..eabb1f2c5a6 100644 --- a/src/Coordination/Changelog.cpp +++ b/src/Coordination/Changelog.cpp @@ -631,6 +631,14 @@ LogEntryPtr Changelog::entryAt(uint64_t index) return src; } +LogEntryPtr Changelog::getLatestConfigChange() const +{ + for (const auto & [_, entry] : logs) + if (entry->get_val_type() == nuraft::conf) + return entry; + return nullptr; +} + nuraft::ptr Changelog::serializeEntriesToBuffer(uint64_t index, int32_t count) { std::vector> returned_logs; diff --git a/src/Coordination/Changelog.h b/src/Coordination/Changelog.h index 87ec359cd3c..edca61a883c 100644 --- a/src/Coordination/Changelog.h +++ b/src/Coordination/Changelog.h @@ -1,6 +1,6 @@ #pragma once -#include // Y_IGNORE +#include #include #include #include @@ -102,6 +102,9 @@ public: /// Last entry in log, or fake entry with term 0 if log is empty LogEntryPtr getLastEntry() const; + /// Get entry with latest config in logstore + LogEntryPtr getLatestConfigChange() const; + /// Return log entries between [start, end) LogEntriesPtr getLogEntriesBetween(uint64_t start_index, uint64_t end_index); diff --git a/src/Coordination/CoordinationSettings.h b/src/Coordination/CoordinationSettings.h index 00d443822e6..bec5e7f1f7a 100644 --- a/src/Coordination/CoordinationSettings.h +++ b/src/Coordination/CoordinationSettings.h @@ -38,7 +38,8 @@ struct Settings; M(Bool, quorum_reads, false, "Execute read requests as writes through whole RAFT consesus with similar speed", 0) \ M(Bool, force_sync, true, "Call fsync on each change in RAFT changelog", 0) \ M(Bool, compress_logs, true, "Write compressed coordination logs in ZSTD format", 0) \ - M(Bool, compress_snapshots_with_zstd_format, true, "Write compressed snapshots in ZSTD format (instead of custom LZ4)", 0) + M(Bool, compress_snapshots_with_zstd_format, true, "Write compressed snapshots in ZSTD format (instead of custom LZ4)", 0) \ + M(UInt64, configuration_change_tries_count, 20, "How many times we will try to apply configuration change (add/remove server) to the cluster", 0) DECLARE_SETTINGS_TRAITS(CoordinationSettingsTraits, LIST_OF_COORDINATION_SETTINGS) diff --git a/src/Coordination/InMemoryLogStore.h b/src/Coordination/InMemoryLogStore.h index caa5e31698d..ad4466b363f 100644 --- a/src/Coordination/InMemoryLogStore.h +++ b/src/Coordination/InMemoryLogStore.h @@ -4,7 +4,7 @@ #include #include #include -#include // Y_IGNORE +#include namespace DB { diff --git a/src/Coordination/KeeperDispatcher.cpp b/src/Coordination/KeeperDispatcher.cpp index ebeba5e71de..c29ea4fac45 100644 --- a/src/Coordination/KeeperDispatcher.cpp +++ b/src/Coordination/KeeperDispatcher.cpp @@ -280,7 +280,6 @@ void KeeperDispatcher::initialize(const Poco::Util::AbstractConfiguration & conf { LOG_INFO(log, "Starting Keeper asynchronously, server will accept connections to Keeper when it will be ready"); } - } catch (...) { @@ -290,6 +289,8 @@ void KeeperDispatcher::initialize(const Poco::Util::AbstractConfiguration & conf /// Start it after keeper server start session_cleaner_thread = ThreadFromGlobalPool([this] { sessionCleanerTask(); }); + update_configuration_thread = ThreadFromGlobalPool([this] { updateConfigurationThread(); }); + updateConfiguration(config); LOG_DEBUG(log, "Dispatcher initialized"); } @@ -325,6 +326,10 @@ void KeeperDispatcher::shutdown() snapshots_queue.finish(); if (snapshot_thread.joinable()) snapshot_thread.join(); + + update_configuration_queue.finish(); + if (update_configuration_thread.joinable()) + update_configuration_thread.join(); } if (server) @@ -505,4 +510,71 @@ int64_t KeeperDispatcher::getSessionID(int64_t session_timeout_ms) return future.get(); } + +void KeeperDispatcher::updateConfigurationThread() +{ + while (true) + { + if (shutdown_called) + return; + + try + { + if (!server->checkInit()) + { + LOG_INFO(log, "Server still not initialized, will not apply configuration until initialization finished"); + std::this_thread::sleep_for(std::chrono::milliseconds(5000)); + continue; + } + + ConfigUpdateAction action; + if (!update_configuration_queue.pop(action)) + break; + + + /// We must wait this update from leader or apply it ourself (if we are leader) + bool done = false; + while (!done) + { + if (shutdown_called) + return; + + if (isLeader()) + { + server->applyConfigurationUpdate(action); + done = true; + } + else + { + done = server->waitConfigurationUpdate(action); + if (!done) + LOG_INFO(log, "Cannot wait for configuration update, maybe we become leader, or maybe update is invalid, will try to wait one more time"); + } + } + } + catch (...) + { + tryLogCurrentException(__PRETTY_FUNCTION__); + } + } +} + +void KeeperDispatcher::updateConfiguration(const Poco::Util::AbstractConfiguration & config) +{ + auto diff = server->getConfigurationDiff(config); + if (diff.empty()) + LOG_TRACE(log, "Configuration update triggered, but nothing changed for RAFT"); + else if (diff.size() > 1) + LOG_WARNING(log, "Configuration changed for more than one server ({}) from cluster, it's strictly not recommended", diff.size()); + else + LOG_DEBUG(log, "Configuration change size ({})", diff.size()); + + for (auto & change : diff) + { + bool push_result = update_configuration_queue.push(change); + if (!push_result) + throw Exception(ErrorCodes::SYSTEM_ERROR, "Cannot push configuration update to queue"); + } +} + } diff --git a/src/Coordination/KeeperDispatcher.h b/src/Coordination/KeeperDispatcher.h index 8f19b081e26..60f69cfae9f 100644 --- a/src/Coordination/KeeperDispatcher.h +++ b/src/Coordination/KeeperDispatcher.h @@ -1,9 +1,7 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include -# include "config_core.h" -#endif +#include +#include "config_core.h" #if USE_NURAFT @@ -33,12 +31,16 @@ private: CoordinationSettingsPtr coordination_settings; using RequestsQueue = ConcurrentBoundedQueue; using SessionToResponseCallback = std::unordered_map; + using UpdateConfigurationQueue = ConcurrentBoundedQueue; /// Size depends on coordination settings std::unique_ptr requests_queue; ResponsesQueue responses_queue; SnapshotsQueue snapshots_queue{1}; + /// More than 1k updates is definitely misconfiguration. + UpdateConfigurationQueue update_configuration_queue{1000}; + std::atomic shutdown_called{false}; std::mutex session_to_response_callback_mutex; @@ -62,6 +64,8 @@ private: ThreadFromGlobalPool session_cleaner_thread; /// Dumping new snapshots to disk ThreadFromGlobalPool snapshot_thread; + /// Apply or wait for configuration changes + ThreadFromGlobalPool update_configuration_thread; /// RAFT wrapper. std::unique_ptr server; @@ -80,6 +84,8 @@ private: void sessionCleanerTask(); /// Thread create snapshots in the background void snapshotThread(); + /// Thread apply or wait configuration changes from leader + void updateConfigurationThread(); void setResponse(int64_t session_id, const Coordination::ZooKeeperResponsePtr & response); @@ -107,6 +113,10 @@ public: return server && server->checkInit(); } + /// Registered in ConfigReloader callback. Add new configuration changes to + /// update_configuration_queue. Keeper Dispatcher apply them asynchronously. + void updateConfiguration(const Poco::Util::AbstractConfiguration & config); + /// Shutdown internal keeper parts (server, state machine, log storage, etc) void shutdown(); diff --git a/src/Coordination/KeeperLogStore.cpp b/src/Coordination/KeeperLogStore.cpp index 7e08449306e..2736deaf2af 100644 --- a/src/Coordination/KeeperLogStore.cpp +++ b/src/Coordination/KeeperLogStore.cpp @@ -112,4 +112,10 @@ void KeeperLogStore::end_of_append_batch(uint64_t /*start_index*/, uint64_t /*co changelog.flush(); } +nuraft::ptr KeeperLogStore::getLatestConfigChange() const +{ + std::lock_guard lock(changelog_lock); + return changelog.getLatestConfigChange(); +} + } diff --git a/src/Coordination/KeeperLogStore.h b/src/Coordination/KeeperLogStore.h index bd0ecb78130..be529cdcb75 100644 --- a/src/Coordination/KeeperLogStore.h +++ b/src/Coordination/KeeperLogStore.h @@ -1,5 +1,5 @@ #pragma once -#include // Y_IGNORE +#include #include #include #include @@ -58,6 +58,9 @@ public: /// Flush batch of appended entries void end_of_append_batch(uint64_t start_index, uint64_t count) override; + /// Get entry with latest config in logstore + nuraft::ptr getLatestConfigChange() const; + private: mutable std::mutex changelog_lock; Poco::Logger * log; diff --git a/src/Coordination/KeeperServer.cpp b/src/Coordination/KeeperServer.cpp index 56d28058991..f4787a66d7d 100644 --- a/src/Coordination/KeeperServer.cpp +++ b/src/Coordination/KeeperServer.cpp @@ -1,9 +1,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #include #include @@ -121,23 +119,42 @@ void KeeperServer::startup() state_manager->loadLogStore(state_machine->last_commit_index() + 1, coordination_settings->reserved_log_items); - bool single_server = state_manager->getTotalServers() == 1; + auto latest_snapshot_config = state_machine->getClusterConfig(); + auto latest_log_store_config = state_manager->getLatestConfigFromLogStore(); - nuraft::raft_params params; - if (single_server) + if (latest_snapshot_config && latest_log_store_config) { - /// Don't make sense in single server mode - params.heart_beat_interval_ = 0; - params.election_timeout_lower_bound_ = 0; - params.election_timeout_upper_bound_ = 0; + if (latest_snapshot_config->get_log_idx() > latest_log_store_config->get_log_idx()) + { + LOG_INFO(log, "Will use config from snapshot with log index {}", latest_snapshot_config->get_log_idx()); + state_manager->save_config(*latest_snapshot_config); + } + else + { + LOG_INFO(log, "Will use config from log store with log index {}", latest_snapshot_config->get_log_idx()); + state_manager->save_config(*latest_log_store_config); + } + } + else if (latest_snapshot_config) + { + LOG_INFO(log, "No config in log store, will use config from snapshot with log index {}", latest_snapshot_config->get_log_idx()); + state_manager->save_config(*latest_snapshot_config); + } + else if (latest_log_store_config) + { + LOG_INFO(log, "No config in snapshot, will use config from log store with log index {}", latest_log_store_config->get_log_idx()); + state_manager->save_config(*latest_log_store_config); } else { - params.heart_beat_interval_ = coordination_settings->heart_beat_interval_ms.totalMilliseconds(); - params.election_timeout_lower_bound_ = coordination_settings->election_timeout_lower_bound_ms.totalMilliseconds(); - params.election_timeout_upper_bound_ = coordination_settings->election_timeout_upper_bound_ms.totalMilliseconds(); + LOG_INFO(log, "No config in log store and snapshot, probably it's initial run. Will use config from .xml on disk"); } + nuraft::raft_params params; + params.heart_beat_interval_ = coordination_settings->heart_beat_interval_ms.totalMilliseconds(); + params.election_timeout_lower_bound_ = coordination_settings->election_timeout_lower_bound_ms.totalMilliseconds(); + params.election_timeout_upper_bound_ = coordination_settings->election_timeout_upper_bound_ms.totalMilliseconds(); + params.reserved_log_items_ = coordination_settings->reserved_log_items; params.snapshot_distance_ = coordination_settings->snapshot_distance; params.stale_log_gap_ = coordination_settings->stale_log_gap; @@ -364,4 +381,139 @@ std::vector KeeperServer::getDeadSessions() return state_machine->getDeadSessions(); } +ConfigUpdateActions KeeperServer::getConfigurationDiff(const Poco::Util::AbstractConfiguration & config) +{ + return state_manager->getConfigurationDiff(config); +} + +void KeeperServer::applyConfigurationUpdate(const ConfigUpdateAction & task) +{ + size_t sleep_ms = 500; + if (task.action_type == ConfigUpdateActionType::AddServer) + { + LOG_INFO(log, "Will try to add server with id {}", task.server->get_id()); + bool added = false; + for (size_t i = 0; i < coordination_settings->configuration_change_tries_count; ++i) + { + if (raft_instance->get_srv_config(task.server->get_id()) != nullptr) + { + LOG_INFO(log, "Server with id {} was successfully added", task.server->get_id()); + added = true; + break; + } + + if (!isLeader()) + { + LOG_INFO(log, "We are not leader anymore, will not try to add server {}", task.server->get_id()); + break; + } + + auto result = raft_instance->add_srv(*task.server); + if (!result->get_accepted()) + LOG_INFO(log, "Command to add server {} was not accepted for the {} time, will sleep for {} ms and retry", task.server->get_id(), i + 1, sleep_ms * (i + 1)); + + std::this_thread::sleep_for(std::chrono::milliseconds(sleep_ms * (i + 1))); + } + if (!added) + throw Exception(ErrorCodes::RAFT_ERROR, "Configuration change to add server (id {}) was not accepted by RAFT after all {} retries", task.server->get_id(), coordination_settings->configuration_change_tries_count); + } + else if (task.action_type == ConfigUpdateActionType::RemoveServer) + { + LOG_INFO(log, "Will try to remove server with id {}", task.server->get_id()); + + bool removed = false; + if (task.server->get_id() == state_manager->server_id()) + { + LOG_INFO(log, "Trying to remove leader node (ourself), so will yield leadership and some other node (new leader) will try remove us. " + "Probably you will have to run SYSTEM RELOAD CONFIG on the new leader node"); + + raft_instance->yield_leadership(); + return; + } + + for (size_t i = 0; i < coordination_settings->configuration_change_tries_count; ++i) + { + if (raft_instance->get_srv_config(task.server->get_id()) == nullptr) + { + LOG_INFO(log, "Server with id {} was successfully removed", task.server->get_id()); + removed = true; + break; + } + + if (!isLeader()) + { + LOG_INFO(log, "We are not leader anymore, will not try to remove server {}", task.server->get_id()); + break; + } + + auto result = raft_instance->remove_srv(task.server->get_id()); + if (!result->get_accepted()) + LOG_INFO(log, "Command to remove server {} was not accepted for the {} time, will sleep for {} ms and retry", task.server->get_id(), i + 1, sleep_ms * (i + 1)); + + std::this_thread::sleep_for(std::chrono::milliseconds(sleep_ms * (i + 1))); + } + if (!removed) + throw Exception(ErrorCodes::RAFT_ERROR, "Configuration change to remove server (id {}) was not accepted by RAFT after all {} retries", task.server->get_id(), coordination_settings->configuration_change_tries_count); + } + else if (task.action_type == ConfigUpdateActionType::UpdatePriority) + raft_instance->set_priority(task.server->get_id(), task.server->get_priority()); + else + LOG_WARNING(log, "Unknown configuration update type {}", static_cast(task.action_type)); +} + + +bool KeeperServer::waitConfigurationUpdate(const ConfigUpdateAction & task) +{ + + size_t sleep_ms = 500; + if (task.action_type == ConfigUpdateActionType::AddServer) + { + LOG_INFO(log, "Will try to wait server with id {} to be added", task.server->get_id()); + for (size_t i = 0; i < coordination_settings->configuration_change_tries_count; ++i) + { + if (raft_instance->get_srv_config(task.server->get_id()) != nullptr) + { + LOG_INFO(log, "Server with id {} was successfully added by leader", task.server->get_id()); + return true; + } + + if (isLeader()) + { + LOG_INFO(log, "We are leader now, probably we will have to add server {}", task.server->get_id()); + return false; + } + + std::this_thread::sleep_for(std::chrono::milliseconds(sleep_ms * (i + 1))); + } + return false; + } + else if (task.action_type == ConfigUpdateActionType::RemoveServer) + { + LOG_INFO(log, "Will try to wait remove of server with id {}", task.server->get_id()); + + for (size_t i = 0; i < coordination_settings->configuration_change_tries_count; ++i) + { + if (raft_instance->get_srv_config(task.server->get_id()) == nullptr) + { + LOG_INFO(log, "Server with id {} was successfully removed by leader", task.server->get_id()); + return true; + } + + if (isLeader()) + { + LOG_INFO(log, "We are leader now, probably we will have to remove server {}", task.server->get_id()); + return false; + } + + std::this_thread::sleep_for(std::chrono::milliseconds(sleep_ms * (i + 1))); + } + return false; + } + else if (task.action_type == ConfigUpdateActionType::UpdatePriority) + return true; + else + LOG_WARNING(log, "Unknown configuration update type {}", static_cast(task.action_type)); + return true; +} + } diff --git a/src/Coordination/KeeperServer.h b/src/Coordination/KeeperServer.h index 8e10d053471..1dc5282b285 100644 --- a/src/Coordination/KeeperServer.h +++ b/src/Coordination/KeeperServer.h @@ -1,6 +1,6 @@ #pragma once -#include // Y_IGNORE +#include #include #include #include @@ -89,6 +89,18 @@ public: void shutdown(); int getServerID() const { return server_id; } + + /// Get configuration diff between current configuration in RAFT and in XML file + ConfigUpdateActions getConfigurationDiff(const Poco::Util::AbstractConfiguration & config); + + /// Apply action for configuration update. Actually call raft_instance->remove_srv or raft_instance->add_srv. + /// Synchronously check for update results with retries. + void applyConfigurationUpdate(const ConfigUpdateAction & task); + + + /// Wait configuration update for action. Used by followers. + /// Return true if update was successfully received. + bool waitConfigurationUpdate(const ConfigUpdateAction & task); }; } diff --git a/src/Coordination/KeeperSnapshotManager.cpp b/src/Coordination/KeeperSnapshotManager.cpp index 0a31878879c..be6d4db4219 100644 --- a/src/Coordination/KeeperSnapshotManager.cpp +++ b/src/Coordination/KeeperSnapshotManager.cpp @@ -205,9 +205,17 @@ void KeeperStorageSnapshot::serialize(const KeeperStorageSnapshot & snapshot, Wr writeBinary(id, out); } } + + /// Serialize cluster config + if (snapshot.cluster_config) + { + auto buffer = snapshot.cluster_config->serialize(); + writeVarUInt(buffer->size(), out); + out.write(reinterpret_cast(buffer->data_begin()), buffer->size()); + } } -SnapshotMetadataPtr KeeperStorageSnapshot::deserialize(KeeperStorage & storage, ReadBuffer & in) +void KeeperStorageSnapshot::deserialize(SnapshotDeserializationResult & deserialization_result, ReadBuffer & in) { uint8_t version; readBinary(version, in); @@ -215,11 +223,13 @@ SnapshotMetadataPtr KeeperStorageSnapshot::deserialize(KeeperStorage & storage, if (current_version > CURRENT_SNAPSHOT_VERSION) throw Exception(ErrorCodes::UNKNOWN_FORMAT_VERSION, "Unsupported snapshot version {}", version); - SnapshotMetadataPtr result = deserializeSnapshotMetadata(in); + deserialization_result.snapshot_meta = deserializeSnapshotMetadata(in); + KeeperStorage & storage = *deserialization_result.storage; + int64_t session_id; readBinary(session_id, in); - storage.zxid = result->get_last_log_idx(); + storage.zxid = deserialization_result.snapshot_meta->get_last_log_idx(); storage.session_id_counter = session_id; /// Before V1 we serialized ACL without acl_map @@ -309,13 +319,24 @@ SnapshotMetadataPtr KeeperStorageSnapshot::deserialize(KeeperStorage & storage, current_session_size++; } - return result; + /// Optional cluster config + ClusterConfigPtr cluster_config = nullptr; + if (!in.eof()) + { + size_t data_size; + readVarUInt(data_size, in); + auto buffer = nuraft::buffer::alloc(data_size); + in.readStrict(reinterpret_cast(buffer->data_begin()), data_size); + buffer->pos(0); + deserialization_result.cluster_config = ClusterConfig::deserialize(*buffer); + } } -KeeperStorageSnapshot::KeeperStorageSnapshot(KeeperStorage * storage_, uint64_t up_to_log_idx_) +KeeperStorageSnapshot::KeeperStorageSnapshot(KeeperStorage * storage_, uint64_t up_to_log_idx_, const ClusterConfigPtr & cluster_config_) : storage(storage_) , snapshot_meta(std::make_shared(up_to_log_idx_, 0, std::make_shared())) , session_id(storage->session_id_counter) + , cluster_config(cluster_config_) { storage->enableSnapshotMode(); snapshot_container_size = storage->container.snapshotSize(); @@ -325,10 +346,11 @@ KeeperStorageSnapshot::KeeperStorageSnapshot(KeeperStorage * storage_, uint64_t session_and_auth = storage->session_and_auth; } -KeeperStorageSnapshot::KeeperStorageSnapshot(KeeperStorage * storage_, const SnapshotMetadataPtr & snapshot_meta_) +KeeperStorageSnapshot::KeeperStorageSnapshot(KeeperStorage * storage_, const SnapshotMetadataPtr & snapshot_meta_, const ClusterConfigPtr & cluster_config_) : storage(storage_) , snapshot_meta(snapshot_meta_) , session_id(storage->session_id_counter) + , cluster_config(cluster_config_) { storage->enableSnapshotMode(); snapshot_container_size = storage->container.snapshotSize(); @@ -461,7 +483,7 @@ bool KeeperSnapshotManager::isZstdCompressed(nuraft::ptr buffer) return magic_from_buffer == ZSTD_COMPRESSED_MAGIC; } -SnapshotMetaAndStorage KeeperSnapshotManager::deserializeSnapshotFromBuffer(nuraft::ptr buffer) const +SnapshotDeserializationResult KeeperSnapshotManager::deserializeSnapshotFromBuffer(nuraft::ptr buffer) const { bool is_zstd_compressed = isZstdCompressed(buffer); @@ -473,12 +495,13 @@ SnapshotMetaAndStorage KeeperSnapshotManager::deserializeSnapshotFromBuffer(nura else compressed_reader = std::make_unique(*reader); - auto storage = std::make_unique(storage_tick_time, superdigest); - auto snapshot_metadata = KeeperStorageSnapshot::deserialize(*storage, *compressed_reader); - return std::make_pair(snapshot_metadata, std::move(storage)); + SnapshotDeserializationResult result; + result.storage = std::make_unique(storage_tick_time, superdigest); + KeeperStorageSnapshot::deserialize(result, *compressed_reader); + return result; } -SnapshotMetaAndStorage KeeperSnapshotManager::restoreFromLatestSnapshot() +SnapshotDeserializationResult KeeperSnapshotManager::restoreFromLatestSnapshot() { if (existing_snapshots.empty()) return {}; @@ -502,7 +525,6 @@ void KeeperSnapshotManager::removeSnapshot(uint64_t log_idx) throw Exception(ErrorCodes::UNKNOWN_SNAPSHOT, "Unknown snapshot with log index {}", log_idx); std::filesystem::remove(itr->second); existing_snapshots.erase(itr); - } diff --git a/src/Coordination/KeeperSnapshotManager.h b/src/Coordination/KeeperSnapshotManager.h index 1d14409a574..2889ec493df 100644 --- a/src/Coordination/KeeperSnapshotManager.h +++ b/src/Coordination/KeeperSnapshotManager.h @@ -1,5 +1,5 @@ #pragma once -#include // Y_IGNORE +#include #include #include #include @@ -9,6 +9,8 @@ namespace DB using SnapshotMetadata = nuraft::snapshot; using SnapshotMetadataPtr = std::shared_ptr; +using ClusterConfig = nuraft::cluster_config; +using ClusterConfigPtr = nuraft::ptr; enum SnapshotVersion : uint8_t { @@ -20,6 +22,17 @@ enum SnapshotVersion : uint8_t static constexpr auto CURRENT_SNAPSHOT_VERSION = SnapshotVersion::V3; +/// What is stored in binary shapsnot +struct SnapshotDeserializationResult +{ + /// Storage + KeeperStoragePtr storage; + /// Snapshot metadata (up_to_log_idx and so on) + SnapshotMetadataPtr snapshot_meta; + /// Cluster config + ClusterConfigPtr cluster_config; +}; + /// In memory keeper snapshot. Keeper Storage based on a hash map which can be /// turned into snapshot mode. This operation is fast and KeeperStorageSnapshot /// class do it in constructor. It also copies iterators from storage hash table @@ -31,14 +44,15 @@ static constexpr auto CURRENT_SNAPSHOT_VERSION = SnapshotVersion::V3; struct KeeperStorageSnapshot { public: - KeeperStorageSnapshot(KeeperStorage * storage_, uint64_t up_to_log_idx_); + KeeperStorageSnapshot(KeeperStorage * storage_, uint64_t up_to_log_idx_, const ClusterConfigPtr & cluster_config_ = nullptr); + + KeeperStorageSnapshot(KeeperStorage * storage_, const SnapshotMetadataPtr & snapshot_meta_, const ClusterConfigPtr & cluster_config_ = nullptr); - KeeperStorageSnapshot(KeeperStorage * storage_, const SnapshotMetadataPtr & snapshot_meta_); ~KeeperStorageSnapshot(); static void serialize(const KeeperStorageSnapshot & snapshot, WriteBuffer & out); - static SnapshotMetadataPtr deserialize(KeeperStorage & storage, ReadBuffer & in); + static void deserialize(SnapshotDeserializationResult & deserialization_result, ReadBuffer & in); KeeperStorage * storage; @@ -58,6 +72,8 @@ public: KeeperStorage::SessionAndAuth session_and_auth; /// ACLs cache for better performance. Without we cannot deserialize storage. std::unordered_map acl_map; + /// Cluster config from snapshot, can be empty + ClusterConfigPtr cluster_config; }; using KeeperStorageSnapshotPtr = std::shared_ptr; @@ -76,7 +92,7 @@ public: bool compress_snapshots_zstd_ = true, const std::string & superdigest_ = "", size_t storage_tick_time_ = 500); /// Restore storage from latest available snapshot - SnapshotMetaAndStorage restoreFromLatestSnapshot(); + SnapshotDeserializationResult restoreFromLatestSnapshot(); /// Compress snapshot and serialize it to buffer nuraft::ptr serializeSnapshotToBuffer(const KeeperStorageSnapshot & snapshot) const; @@ -84,7 +100,7 @@ public: /// Serialize already compressed snapshot to disk (return path) std::string serializeSnapshotBufferToDisk(nuraft::buffer & buffer, uint64_t up_to_log_idx); - SnapshotMetaAndStorage deserializeSnapshotFromBuffer(nuraft::ptr buffer) const; + SnapshotDeserializationResult deserializeSnapshotFromBuffer(nuraft::ptr buffer) const; /// Deserialize snapshot with log index up_to_log_idx from disk into compressed nuraft buffer. nuraft::ptr deserializeSnapshotBufferFromDisk(uint64_t up_to_log_idx) const; diff --git a/src/Coordination/KeeperStateMachine.cpp b/src/Coordination/KeeperStateMachine.cpp index fe64f8afde7..62820b41731 100644 --- a/src/Coordination/KeeperStateMachine.cpp +++ b/src/Coordination/KeeperStateMachine.cpp @@ -74,7 +74,10 @@ void KeeperStateMachine::init() try { latest_snapshot_buf = snapshot_manager.deserializeSnapshotBufferFromDisk(latest_log_index); - std::tie(latest_snapshot_meta, storage) = snapshot_manager.deserializeSnapshotFromBuffer(latest_snapshot_buf); + auto snapshot_deserialization_result = snapshot_manager.deserializeSnapshotFromBuffer(latest_snapshot_buf); + storage = std::move(snapshot_deserialization_result.storage); + latest_snapshot_meta = snapshot_deserialization_result.snapshot_meta; + cluster_config = snapshot_deserialization_result.cluster_config; last_committed_idx = latest_snapshot_meta->get_last_log_idx(); loaded = true; break; @@ -152,13 +155,24 @@ bool KeeperStateMachine::apply_snapshot(nuraft::snapshot & s) { /// deserialize and apply snapshot to storage std::lock_guard lock(storage_and_responses_lock); - std::tie(latest_snapshot_meta, storage) = snapshot_manager.deserializeSnapshotFromBuffer(latest_snapshot_ptr); + auto snapshot_deserialization_result = snapshot_manager.deserializeSnapshotFromBuffer(latest_snapshot_buf); + storage = std::move(snapshot_deserialization_result.storage); + latest_snapshot_meta = snapshot_deserialization_result.snapshot_meta; + cluster_config = snapshot_deserialization_result.cluster_config; } last_committed_idx = s.get_last_log_idx(); return true; } + +void KeeperStateMachine::commit_config(const uint64_t /*log_idx*/, nuraft::ptr & new_conf) +{ + std::lock_guard lock(cluster_config_lock); + auto tmp = new_conf->serialize(); + cluster_config = ClusterConfig::deserialize(*tmp); +} + nuraft::ptr KeeperStateMachine::last_snapshot() { /// Just return the latest snapshot. @@ -177,7 +191,7 @@ void KeeperStateMachine::create_snapshot( CreateSnapshotTask snapshot_task; { /// lock storage for a short period time to turn on "snapshot mode". After that we can read consistent storage state without locking. std::lock_guard lock(storage_and_responses_lock); - snapshot_task.snapshot = std::make_shared(storage.get(), snapshot_meta_copy); + snapshot_task.snapshot = std::make_shared(storage.get(), snapshot_meta_copy, getClusterConfig()); } /// create snapshot task for background execution (in snapshot thread) @@ -239,7 +253,7 @@ void KeeperStateMachine::save_logical_snp_obj( if (obj_id == 0) /// Fake snapshot required by NuRaft at startup { std::lock_guard lock(storage_and_responses_lock); - KeeperStorageSnapshot snapshot(storage.get(), s.get_last_log_idx()); + KeeperStorageSnapshot snapshot(storage.get(), s.get_last_log_idx(), getClusterConfig()); cloned_buffer = snapshot_manager.serializeSnapshotToBuffer(snapshot); } else @@ -324,4 +338,16 @@ void KeeperStateMachine::shutdownStorage() storage->finalize(); } +ClusterConfigPtr KeeperStateMachine::getClusterConfig() const +{ + std::lock_guard lock(cluster_config_lock); + if (cluster_config) + { + /// dumb way to return copy... + auto tmp = cluster_config->serialize(); + return ClusterConfig::deserialize(*tmp); + } + return nullptr; +} + } diff --git a/src/Coordination/KeeperStateMachine.h b/src/Coordination/KeeperStateMachine.h index 983692f7b7f..5af3dff73b5 100644 --- a/src/Coordination/KeeperStateMachine.h +++ b/src/Coordination/KeeperStateMachine.h @@ -2,7 +2,7 @@ #include #include -#include // Y_IGNORE +#include #include #include #include @@ -32,6 +32,9 @@ public: nuraft::ptr commit(const uint64_t log_idx, nuraft::buffer & data) override; + /// Save new cluster config to our snapshot (copy of the config stored in StateManager) + void commit_config(const uint64_t log_idx, nuraft::ptr & new_conf) override; + /// Currently not supported void rollback(const uint64_t /*log_idx*/, nuraft::buffer & /*data*/) override {} @@ -76,6 +79,8 @@ public: void shutdownStorage(); + ClusterConfigPtr getClusterConfig() const; + private: /// In our state machine we always have a single snapshot which is stored @@ -109,8 +114,15 @@ private: /// Last committed Raft log number. std::atomic last_committed_idx; + Poco::Logger * log; + /// Cluster config for our quorum. + /// It's a copy of config stored in StateManager, but here + /// we also write it to disk during snapshot. Must be used with lock. + mutable std::mutex cluster_config_lock; + ClusterConfigPtr cluster_config; + /// Special part of ACL system -- superdigest specified in server config. const std::string superdigest; }; diff --git a/src/Coordination/KeeperStateManager.cpp b/src/Coordination/KeeperStateManager.cpp index 2e12b7488c0..31b3a5f8b87 100644 --- a/src/Coordination/KeeperStateManager.cpp +++ b/src/Coordination/KeeperStateManager.cpp @@ -31,42 +31,22 @@ namespace } -KeeperStateManager::KeeperStateManager(int server_id_, const std::string & host, int port, const std::string & logs_path) - : my_server_id(server_id_) - , my_port(port) - , secure(false) - , log_store(nuraft::cs_new(logs_path, 5000, false, false)) - , cluster_config(nuraft::cs_new()) -{ - auto peer_config = nuraft::cs_new(my_server_id, host + ":" + std::to_string(port)); - cluster_config->get_servers().push_back(peer_config); -} -KeeperStateManager::KeeperStateManager( - int my_server_id_, - const std::string & config_prefix, - const Poco::Util::AbstractConfiguration & config, - const CoordinationSettingsPtr & coordination_settings, - bool standalone_keeper) - : my_server_id(my_server_id_) - , secure(config.getBool(config_prefix + ".raft_configuration.secure", false)) - , log_store(nuraft::cs_new( - getLogsPathFromConfig(config_prefix, config, standalone_keeper), - coordination_settings->rotate_log_storage_interval, coordination_settings->force_sync, coordination_settings->compress_logs)) - , cluster_config(nuraft::cs_new()) +KeeperConfigurationWrapper KeeperStateManager::parseServersConfiguration(const Poco::Util::AbstractConfiguration & config, bool allow_without_us) const { - + KeeperConfigurationWrapper result; + result.cluster_config = std::make_shared(); Poco::Util::AbstractConfiguration::Keys keys; config.keys(config_prefix + ".raft_configuration", keys); - total_servers = keys.size(); + size_t total_servers = 0; for (const auto & server_key : keys) { if (!startsWith(server_key, "server")) continue; std::string full_prefix = config_prefix + ".raft_configuration." + server_key; - int server_id = config.getInt(full_prefix + ".id"); + int new_server_id = config.getInt(full_prefix + ".id"); std::string hostname = config.getString(full_prefix + ".hostname"); int port = config.getInt(full_prefix + ".port"); bool can_become_leader = config.getBool(full_prefix + ".can_become_leader", true); @@ -74,24 +54,55 @@ KeeperStateManager::KeeperStateManager( bool start_as_follower = config.getBool(full_prefix + ".start_as_follower", false); if (start_as_follower) - start_as_follower_servers.insert(server_id); + result.servers_start_as_followers.insert(new_server_id); auto endpoint = hostname + ":" + std::to_string(port); - auto peer_config = nuraft::cs_new(server_id, 0, endpoint, "", !can_become_leader, priority); - if (server_id == my_server_id) + auto peer_config = nuraft::cs_new(new_server_id, 0, endpoint, "", !can_become_leader, priority); + if (my_server_id == new_server_id) { - my_server_config = peer_config; - my_port = port; + result.config = peer_config; + result.port = port; } - cluster_config->get_servers().push_back(peer_config); + result.cluster_config->get_servers().push_back(peer_config); + total_servers++; } - if (!my_server_config) + if (!result.config && !allow_without_us) throw Exception(ErrorCodes::RAFT_ERROR, "Our server id {} not found in raft_configuration section", my_server_id); - if (start_as_follower_servers.size() == cluster_config->get_servers().size()) + if (result.servers_start_as_followers.size() == total_servers) throw Exception(ErrorCodes::RAFT_ERROR, "At least one of servers should be able to start as leader (without )"); + + return result; +} + +KeeperStateManager::KeeperStateManager(int server_id_, const std::string & host, int port, const std::string & logs_path) + : my_server_id(server_id_) + , secure(false) + , log_store(nuraft::cs_new(logs_path, 5000, false, false)) +{ + auto peer_config = nuraft::cs_new(my_server_id, host + ":" + std::to_string(port)); + configuration_wrapper.cluster_config = nuraft::cs_new(); + configuration_wrapper.port = port; + configuration_wrapper.config = peer_config; + configuration_wrapper.cluster_config->get_servers().push_back(peer_config); +} + +KeeperStateManager::KeeperStateManager( + int server_id_, + const std::string & config_prefix_, + const Poco::Util::AbstractConfiguration & config, + const CoordinationSettingsPtr & coordination_settings, + bool standalone_keeper) + : my_server_id(server_id_) + , secure(config.getBool(config_prefix_ + ".raft_configuration.secure", false)) + , config_prefix(config_prefix_) + , configuration_wrapper(parseServersConfiguration(config, false)) + , log_store(nuraft::cs_new( + getLogsPathFromConfig(config_prefix_, config, standalone_keeper), + coordination_settings->rotate_log_storage_interval, coordination_settings->force_sync, coordination_settings->compress_logs)) +{ } void KeeperStateManager::loadLogStore(uint64_t last_commited_index, uint64_t logs_to_keep) @@ -99,6 +110,14 @@ void KeeperStateManager::loadLogStore(uint64_t last_commited_index, uint64_t log log_store->init(last_commited_index, logs_to_keep); } +ClusterConfigPtr KeeperStateManager::getLatestConfigFromLogStore() const +{ + auto entry_with_change = log_store->getLatestConfigChange(); + if (entry_with_change) + return ClusterConfig::deserialize(entry_with_change->get_buf()); + return nullptr; +} + void KeeperStateManager::flushLogStore() { log_store->flush(); @@ -106,18 +125,67 @@ void KeeperStateManager::flushLogStore() void KeeperStateManager::save_config(const nuraft::cluster_config & config) { - // Just keep in memory in this example. - // Need to write to disk here, if want to make it durable. + std::lock_guard lock(configuration_wrapper_mutex); nuraft::ptr buf = config.serialize(); - cluster_config = nuraft::cluster_config::deserialize(*buf); + configuration_wrapper.cluster_config = nuraft::cluster_config::deserialize(*buf); } void KeeperStateManager::save_state(const nuraft::srv_state & state) { - // Just keep in memory in this example. - // Need to write to disk here, if want to make it durable. - nuraft::ptr buf = state.serialize(); - server_state = nuraft::srv_state::deserialize(*buf); - } + nuraft::ptr buf = state.serialize(); + server_state = nuraft::srv_state::deserialize(*buf); +} + +ConfigUpdateActions KeeperStateManager::getConfigurationDiff(const Poco::Util::AbstractConfiguration & config) const +{ + auto new_configuration_wrapper = parseServersConfiguration(config, true); + + std::unordered_map new_ids, old_ids; + for (const auto & new_server : new_configuration_wrapper.cluster_config->get_servers()) + new_ids[new_server->get_id()] = new_server; + + { + std::lock_guard lock(configuration_wrapper_mutex); + for (const auto & old_server : configuration_wrapper.cluster_config->get_servers()) + old_ids[old_server->get_id()] = old_server; + } + + ConfigUpdateActions result; + + /// First of all add new servers + for (auto [new_id, server_config] : new_ids) + { + if (!old_ids.count(new_id)) + result.emplace_back(ConfigUpdateAction{ConfigUpdateActionType::AddServer, server_config}); + } + + /// After that remove old ones + for (auto [old_id, server_config] : old_ids) + { + if (!new_ids.count(old_id)) + result.emplace_back(ConfigUpdateAction{ConfigUpdateActionType::RemoveServer, server_config}); + } + + { + std::lock_guard lock(configuration_wrapper_mutex); + /// And update priority if required + for (const auto & old_server : configuration_wrapper.cluster_config->get_servers()) + { + for (const auto & new_server : new_configuration_wrapper.cluster_config->get_servers()) + { + if (old_server->get_id() == new_server->get_id()) + { + if (old_server->get_priority() != new_server->get_priority()) + { + result.emplace_back(ConfigUpdateAction{ConfigUpdateActionType::UpdatePriority, new_server}); + } + break; + } + } + } + } + + return result; +} } diff --git a/src/Coordination/KeeperStateManager.h b/src/Coordination/KeeperStateManager.h index 2a93a1dc62b..96f0484c05a 100644 --- a/src/Coordination/KeeperStateManager.h +++ b/src/Coordination/KeeperStateManager.h @@ -4,22 +4,59 @@ #include #include #include -#include // Y_IGNORE +#include #include +#include namespace DB { +using KeeperServerConfigPtr = nuraft::ptr; + +/// Wrapper struct for Keeper cluster config. We parse this +/// info from XML files. +struct KeeperConfigurationWrapper +{ + /// Our port + int port; + /// Our config + KeeperServerConfigPtr config; + /// Servers id's to start as followers + std::unordered_set servers_start_as_followers; + /// Cluster config + ClusterConfigPtr cluster_config; +}; + +/// When our configuration changes the following action types +/// can happen +enum class ConfigUpdateActionType +{ + RemoveServer, + AddServer, + UpdatePriority, +}; + +/// Action to update configuration +struct ConfigUpdateAction +{ + ConfigUpdateActionType action_type; + KeeperServerConfigPtr server; +}; + +using ConfigUpdateActions = std::vector; + +/// Responsible for managing our and cluster configuration class KeeperStateManager : public nuraft::state_mgr { public: KeeperStateManager( int server_id_, - const std::string & config_prefix, + const std::string & config_prefix_, const Poco::Util::AbstractConfiguration & config, const CoordinationSettingsPtr & coordination_settings, bool standalone_keeper); + /// Constructor for tests KeeperStateManager( int server_id_, const std::string & host, @@ -30,8 +67,14 @@ public: void flushLogStore(); - nuraft::ptr load_config() override { return cluster_config; } + /// Called on server start, in our case we don't use any separate logic for load + nuraft::ptr load_config() override + { + std::lock_guard lock(configuration_wrapper_mutex); + return configuration_wrapper.cluster_config; + } + /// Save cluster config (i.e. nodes, their priorities and so on) void save_config(const nuraft::cluster_config & config) override; void save_state(const nuraft::srv_state & state) override; @@ -40,17 +83,22 @@ public: nuraft::ptr load_log_store() override { return log_store; } - Int32 server_id() override { return my_server_id; } + int32_t server_id() override { return my_server_id; } - nuraft::ptr get_srv_config() const { return my_server_config; } + nuraft::ptr get_srv_config() const { return configuration_wrapper.config; } void system_exit(const int /* exit_code */) override {} - int getPort() const { return my_port; } + int getPort() const + { + std::lock_guard lock(configuration_wrapper_mutex); + return configuration_wrapper.port; + } bool shouldStartAsFollower() const { - return start_as_follower_servers.count(my_server_id); + std::lock_guard lock(configuration_wrapper_mutex); + return configuration_wrapper.servers_start_as_followers.count(my_server_id); } bool isSecure() const @@ -60,18 +108,31 @@ public: nuraft::ptr getLogStore() const { return log_store; } - uint64_t getTotalServers() const { return total_servers; } + uint64_t getTotalServers() const + { + std::lock_guard lock(configuration_wrapper_mutex); + return configuration_wrapper.cluster_config->get_servers().size(); + } + + /// Read all log entries in log store from the begging and return latest config (with largest log_index) + ClusterConfigPtr getLatestConfigFromLogStore() const; + + /// Get configuration diff between proposed XML and current state in RAFT + ConfigUpdateActions getConfigurationDiff(const Poco::Util::AbstractConfiguration & config) const; private: int my_server_id; - int my_port; bool secure; - uint64_t total_servers{0}; - std::unordered_set start_as_follower_servers; + std::string config_prefix; + + mutable std::mutex configuration_wrapper_mutex; + KeeperConfigurationWrapper configuration_wrapper; + nuraft::ptr log_store; - nuraft::ptr my_server_config; - nuraft::ptr cluster_config; nuraft::ptr server_state; + + /// Parse configuration from xml config. + KeeperConfigurationWrapper parseServersConfiguration(const Poco::Util::AbstractConfiguration & config, bool allow_without_us) const; }; } diff --git a/src/Coordination/LoggerWrapper.h b/src/Coordination/LoggerWrapper.h index 12b24d99cc9..002fa870241 100644 --- a/src/Coordination/LoggerWrapper.h +++ b/src/Coordination/LoggerWrapper.h @@ -1,6 +1,6 @@ #pragma once -#include // Y_IGNORE +#include #include #include diff --git a/src/Coordination/ReadBufferFromNuraftBuffer.h b/src/Coordination/ReadBufferFromNuraftBuffer.h index 3817e217881..cc01d3c8f39 100644 --- a/src/Coordination/ReadBufferFromNuraftBuffer.h +++ b/src/Coordination/ReadBufferFromNuraftBuffer.h @@ -1,7 +1,7 @@ #pragma once #include -#include // Y_IGNORE +#include namespace DB { diff --git a/src/Coordination/SummingStateMachine.h b/src/Coordination/SummingStateMachine.h index 03572840739..bbb12834608 100644 --- a/src/Coordination/SummingStateMachine.h +++ b/src/Coordination/SummingStateMachine.h @@ -1,6 +1,6 @@ #pragma once -#include // Y_IGNORE +#include #include #include #include diff --git a/src/Coordination/WriteBufferFromNuraftBuffer.h b/src/Coordination/WriteBufferFromNuraftBuffer.h index d037a0e6a27..47a01fbc2a4 100644 --- a/src/Coordination/WriteBufferFromNuraftBuffer.h +++ b/src/Coordination/WriteBufferFromNuraftBuffer.h @@ -1,7 +1,7 @@ #pragma once #include -#include // Y_IGNORE +#include namespace DB { diff --git a/src/Coordination/tests/gtest_coordination.cpp b/src/Coordination/tests/gtest_coordination.cpp index 0cb5972f718..b04af1422dc 100644 --- a/src/Coordination/tests/gtest_coordination.cpp +++ b/src/Coordination/tests/gtest_coordination.cpp @@ -1,9 +1,7 @@ #include -#if !defined(ARCADIA_BUILD) -# include -# include "config_core.h" -#endif +#include +#include "config_core.h" #if USE_NURAFT #include @@ -22,7 +20,7 @@ #include #include #include -#include // Y_IGNORE +#include #include #include #include @@ -962,7 +960,7 @@ TEST_P(CoordinationTest, TestStorageSnapshotSimple) auto debuf = manager.deserializeSnapshotBufferFromDisk(2); - auto [snapshot_meta, restored_storage] = manager.deserializeSnapshotFromBuffer(debuf); + auto [restored_storage, snapshot_meta, _] = manager.deserializeSnapshotFromBuffer(debuf); EXPECT_EQ(restored_storage->container.size(), 3); EXPECT_EQ(restored_storage->container.getValue("/").children.size(), 1); @@ -1011,7 +1009,7 @@ TEST_P(CoordinationTest, TestStorageSnapshotMoreWrites) auto debuf = manager.deserializeSnapshotBufferFromDisk(50); - auto [meta, restored_storage] = manager.deserializeSnapshotFromBuffer(debuf); + auto [restored_storage, meta, _] = manager.deserializeSnapshotFromBuffer(debuf); EXPECT_EQ(restored_storage->container.size(), 51); for (size_t i = 0; i < 50; ++i) @@ -1050,7 +1048,7 @@ TEST_P(CoordinationTest, TestStorageSnapshotManySnapshots) EXPECT_TRUE(fs::exists("./snapshots/snapshot_250.bin" + params.extension)); - auto [meta, restored_storage] = manager.restoreFromLatestSnapshot(); + auto [restored_storage, meta, _] = manager.restoreFromLatestSnapshot(); EXPECT_EQ(restored_storage->container.size(), 251); @@ -1103,7 +1101,7 @@ TEST_P(CoordinationTest, TestStorageSnapshotMode) EXPECT_FALSE(storage.container.contains("/hello_" + std::to_string(i))); } - auto [meta, restored_storage] = manager.restoreFromLatestSnapshot(); + auto [restored_storage, meta, _] = manager.restoreFromLatestSnapshot(); for (size_t i = 0; i < 50; ++i) { @@ -1498,7 +1496,7 @@ TEST_P(CoordinationTest, TestStorageSnapshotDifferentCompressions) auto debuf = new_manager.deserializeSnapshotBufferFromDisk(2); - auto [snapshot_meta, restored_storage] = new_manager.deserializeSnapshotFromBuffer(debuf); + auto [restored_storage, snapshot_meta, _] = new_manager.deserializeSnapshotFromBuffer(debuf); EXPECT_EQ(restored_storage->container.size(), 3); EXPECT_EQ(restored_storage->container.getValue("/").children.size(), 1); diff --git a/src/Core/Block.cpp b/src/Core/Block.cpp index 4aaa735e52d..168ee346626 100644 --- a/src/Core/Block.cpp +++ b/src/Core/Block.cpp @@ -582,6 +582,17 @@ DataTypes Block::getDataTypes() const return res; } +Names Block::getDataTypeNames() const +{ + Names res; + res.reserve(columns()); + + for (const auto & elem : data) + res.push_back(elem.type->getName()); + + return res; +} + bool blocksHaveEqualStructure(const Block & lhs, const Block & rhs) { diff --git a/src/Core/Block.h b/src/Core/Block.h index e0a032094f6..c0c9391e3b2 100644 --- a/src/Core/Block.h +++ b/src/Core/Block.h @@ -90,6 +90,7 @@ public: NamesAndTypesList getNamesAndTypesList() const; Names getNames() const; DataTypes getDataTypes() const; + Names getDataTypeNames() const; /// Returns number of rows from first column in block, not equal to nullptr. If no columns, returns 0. size_t rows() const; diff --git a/src/Core/MySQL/Authentication.h b/src/Core/MySQL/Authentication.h index 7a173e80e08..26194236aa2 100644 --- a/src/Core/MySQL/Authentication.h +++ b/src/Core/MySQL/Authentication.h @@ -4,9 +4,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_SSL # include diff --git a/src/Core/PostgreSQL/Connection.h b/src/Core/PostgreSQL/Connection.h index 681681a38bf..d65c38643c1 100644 --- a/src/Core/PostgreSQL/Connection.h +++ b/src/Core/PostgreSQL/Connection.h @@ -1,12 +1,10 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX -#include // Y_IGNORE +#include #include #include diff --git a/src/Core/PostgreSQL/ConnectionHolder.h b/src/Core/PostgreSQL/ConnectionHolder.h index c2a1908774c..d0d64935e91 100644 --- a/src/Core/PostgreSQL/ConnectionHolder.h +++ b/src/Core/PostgreSQL/ConnectionHolder.h @@ -1,12 +1,10 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX -#include // Y_IGNORE +#include #include #include diff --git a/src/Core/PostgreSQL/PoolWithFailover.h b/src/Core/PostgreSQL/PoolWithFailover.h index fbf2780daaf..c59010a5d43 100644 --- a/src/Core/PostgreSQL/PoolWithFailover.h +++ b/src/Core/PostgreSQL/PoolWithFailover.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX diff --git a/src/Core/PostgreSQL/Utils.h b/src/Core/PostgreSQL/Utils.h index c80089d5741..1aa173d7137 100644 --- a/src/Core/PostgreSQL/Utils.h +++ b/src/Core/PostgreSQL/Utils.h @@ -1,12 +1,10 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX -#include // Y_IGNORE +#include #include #include "Connection.h" #include diff --git a/src/Core/PostgreSQL/insertPostgreSQLValue.cpp b/src/Core/PostgreSQL/insertPostgreSQLValue.cpp index 4f31c8dfb52..1c3230ec826 100644 --- a/src/Core/PostgreSQL/insertPostgreSQLValue.cpp +++ b/src/Core/PostgreSQL/insertPostgreSQLValue.cpp @@ -15,7 +15,7 @@ #include #include #include -#include // Y_IGNORE +#include namespace DB diff --git a/src/Core/PostgreSQL/insertPostgreSQLValue.h b/src/Core/PostgreSQL/insertPostgreSQLValue.h index 4ed3eb95aac..dcdd9a4f9b8 100644 --- a/src/Core/PostgreSQL/insertPostgreSQLValue.h +++ b/src/Core/PostgreSQL/insertPostgreSQLValue.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX diff --git a/src/Core/PostgreSQLProtocol.h b/src/Core/PostgreSQLProtocol.h index 7d34e23eed2..dd26bf41b4a 100644 --- a/src/Core/PostgreSQLProtocol.h +++ b/src/Core/PostgreSQLProtocol.h @@ -825,7 +825,7 @@ public: Messaging::MessageTransport & mt, const Poco::Net::SocketAddress & address) = 0; - virtual Authentication::Type getType() const = 0; + virtual AuthenticationType getType() const = 0; virtual ~AuthenticationMethod() = default; }; @@ -842,9 +842,9 @@ public: return setPassword(user_name, "", session, mt, address); } - Authentication::Type getType() const override + AuthenticationType getType() const override { - return Authentication::Type::NO_PASSWORD; + return AuthenticationType::NO_PASSWORD; } }; @@ -873,9 +873,9 @@ public: ErrorCodes::UNEXPECTED_PACKET_FROM_CLIENT); } - Authentication::Type getType() const override + AuthenticationType getType() const override { - return Authentication::Type::PLAINTEXT_PASSWORD; + return AuthenticationType::PLAINTEXT_PASSWORD; } }; @@ -883,7 +883,7 @@ class AuthenticationManager { private: Poco::Logger * log = &Poco::Logger::get("AuthenticationManager"); - std::unordered_map> type_to_method = {}; + std::unordered_map> type_to_method = {}; public: AuthenticationManager(const std::vector> & auth_methods) @@ -900,7 +900,7 @@ public: Messaging::MessageTransport & mt, const Poco::Net::SocketAddress & address) { - const Authentication::Type user_auth_type = session.getAuthenticationTypeOrLogInFailure(user_name); + const AuthenticationType user_auth_type = session.getAuthenticationTypeOrLogInFailure(user_name); if (type_to_method.find(user_auth_type) != type_to_method.end()) { type_to_method[user_auth_type]->authenticate(user_name, session, mt, address); diff --git a/src/Core/ProtocolDefines.h b/src/Core/ProtocolDefines.h index 6c62b969ff9..8a31ffd49b1 100644 --- a/src/Core/ProtocolDefines.h +++ b/src/Core/ProtocolDefines.h @@ -12,7 +12,9 @@ /// Minimum revision with exactly the same set of aggregation methods and rules to select them. /// Two-level (bucketed) aggregation is incompatible if servers are inconsistent in these rules /// (keys will be placed in different buckets and result will not be fully aggregated). -#define DBMS_MIN_REVISION_WITH_CURRENT_AGGREGATION_VARIANT_SELECTION_METHOD 54431 +#define DBMS_MIN_REVISION_WITH_CURRENT_AGGREGATION_VARIANT_SELECTION_METHOD 54448 +#define DBMS_MIN_MAJOR_VERSION_WITH_CURRENT_AGGREGATION_VARIANT_SELECTION_METHOD 21 +#define DBMS_MIN_MINOR_VERSION_WITH_CURRENT_AGGREGATION_VARIANT_SELECTION_METHOD 4 #define DBMS_MIN_REVISION_WITH_COLUMN_DEFAULTS_METADATA 54410 #define DBMS_MIN_REVISION_WITH_LOW_CARDINALITY_TYPE 54405 diff --git a/src/Core/Settings.h b/src/Core/Settings.h index ba0ffdb6f33..ff83676c4b8 100644 --- a/src/Core/Settings.h +++ b/src/Core/Settings.h @@ -75,7 +75,6 @@ class IColumn; M(UInt64, s3_max_single_read_retries, 4, "The maximum number of retries during single S3 read.", 0) \ M(UInt64, s3_max_redirects, 10, "Max number of S3 redirects hops allowed.", 0) \ M(UInt64, s3_max_connections, 1024, "The maximum number of connections per server.", 0) \ - M(UInt64, http_max_single_read_retries, 4, "The maximum number of retries during single http read.", 0) \ M(UInt64, hsts_max_age, 0, "Expired time for hsts. 0 means disable HSTS.", 0) \ M(Bool, extremes, false, "Calculate minimums and maximums of the result columns. They can be output in JSON-formats.", IMPORTANT) \ M(Bool, use_uncompressed_cache, false, "Whether to use the cache of uncompressed blocks.", 0) \ @@ -264,7 +263,6 @@ class IColumn; M(Bool, allow_distributed_ddl, true, "If it is set to true, then a user is allowed to executed distributed DDL queries.", 0) \ M(Bool, allow_suspicious_codecs, false, "If it is set to true, allow to specify meaningless compression codecs.", 0) \ M(Bool, allow_experimental_codecs, false, "If it is set to true, allow to specify experimental compression codecs (but we don't have those yet and this option does nothing).", 0) \ - M(UInt64, odbc_max_field_size, 1024, "Max size of filed can be read from ODBC dictionary. Long strings are truncated.", 0) \ M(UInt64, query_profiler_real_time_period_ns, QUERY_PROFILER_DEFAULT_SAMPLE_RATE_NS, "Period for real clock timer of query profiler (in nanoseconds). Set 0 value to turn off the real clock query profiler. Recommended value is at least 10000000 (100 times a second) for single queries or 1000000000 (once a second) for cluster-wide profiling.", 0) \ M(UInt64, query_profiler_cpu_time_period_ns, QUERY_PROFILER_DEFAULT_SAMPLE_RATE_NS, "Period for CPU clock timer of query profiler (in nanoseconds). Set 0 value to turn off the CPU clock query profiler. Recommended value is at least 10000000 (100 times a second) for single queries or 1000000000 (once a second) for cluster-wide profiling.", 0) \ M(Bool, metrics_perf_events_enabled, false, "If enabled, some of the perf events will be measured throughout queries' execution.", 0) \ @@ -386,6 +384,7 @@ class IColumn; M(Bool, enable_unaligned_array_join, false, "Allow ARRAY JOIN with multiple arrays that have different sizes. When this settings is enabled, arrays will be resized to the longest one.", 0) \ M(Bool, optimize_read_in_order, true, "Enable ORDER BY optimization for reading data in corresponding order in MergeTree tables.", 0) \ M(Bool, optimize_aggregation_in_order, false, "Enable GROUP BY optimization for aggregating data in corresponding order in MergeTree tables.", 0) \ + M(UInt64, aggregation_in_order_max_block_bytes, 50000000, "Maximal size of block in bytes accumulated during aggregation in order of primary key. Lower block size allows to parallelize more final merge stage of aggregation.", 0) \ M(UInt64, read_in_order_two_level_merge_threshold, 100, "Minimal number of parts to read to run preliminary merge step during multithread reading in order of primary key.", 0) \ M(Bool, low_cardinality_allow_in_native_format, true, "Use LowCardinality type in Native format. Otherwise, convert LowCardinality columns to ordinary for select query, and convert ordinary columns to required LowCardinality for insert query.", 0) \ M(Bool, cancel_http_readonly_queries_on_client_close, false, "Cancel HTTP readonly queries when a client closes the connection without waiting for response.", 0) \ @@ -508,6 +507,7 @@ class IColumn; M(ShortCircuitFunctionEvaluation, short_circuit_function_evaluation, ShortCircuitFunctionEvaluation::ENABLE, "Setting for short-circuit function evaluation configuration. Possible values: 'enable' - use short-circuit function evaluation for functions that are suitable for it, 'disable' - disable short-circuit function evaluation, 'force_enable' - use short-circuit function evaluation for all functions.", 0) \ \ M(String, local_filesystem_read_method, "pread", "Method of reading data from local filesystem, one of: read, pread, mmap, pread_threadpool.", 0) \ + M(String, remote_filesystem_read_method, "read", "Method of reading data from remote filesystem, one of: read, read_threadpool.", 0) \ M(Bool, local_filesystem_read_prefetch, false, "Should use prefetching when reading data from local filesystem.", 0) \ M(Bool, remote_filesystem_read_prefetch, true, "Should use prefetching when reading data from remote filesystem.", 0) \ M(Int64, read_priority, 0, "Priority to read data from local filesystem. Only supported for 'pread_threadpool' method.", 0) \ @@ -520,7 +520,7 @@ class IColumn; M(Milliseconds, async_insert_busy_timeout_ms, 200, "Maximum time to wait before dumping collected data per query since the first data appeared", 0) \ M(Milliseconds, async_insert_stale_timeout_ms, 0, "Maximum time to wait before dumping collected data per query since the last data appeared. Zero means no timeout at all", 0) \ \ - M(Int64, remote_fs_read_backoff_threshold, 10000, "Max wait time when trying to read data for remote disk", 0) \ + M(Int64, remote_fs_read_max_backoff_ms, 10000, "Max wait time when trying to read data for remote disk", 0) \ M(Int64, remote_fs_read_backoff_max_tries, 5, "Max attempts to read with backoff", 0) \ \ M(Bool, force_remove_data_recursively_on_drop, false, "Recursively remove data on DROP query. Avoids 'Directory not empty' error, but may silently remove detached data", 0) \ @@ -541,6 +541,7 @@ class IColumn; M(Bool, database_replicated_ddl_output, true, "Obsolete setting, does nothing.", 0) \ M(UInt64, replication_alter_columns_timeout, 60, "Obsolete setting, does nothing.", 0) \ M(Bool, optimize_fuse_sum_count_avg, false, "Obsolete, use optimize_syntax_fuse_functions", 0) \ + M(UInt64, odbc_max_field_size, 0, "Obsolete setting, does nothing.", 0) \ /** The section above is for obsolete settings. Do not add anything there. */ @@ -554,10 +555,12 @@ class IColumn; M(Bool, output_format_csv_crlf_end_of_line, false, "If it is set true, end of line in CSV format will be \\r\\n instead of \\n.", 0) \ M(Bool, input_format_csv_enum_as_number, false, "Treat inserted enum values in CSV formats as enum indices \\N", 0) \ M(Bool, input_format_csv_arrays_as_nested_csv, false, R"(When reading Array from CSV, expect that its elements were serialized in nested CSV and then put into string. Example: "[""Hello"", ""world"", ""42"""" TV""]". Braces around array can be omitted.)", 0) \ - M(Bool, input_format_skip_unknown_fields, false, "Skip columns with unknown names from input data (it works for JSONEachRow, CSVWithNames, TSVWithNames and TSKV formats).", 0) \ - M(Bool, input_format_with_names_use_header, true, "For TSVWithNames and CSVWithNames input formats this controls whether format parser is to assume that column data appear in the input exactly as they are specified in the header.", 0) \ + M(Bool, input_format_skip_unknown_fields, false, "Skip columns with unknown names from input data (it works for JSONEachRow, -WithNames, -WithNamesAndTypes and TSKV formats).", 0) \ + M(Bool, input_format_with_names_use_header, true, "For -WithNames input formats this controls whether format parser is to assume that column data appear in the input exactly as they are specified in the header.", 0) \ + M(Bool, input_format_with_types_use_header, true, "For -WithNamesAndTypes input formats this controls whether format parser should check if data types from the input match data types from the header.", 0) \ M(Bool, input_format_import_nested_json, false, "Map nested JSON data to nested tables (it works for JSONEachRow format).", 0) \ - M(Bool, input_format_defaults_for_omitted_fields, true, "For input data calculate default expressions for omitted fields (it works for JSONEachRow, CSV and TSV formats).", IMPORTANT) \ + M(Bool, input_format_defaults_for_omitted_fields, true, "For input data calculate default expressions for omitted fields (it works for JSONEachRow, -WithNames, -WithNamesAndTypes formats).", IMPORTANT) \ + M(Bool, input_format_csv_empty_as_default, true, "Treat empty fields in CSV input as default values.", 0) \ M(Bool, input_format_tsv_empty_as_default, false, "Treat empty fields in TSV input as default values.", 0) \ M(Bool, input_format_tsv_enum_as_number, false, "Treat inserted enum values in TSV formats as enum indices \\N", 0) \ M(Bool, input_format_null_as_default, true, "For text input formats initialize null fields with default values if data type of this field is not nullable", 0) \ diff --git a/src/Core/config_core.h.in b/src/Core/config_core.h.in index cc9c993b205..11dd9bf96f1 100644 --- a/src/Core/config_core.h.in +++ b/src/Core/config_core.h.in @@ -17,3 +17,4 @@ #cmakedefine01 USE_NURAFT #cmakedefine01 USE_NLP #cmakedefine01 USE_KRB5 +#cmakedefine01 USE_FILELOG diff --git a/src/DataTypes/DataTypeLowCardinality.h b/src/DataTypes/DataTypeLowCardinality.h index 1266174c6d6..7f4286046d9 100644 --- a/src/DataTypes/DataTypeLowCardinality.h +++ b/src/DataTypes/DataTypeLowCardinality.h @@ -51,6 +51,7 @@ public: bool isNullable() const override { return false; } bool onlyNull() const override { return false; } bool lowCardinality() const override { return true; } + bool isLowCardinalityNullable() const override { return dictionary_type->isNullable(); } static MutableColumnUniquePtr createColumnUnique(const IDataType & keys_type); static MutableColumnUniquePtr createColumnUnique(const IDataType & keys_type, MutableColumnPtr && keys); diff --git a/src/DataTypes/IDataType.h b/src/DataTypes/IDataType.h index a53fdac797f..fc42d678d57 100644 --- a/src/DataTypes/IDataType.h +++ b/src/DataTypes/IDataType.h @@ -269,6 +269,9 @@ public: virtual bool lowCardinality() const { return false; } + /// Checks if this type is LowCardinality(Nullable(...)) + virtual bool isLowCardinalityNullable() const { return false; } + /// Strings, Numbers, Date, DateTime, Nullable virtual bool canBeInsideLowCardinality() const { return false; } diff --git a/src/DataTypes/Native.h b/src/DataTypes/Native.h index 970b70f9f0b..b72e479cb1d 100644 --- a/src/DataTypes/Native.h +++ b/src/DataTypes/Native.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_EMBEDDED_COMPILER # include diff --git a/src/DataTypes/Serializations/ISerialization.cpp b/src/DataTypes/Serializations/ISerialization.cpp index 5c0274b0e35..92aeeaa7bac 100644 --- a/src/DataTypes/Serializations/ISerialization.cpp +++ b/src/DataTypes/Serializations/ISerialization.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -202,6 +203,20 @@ bool ISerialization::isSpecialCompressionAllowed(const SubstreamPath & path) return true; } +void ISerialization::deserializeTextRaw(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const +{ + String field; + /// Read until \t or \n. + readString(field, istr); + ReadBufferFromString buf(field); + deserializeWholeText(column, buf, settings); +} + +void ISerialization::serializeTextRaw(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const +{ + serializeText(column, row_num, ostr, settings); +} + size_t ISerialization::getArrayLevel(const SubstreamPath & path) { size_t level = 0; diff --git a/src/DataTypes/Serializations/ISerialization.h b/src/DataTypes/Serializations/ISerialization.h index 7562cfcb9a0..aab58daab03 100644 --- a/src/DataTypes/Serializations/ISerialization.h +++ b/src/DataTypes/Serializations/ISerialization.h @@ -283,6 +283,14 @@ public: serializeText(column, row_num, ostr, settings); } + /** Text deserialization without escaping and quoting. Reads all data until first \n or \t + * into a temporary string and then call deserializeWholeText. It was implemented this way + * because this function is rarely used and because proper implementation requires a lot of + * additional code in data types serialization and ReadHelpers. + */ + virtual void deserializeTextRaw(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const; + virtual void serializeTextRaw(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const; + static String getFileNameForStream(const NameAndTypePair & column, const SubstreamPath & path); static String getFileNameForStream(const String & name_in_storage, const SubstreamPath & path); static String getSubcolumnNameForStream(const SubstreamPath & path); diff --git a/src/DataTypes/Serializations/SerializationFixedString.cpp b/src/DataTypes/Serializations/SerializationFixedString.cpp index 5c63631e2a3..972313a564f 100644 --- a/src/DataTypes/Serializations/SerializationFixedString.cpp +++ b/src/DataTypes/Serializations/SerializationFixedString.cpp @@ -163,7 +163,7 @@ void SerializationFixedString::deserializeTextQuoted(IColumn & column, ReadBuffe void SerializationFixedString::deserializeWholeText(IColumn & column, ReadBuffer & istr, const FormatSettings &) const { - read(*this, column, [&istr](ColumnFixedString::Chars & data) { readStringInto(data, istr); }); + read(*this, column, [&istr](ColumnFixedString::Chars & data) { readStringUntilEOFInto(data, istr); }); } diff --git a/src/DataTypes/Serializations/SerializationLowCardinality.cpp b/src/DataTypes/Serializations/SerializationLowCardinality.cpp index 7a86d5413b2..d83a6c0ee83 100644 --- a/src/DataTypes/Serializations/SerializationLowCardinality.cpp +++ b/src/DataTypes/Serializations/SerializationLowCardinality.cpp @@ -818,6 +818,7 @@ void SerializationLowCardinality::serializeTextJSON(const IColumn & column, size { serializeImpl(column, row_num, &ISerialization::serializeTextJSON, ostr, settings); } + void SerializationLowCardinality::deserializeTextJSON(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const { deserializeImpl(column, &ISerialization::deserializeTextJSON, istr, settings); @@ -828,6 +829,16 @@ void SerializationLowCardinality::serializeTextXML(const IColumn & column, size_ serializeImpl(column, row_num, &ISerialization::serializeTextXML, ostr, settings); } +void SerializationLowCardinality::deserializeTextRaw(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const +{ + deserializeImpl(column, &ISerialization::deserializeTextRaw, istr, settings); +} + +void SerializationLowCardinality::serializeTextRaw(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const +{ + serializeImpl(column, row_num, &ISerialization::serializeTextRaw, ostr, settings); +} + template void SerializationLowCardinality::serializeImpl( const IColumn & column, size_t row_num, SerializationLowCardinality::SerializeFunctionPtr func, Args &&... args) const diff --git a/src/DataTypes/Serializations/SerializationLowCardinality.h b/src/DataTypes/Serializations/SerializationLowCardinality.h index f82b35a52d5..af26405fcfa 100644 --- a/src/DataTypes/Serializations/SerializationLowCardinality.h +++ b/src/DataTypes/Serializations/SerializationLowCardinality.h @@ -64,6 +64,8 @@ public: void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const override; void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const override; + void deserializeTextRaw(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const override; + void serializeTextRaw(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const override; private: template diff --git a/src/DataTypes/Serializations/SerializationNullable.cpp b/src/DataTypes/Serializations/SerializationNullable.cpp index 7bf7b6e55b0..acec3790196 100644 --- a/src/DataTypes/Serializations/SerializationNullable.cpp +++ b/src/DataTypes/Serializations/SerializationNullable.cpp @@ -255,9 +255,37 @@ void SerializationNullable::deserializeTextEscaped(IColumn & column, ReadBuffer deserializeTextEscapedImpl(column, istr, settings, nested); } +void SerializationNullable::deserializeTextRaw(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const +{ + deserializeTextRawImpl(column, istr, settings, nested); +} + +void SerializationNullable::serializeTextRaw(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const +{ + const ColumnNullable & col = assert_cast(column); + + if (col.isNullAt(row_num)) + writeString(settings.tsv.null_representation, ostr); + else + nested->serializeTextRaw(col.getNestedColumn(), row_num, ostr, settings); +} + +template +ReturnType SerializationNullable::deserializeTextRawImpl(IColumn & column, ReadBuffer & istr, const FormatSettings & settings, const SerializationPtr & nested) +{ + return deserializeTextEscapedAndRawImpl(column, istr, settings, nested); +} + template ReturnType SerializationNullable::deserializeTextEscapedImpl(IColumn & column, ReadBuffer & istr, const FormatSettings & settings, - const SerializationPtr & nested_serialization) + const SerializationPtr & nested) +{ + return deserializeTextEscapedAndRawImpl(column, istr, settings, nested); +} + +template +ReturnType SerializationNullable::deserializeTextEscapedAndRawImpl(IColumn & column, ReadBuffer & istr, const FormatSettings & settings, + const SerializationPtr & nested) { const String & null_representation = settings.tsv.null_representation; @@ -265,9 +293,15 @@ ReturnType SerializationNullable::deserializeTextEscapedImpl(IColumn & column, R if (istr.eof() || (!null_representation.empty() && *istr.position() != null_representation[0])) { /// This is not null, surely. - return safeDeserialize(column, *nested_serialization, + return safeDeserialize(column, *nested, [] { return false; }, - [&nested_serialization, &istr, &settings] (IColumn & nested_column) { nested_serialization->deserializeTextEscaped(nested_column, istr, settings); }); + [&nested, &istr, &settings] (IColumn & nested_column) + { + if constexpr (escaped) + nested->deserializeTextEscaped(nested_column, istr, settings); + else + nested->deserializeTextRaw(nested_column, istr, settings); + }); } /// Check if we have enough data in buffer to check if it's a null. @@ -281,11 +315,14 @@ ReturnType SerializationNullable::deserializeTextEscapedImpl(IColumn & column, R istr.position() = pos; return false; }; - auto deserialize_nested = [&nested_serialization, &settings, &istr] (IColumn & nested_column) + auto deserialize_nested = [&nested, &settings, &istr] (IColumn & nested_column) { - nested_serialization->deserializeTextEscaped(nested_column, istr, settings); + if constexpr (escaped) + nested->deserializeTextEscaped(nested_column, istr, settings); + else + nested->deserializeTextRaw(nested_column, istr, settings); }; - return safeDeserialize(column, *nested_serialization, check_for_null, deserialize_nested); + return safeDeserialize(column, *nested, check_for_null, deserialize_nested); } /// We don't have enough data in buffer to check if it's a null. @@ -303,10 +340,13 @@ ReturnType SerializationNullable::deserializeTextEscapedImpl(IColumn & column, R return false; }; - auto deserialize_nested = [&nested_serialization, &settings, &buf, &null_representation, &istr] (IColumn & nested_column) + auto deserialize_nested = [&nested, &settings, &buf, &null_representation, &istr] (IColumn & nested_column) { auto * pos = buf.position(); - nested_serialization->deserializeTextEscaped(nested_column, buf, settings); + if constexpr (escaped) + nested->deserializeTextEscaped(nested_column, buf, settings); + else + nested->deserializeTextRaw(nested_column, buf, settings); /// Check that we don't have any unread data in PeekableReadBuffer own memory. if (likely(!buf.hasUnreadData())) return; @@ -320,7 +360,10 @@ ReturnType SerializationNullable::deserializeTextEscapedImpl(IColumn & column, R "for large input.", ErrorCodes::CANNOT_READ_ALL_DATA); WriteBufferFromOwnString parsed_value; - nested_serialization->serializeTextEscaped(nested_column, nested_column.size() - 1, parsed_value, settings); + if constexpr (escaped) + nested->serializeTextEscaped(nested_column, nested_column.size() - 1, parsed_value, settings); + else + nested->serializeTextRaw(nested_column, nested_column.size() - 1, parsed_value, settings); throw DB::ParsingException("Error while parsing \"" + std::string(pos, buf.buffer().end()) + std::string(istr.position(), std::min(size_t(10), istr.available())) + "\" as Nullable" + " at position " + std::to_string(istr.count()) + ": got \"" + std::string(pos, buf.position() - pos) + "\", which was deserialized as \"" @@ -328,7 +371,7 @@ ReturnType SerializationNullable::deserializeTextEscapedImpl(IColumn & column, R ErrorCodes::CANNOT_READ_ALL_DATA); }; - return safeDeserialize(column, *nested_serialization, check_for_null, deserialize_nested); + return safeDeserialize(column, *nested, check_for_null, deserialize_nested); } void SerializationNullable::serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const @@ -413,15 +456,15 @@ void SerializationNullable::deserializeTextCSV(IColumn & column, ReadBuffer & is template ReturnType SerializationNullable::deserializeTextCSVImpl(IColumn & column, ReadBuffer & istr, const FormatSettings & settings, - const SerializationPtr & nested_serialization) + const SerializationPtr & nested) { const String & null_representation = settings.csv.null_representation; if (istr.eof() || (!null_representation.empty() && *istr.position() != null_representation[0])) { /// This is not null, surely. - return safeDeserialize(column, *nested_serialization, + return safeDeserialize(column, *nested, [] { return false; }, - [&nested_serialization, &istr, &settings] (IColumn & nested_column) { nested_serialization->deserializeTextCSV(nested_column, istr, settings); }); + [&nested, &istr, &settings] (IColumn & nested_column) { nested->deserializeTextCSV(nested_column, istr, settings); }); } /// Check if we have enough data in buffer to check if it's a null. @@ -435,11 +478,11 @@ ReturnType SerializationNullable::deserializeTextCSVImpl(IColumn & column, ReadB istr.position() = pos; return false; }; - auto deserialize_nested = [&nested_serialization, &settings, &istr] (IColumn & nested_column) + auto deserialize_nested = [&nested, &settings, &istr] (IColumn & nested_column) { - nested_serialization->deserializeTextCSV(nested_column, istr, settings); + nested->deserializeTextCSV(nested_column, istr, settings); }; - return safeDeserialize(column, *nested_serialization, check_for_null, deserialize_nested); + return safeDeserialize(column, *nested, check_for_null, deserialize_nested); } /// We don't have enough data in buffer to check if it's a null. @@ -457,10 +500,10 @@ ReturnType SerializationNullable::deserializeTextCSVImpl(IColumn & column, ReadB return false; }; - auto deserialize_nested = [&nested_serialization, &settings, &buf, &null_representation, &istr] (IColumn & nested_column) + auto deserialize_nested = [&nested, &settings, &buf, &null_representation, &istr] (IColumn & nested_column) { auto * pos = buf.position(); - nested_serialization->deserializeTextCSV(nested_column, buf, settings); + nested->deserializeTextCSV(nested_column, buf, settings); /// Check that we don't have any unread data in PeekableReadBuffer own memory. if (likely(!buf.hasUnreadData())) return; @@ -475,7 +518,7 @@ ReturnType SerializationNullable::deserializeTextCSVImpl(IColumn & column, ReadB "for large input.", ErrorCodes::CANNOT_READ_ALL_DATA); WriteBufferFromOwnString parsed_value; - nested_serialization->serializeTextCSV(nested_column, nested_column.size() - 1, parsed_value, settings); + nested->serializeTextCSV(nested_column, nested_column.size() - 1, parsed_value, settings); throw DB::ParsingException("Error while parsing \"" + std::string(pos, buf.buffer().end()) + std::string(istr.position(), std::min(size_t(10), istr.available())) + "\" as Nullable" + " at position " + std::to_string(istr.count()) + ": got \"" + std::string(pos, buf.position() - pos) + "\", which was deserialized as \"" @@ -483,7 +526,7 @@ ReturnType SerializationNullable::deserializeTextCSVImpl(IColumn & column, ReadB ErrorCodes::CANNOT_READ_ALL_DATA); }; - return safeDeserialize(column, *nested_serialization, check_for_null, deserialize_nested); + return safeDeserialize(column, *nested, check_for_null, deserialize_nested); } void SerializationNullable::serializeText(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const @@ -546,5 +589,6 @@ template bool SerializationNullable::deserializeTextEscapedImpl(IColumn & template bool SerializationNullable::deserializeTextQuotedImpl(IColumn & column, ReadBuffer & istr, const FormatSettings &, const SerializationPtr & nested); template bool SerializationNullable::deserializeTextCSVImpl(IColumn & column, ReadBuffer & istr, const FormatSettings & settings, const SerializationPtr & nested); template bool SerializationNullable::deserializeTextJSONImpl(IColumn & column, ReadBuffer & istr, const FormatSettings &, const SerializationPtr & nested); +template bool SerializationNullable::deserializeTextRawImpl(IColumn & column, ReadBuffer & istr, const FormatSettings &, const SerializationPtr & nested); } diff --git a/src/DataTypes/Serializations/SerializationNullable.h b/src/DataTypes/Serializations/SerializationNullable.h index c39c4dd6573..c514234127c 100644 --- a/src/DataTypes/Serializations/SerializationNullable.h +++ b/src/DataTypes/Serializations/SerializationNullable.h @@ -72,6 +72,9 @@ public: void serializeText(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings &) const override; void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings &) const override; + void deserializeTextRaw(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const override; + void serializeTextRaw(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const override; + /// If ReturnType is bool, check for NULL and deserialize value into non-nullable column (and return true) or insert default value of nested type (and return false) /// If ReturnType is void, deserialize Nullable(T) template @@ -84,6 +87,10 @@ public: static ReturnType deserializeTextCSVImpl(IColumn & column, ReadBuffer & istr, const FormatSettings & settings, const SerializationPtr & nested); template static ReturnType deserializeTextJSONImpl(IColumn & column, ReadBuffer & istr, const FormatSettings &, const SerializationPtr & nested); + template + static ReturnType deserializeTextRawImpl(IColumn & column, ReadBuffer & istr, const FormatSettings & settings, const SerializationPtr & nested); + template + static ReturnType deserializeTextEscapedAndRawImpl(IColumn & column, ReadBuffer & istr, const FormatSettings & settings, const SerializationPtr & nested); private: struct SubcolumnCreator : public ISubcolumnCreator diff --git a/src/DataTypes/Serializations/SerializationString.cpp b/src/DataTypes/Serializations/SerializationString.cpp index f655a6ca1f9..5614e970315 100644 --- a/src/DataTypes/Serializations/SerializationString.cpp +++ b/src/DataTypes/Serializations/SerializationString.cpp @@ -242,7 +242,7 @@ static inline void read(IColumn & column, Reader && reader) void SerializationString::deserializeWholeText(IColumn & column, ReadBuffer & istr, const FormatSettings &) const { - read(column, [&](ColumnString::Chars & data) { readStringInto(data, istr); }); + read(column, [&](ColumnString::Chars & data) { readStringUntilEOFInto(data, istr); }); } diff --git a/src/Databases/DatabaseAtomic.cpp b/src/Databases/DatabaseAtomic.cpp index 5c75f6f1036..ae90f1a6900 100644 --- a/src/Databases/DatabaseAtomic.cpp +++ b/src/Databases/DatabaseAtomic.cpp @@ -140,6 +140,9 @@ void DatabaseAtomic::dropTable(ContextPtr local_context, const String & table_na if (table->storesDataOnDisk()) tryRemoveSymlink(table_name); + if (table->dropTableImmediately()) + table->drop(); + /// Notify DatabaseCatalog that table was dropped. It will remove table data in background. /// Cleanup is performed outside of database to allow easily DROP DATABASE without waiting for cleanup to complete. DatabaseCatalog::instance().enqueueDroppedTableCleanup(table->getStorageID(), table, table_metadata_path_drop, no_delay); diff --git a/src/Databases/DatabaseFactory.cpp b/src/Databases/DatabaseFactory.cpp index d997977cc3a..03d91324672 100644 --- a/src/Databases/DatabaseFactory.cpp +++ b/src/Databases/DatabaseFactory.cpp @@ -16,9 +16,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL # include @@ -36,7 +34,7 @@ #endif #if USE_LIBPQXX -#include // Y_IGNORE +#include #include #include #include diff --git a/src/Databases/DatabaseMemory.cpp b/src/Databases/DatabaseMemory.cpp index 87e5f86c893..8d1220cc1a1 100644 --- a/src/Databases/DatabaseMemory.cpp +++ b/src/Databases/DatabaseMemory.cpp @@ -91,7 +91,7 @@ ASTPtr DatabaseMemory::getCreateTableQueryImpl(const String & table_name, Contex if (it == create_queries.end() || !it->second) { if (throw_on_error) - throw Exception("There is no metadata of table " + table_name + " in database " + database_name, ErrorCodes::UNKNOWN_TABLE); + throw Exception(ErrorCodes::UNKNOWN_TABLE, "There is no metadata of table {} in database {}", table_name, database_name); else return {}; } @@ -111,4 +111,14 @@ void DatabaseMemory::drop(ContextPtr local_context) std::filesystem::remove_all(local_context->getPath() + data_path); } +void DatabaseMemory::alterTable(ContextPtr, const StorageID & table_id, const StorageInMemoryMetadata & metadata) +{ + std::lock_guard lock{mutex}; + auto it = create_queries.find(table_id.table_name); + if (it == create_queries.end() || !it->second) + throw Exception(ErrorCodes::UNKNOWN_TABLE, "Cannot alter: There is no metadata of table {}", table_id.getNameForLogs()); + + applyMetadataChangesToCreateQuery(it->second, metadata); +} + } diff --git a/src/Databases/DatabaseMemory.h b/src/Databases/DatabaseMemory.h index 8c9cf86ec19..a661d1c49b0 100644 --- a/src/Databases/DatabaseMemory.h +++ b/src/Databases/DatabaseMemory.h @@ -48,6 +48,8 @@ public: void drop(ContextPtr context) override; + void alterTable(ContextPtr local_context, const StorageID & table_id, const StorageInMemoryMetadata & metadata) override; + private: String data_path; using NameToASTCreate = std::unordered_map; diff --git a/src/Databases/DatabaseOnDisk.cpp b/src/Databases/DatabaseOnDisk.cpp index 97e59f53f64..55e5a3071bc 100644 --- a/src/Databases/DatabaseOnDisk.cpp +++ b/src/Databases/DatabaseOnDisk.cpp @@ -137,66 +137,6 @@ String getObjectDefinitionFromCreateQuery(const ASTPtr & query) return statement_buf.str(); } -void applyMetadataChangesToCreateQuery(const ASTPtr & query, const StorageInMemoryMetadata & metadata) -{ - auto & ast_create_query = query->as(); - - bool has_structure = ast_create_query.columns_list && ast_create_query.columns_list->columns; - if (ast_create_query.as_table_function && !has_structure) - throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Cannot alter table {} because it was created AS table function" - " and doesn't have structure in metadata", backQuote(ast_create_query.table)); - - assert(has_structure); - ASTPtr new_columns = InterpreterCreateQuery::formatColumns(metadata.columns); - ASTPtr new_indices = InterpreterCreateQuery::formatIndices(metadata.secondary_indices); - ASTPtr new_constraints = InterpreterCreateQuery::formatConstraints(metadata.constraints); - ASTPtr new_projections = InterpreterCreateQuery::formatProjections(metadata.projections); - - ast_create_query.columns_list->replace(ast_create_query.columns_list->columns, new_columns); - ast_create_query.columns_list->setOrReplace(ast_create_query.columns_list->indices, new_indices); - ast_create_query.columns_list->setOrReplace(ast_create_query.columns_list->constraints, new_constraints); - ast_create_query.columns_list->setOrReplace(ast_create_query.columns_list->projections, new_projections); - - if (metadata.select.select_query) - { - query->replace(ast_create_query.select, metadata.select.select_query); - } - - /// MaterializedView is one type of CREATE query without storage. - if (ast_create_query.storage) - { - ASTStorage & storage_ast = *ast_create_query.storage; - - bool is_extended_storage_def - = storage_ast.partition_by || storage_ast.primary_key || storage_ast.order_by || storage_ast.sample_by || storage_ast.settings; - - if (is_extended_storage_def) - { - if (metadata.sorting_key.definition_ast) - storage_ast.set(storage_ast.order_by, metadata.sorting_key.definition_ast); - - if (metadata.primary_key.definition_ast) - storage_ast.set(storage_ast.primary_key, metadata.primary_key.definition_ast); - - if (metadata.sampling_key.definition_ast) - storage_ast.set(storage_ast.sample_by, metadata.sampling_key.definition_ast); - - if (metadata.table_ttl.definition_ast) - storage_ast.set(storage_ast.ttl_table, metadata.table_ttl.definition_ast); - else if (storage_ast.ttl_table != nullptr) /// TTL was removed - storage_ast.ttl_table = nullptr; - - if (metadata.settings_changes) - storage_ast.set(storage_ast.settings, metadata.settings_changes); - } - } - - if (metadata.comment.empty()) - ast_create_query.reset(ast_create_query.comment); - else - ast_create_query.set(ast_create_query.comment, std::make_shared(metadata.comment)); -} - DatabaseOnDisk::DatabaseOnDisk( const String & name, diff --git a/src/Databases/DatabaseOnDisk.h b/src/Databases/DatabaseOnDisk.h index dce82c2b441..81d5bd5adcb 100644 --- a/src/Databases/DatabaseOnDisk.h +++ b/src/Databases/DatabaseOnDisk.h @@ -24,8 +24,6 @@ std::pair createTableFromAST( */ String getObjectDefinitionFromCreateQuery(const ASTPtr & query); -void applyMetadataChangesToCreateQuery(const ASTPtr & query, const StorageInMemoryMetadata & metadata); - /* Class to provide basic operations with tables when metadata is stored on disk in .sql files. */ diff --git a/src/Databases/DatabaseReplicated.cpp b/src/Databases/DatabaseReplicated.cpp index 5e9ad6c6a55..3f253ed0924 100644 --- a/src/Databases/DatabaseReplicated.cpp +++ b/src/Databases/DatabaseReplicated.cpp @@ -298,10 +298,30 @@ void DatabaseReplicated::createReplicaNodesInZooKeeper(const zkutil::ZooKeeperPt /// Write host name to replica_path, it will protect from multiple replicas with the same name auto host_id = getHostID(getContext(), db_uuid); - Coordination::Requests ops; - ops.emplace_back(zkutil::makeCreateRequest(replica_path, host_id, zkutil::CreateMode::Persistent)); - ops.emplace_back(zkutil::makeCreateRequest(replica_path + "/log_ptr", "0", zkutil::CreateMode::Persistent)); - current_zookeeper->multi(ops); + for (int attempts = 10; attempts > 0; --attempts) + { + Coordination::Stat stat; + String max_log_ptr_str = current_zookeeper->get(zookeeper_path + "/max_log_ptr", &stat); + Coordination::Requests ops; + ops.emplace_back(zkutil::makeCreateRequest(replica_path, host_id, zkutil::CreateMode::Persistent)); + ops.emplace_back(zkutil::makeCreateRequest(replica_path + "/log_ptr", "0", zkutil::CreateMode::Persistent)); + /// In addition to creating the replica nodes, we record the max_log_ptr at the instant where + /// we declared ourself as an existing replica. We'll need this during recoverLostReplica to + /// notify other nodes that issued new queries while this node was recovering. + ops.emplace_back(zkutil::makeCheckRequest(zookeeper_path + "/max_log_ptr", stat.version)); + Coordination::Responses responses; + const auto code = current_zookeeper->tryMulti(ops, responses); + if (code == Coordination::Error::ZOK) + { + max_log_ptr_at_creation = parse(max_log_ptr_str); + break; + } + else if (code == Coordination::Error::ZNODEEXISTS || attempts == 1) + { + /// If its our last attempt, or if the replica already exists, fail immediately. + zkutil::KeeperMultiException::check(code, ops, responses); + } + } createEmptyLogEntry(current_zookeeper); } @@ -621,6 +641,21 @@ void DatabaseReplicated::recoverLostReplica(const ZooKeeperPtr & current_zookeep InterpreterCreateQuery(query_ast, create_query_context).execute(); } + if (max_log_ptr_at_creation != 0) + { + /// If the replica is new and some of the queries applied during recovery + /// where issued after the replica was created, then other nodes might be + /// waiting for this node to notify them that the query was applied. + for (UInt32 ptr = max_log_ptr_at_creation; ptr <= max_log_ptr; ++ptr) + { + auto entry_name = DDLTaskBase::getLogEntryName(ptr); + auto path = fs::path(zookeeper_path) / "log" / entry_name / "finished" / getFullReplicaName(); + auto status = ExecutionStatus(0).serializeText(); + auto res = current_zookeeper->tryCreate(path, status, zkutil::CreateMode::Persistent); + if (res == Coordination::Error::ZOK) + LOG_INFO(log, "Marked recovered {} as finished", entry_name); + } + } current_zookeeper->set(replica_path + "/log_ptr", toString(max_log_ptr)); } diff --git a/src/Databases/DatabaseReplicated.h b/src/Databases/DatabaseReplicated.h index 21d927dea77..34cfb7df151 100644 --- a/src/Databases/DatabaseReplicated.h +++ b/src/Databases/DatabaseReplicated.h @@ -94,6 +94,7 @@ private: std::atomic_bool is_readonly = true; std::unique_ptr ddl_worker; + UInt32 max_log_ptr_at_creation = 0; mutable ClusterPtr cluster; }; diff --git a/src/Databases/DatabasesCommon.cpp b/src/Databases/DatabasesCommon.cpp index 8c0da37a111..e5e54f287ec 100644 --- a/src/Databases/DatabasesCommon.cpp +++ b/src/Databases/DatabasesCommon.cpp @@ -19,8 +19,72 @@ namespace ErrorCodes extern const int TABLE_ALREADY_EXISTS; extern const int UNKNOWN_TABLE; extern const int UNKNOWN_DATABASE; + extern const int NOT_IMPLEMENTED; } +void applyMetadataChangesToCreateQuery(const ASTPtr & query, const StorageInMemoryMetadata & metadata) +{ + auto & ast_create_query = query->as(); + + bool has_structure = ast_create_query.columns_list && ast_create_query.columns_list->columns; + if (ast_create_query.as_table_function && !has_structure) + throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Cannot alter table {} because it was created AS table function" + " and doesn't have structure in metadata", backQuote(ast_create_query.table)); + + assert(has_structure); + ASTPtr new_columns = InterpreterCreateQuery::formatColumns(metadata.columns); + ASTPtr new_indices = InterpreterCreateQuery::formatIndices(metadata.secondary_indices); + ASTPtr new_constraints = InterpreterCreateQuery::formatConstraints(metadata.constraints); + ASTPtr new_projections = InterpreterCreateQuery::formatProjections(metadata.projections); + + ast_create_query.columns_list->replace(ast_create_query.columns_list->columns, new_columns); + ast_create_query.columns_list->setOrReplace(ast_create_query.columns_list->indices, new_indices); + ast_create_query.columns_list->setOrReplace(ast_create_query.columns_list->constraints, new_constraints); + ast_create_query.columns_list->setOrReplace(ast_create_query.columns_list->projections, new_projections); + + if (metadata.select.select_query) + { + query->replace(ast_create_query.select, metadata.select.select_query); + } + + /// MaterializedView is one type of CREATE query without storage. + if (ast_create_query.storage) + { + ASTStorage & storage_ast = *ast_create_query.storage; + + bool is_extended_storage_def + = storage_ast.partition_by || storage_ast.primary_key || storage_ast.order_by || storage_ast.sample_by || storage_ast.settings; + + if (is_extended_storage_def) + { + if (metadata.sorting_key.definition_ast) + storage_ast.set(storage_ast.order_by, metadata.sorting_key.definition_ast); + + if (metadata.primary_key.definition_ast) + storage_ast.set(storage_ast.primary_key, metadata.primary_key.definition_ast); + + if (metadata.sampling_key.definition_ast) + storage_ast.set(storage_ast.sample_by, metadata.sampling_key.definition_ast); + else if (storage_ast.sample_by != nullptr) /// SAMPLE BY was removed + storage_ast.sample_by = nullptr; + + if (metadata.table_ttl.definition_ast) + storage_ast.set(storage_ast.ttl_table, metadata.table_ttl.definition_ast); + else if (storage_ast.ttl_table != nullptr) /// TTL was removed + storage_ast.ttl_table = nullptr; + + if (metadata.settings_changes) + storage_ast.set(storage_ast.settings, metadata.settings_changes); + } + } + + if (metadata.comment.empty()) + ast_create_query.reset(ast_create_query.comment); + else + ast_create_query.set(ast_create_query.comment, std::make_shared(metadata.comment)); +} + + DatabaseWithOwnTablesBase::DatabaseWithOwnTablesBase(const String & name_, const String & logger, ContextPtr context_) : IDatabase(name_), WithContext(context_->getGlobalContext()), log(&Poco::Logger::get(logger)) { diff --git a/src/Databases/DatabasesCommon.h b/src/Databases/DatabasesCommon.h index dfa99b632e3..59a2ddc3c41 100644 --- a/src/Databases/DatabasesCommon.h +++ b/src/Databases/DatabasesCommon.h @@ -13,6 +13,8 @@ namespace DB { +void applyMetadataChangesToCreateQuery(const ASTPtr & query, const StorageInMemoryMetadata & metadata); + class Context; /// A base class for databases that manage their own list of tables. diff --git a/src/Databases/MySQL/DatabaseMaterializedMySQL.cpp b/src/Databases/MySQL/DatabaseMaterializedMySQL.cpp index 2b4649c275a..a2e03b10d47 100644 --- a/src/Databases/MySQL/DatabaseMaterializedMySQL.cpp +++ b/src/Databases/MySQL/DatabaseMaterializedMySQL.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL diff --git a/src/Databases/MySQL/DatabaseMySQL.cpp b/src/Databases/MySQL/DatabaseMySQL.cpp index 71b0c2ec6ea..feebf33f58a 100644 --- a/src/Databases/MySQL/DatabaseMySQL.cpp +++ b/src/Databases/MySQL/DatabaseMySQL.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL # include diff --git a/src/Databases/MySQL/FetchTablesColumnsList.cpp b/src/Databases/MySQL/FetchTablesColumnsList.cpp index 851c9bc74bd..529940f713c 100644 --- a/src/Databases/MySQL/FetchTablesColumnsList.cpp +++ b/src/Databases/MySQL/FetchTablesColumnsList.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL #include diff --git a/src/Databases/MySQL/MaterializeMetadata.h b/src/Databases/MySQL/MaterializeMetadata.h index 1b933fdd373..bcb0465b61e 100644 --- a/src/Databases/MySQL/MaterializeMetadata.h +++ b/src/Databases/MySQL/MaterializeMetadata.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL diff --git a/src/Databases/MySQL/MaterializedMySQLSyncThread.cpp b/src/Databases/MySQL/MaterializedMySQLSyncThread.cpp index 86481d9fd84..d0c5d12e848 100644 --- a/src/Databases/MySQL/MaterializedMySQLSyncThread.cpp +++ b/src/Databases/MySQL/MaterializedMySQLSyncThread.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL diff --git a/src/Databases/MySQL/MaterializedMySQLSyncThread.h b/src/Databases/MySQL/MaterializedMySQLSyncThread.h index b8c985915dc..524426bada6 100644 --- a/src/Databases/MySQL/MaterializedMySQLSyncThread.h +++ b/src/Databases/MySQL/MaterializedMySQLSyncThread.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL diff --git a/src/Databases/PostgreSQL/DatabaseMaterializedPostgreSQL.h b/src/Databases/PostgreSQL/DatabaseMaterializedPostgreSQL.h index 5770187ad09..25e32fb0312 100644 --- a/src/Databases/PostgreSQL/DatabaseMaterializedPostgreSQL.h +++ b/src/Databases/PostgreSQL/DatabaseMaterializedPostgreSQL.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX diff --git a/src/Databases/PostgreSQL/DatabasePostgreSQL.cpp b/src/Databases/PostgreSQL/DatabasePostgreSQL.cpp index 430caa0f4a3..5d3493d0c82 100644 --- a/src/Databases/PostgreSQL/DatabasePostgreSQL.cpp +++ b/src/Databases/PostgreSQL/DatabasePostgreSQL.cpp @@ -63,11 +63,12 @@ String DatabasePostgreSQL::getTableNameForLogs(const String & table_name) const } -String DatabasePostgreSQL::formatTableName(const String & table_name) const +String DatabasePostgreSQL::formatTableName(const String & table_name, bool quoted) const { if (configuration.schema.empty()) - return doubleQuoteString(table_name); - return fmt::format("{}.{}", doubleQuoteString(configuration.schema), doubleQuoteString(table_name)); + return quoted ? doubleQuoteString(table_name) : table_name; + return quoted ? fmt::format("{}.{}", doubleQuoteString(configuration.schema), doubleQuoteString(table_name)) + : fmt::format("{}.{}", configuration.schema, table_name); } @@ -89,14 +90,23 @@ bool DatabasePostgreSQL::empty() const DatabaseTablesIteratorPtr DatabasePostgreSQL::getTablesIterator(ContextPtr local_context, const FilterByNameFunction & /* filter_by_table_name */) const { std::lock_guard lock(mutex); - Tables tables; - auto connection_holder = pool->get(); - auto table_names = fetchPostgreSQLTablesList(connection_holder->get(), configuration.schema); - for (const auto & table_name : table_names) - if (!detached_or_dropped.count(table_name)) - tables[table_name] = fetchTable(table_name, local_context, true); + /// Do not allow to throw here, because this might be, for example, a query to system.tables. + /// It must not fail on case of some postgres error. + try + { + auto connection_holder = pool->get(); + auto table_names = fetchPostgreSQLTablesList(connection_holder->get(), configuration.schema); + + for (const auto & table_name : table_names) + if (!detached_or_dropped.count(table_name)) + tables[table_name] = fetchTable(table_name, local_context, true); + } + catch (...) + { + tryLogCurrentException(__PRETTY_FUNCTION__); + } return std::make_unique(tables, database_name); } @@ -170,7 +180,7 @@ StoragePtr DatabasePostgreSQL::fetchTable(const String & table_name, ContextPtr, return StoragePtr{}; auto connection_holder = pool->get(); - auto columns = fetchPostgreSQLTableStructure(connection_holder->get(), formatTableName(table_name)).columns; + auto columns = fetchPostgreSQLTableStructure(connection_holder->get(), table_name, configuration.schema).columns; if (!columns) return StoragePtr{}; diff --git a/src/Databases/PostgreSQL/DatabasePostgreSQL.h b/src/Databases/PostgreSQL/DatabasePostgreSQL.h index 0f66a6c7b90..f801f9585d6 100644 --- a/src/Databases/PostgreSQL/DatabasePostgreSQL.h +++ b/src/Databases/PostgreSQL/DatabasePostgreSQL.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX @@ -79,7 +77,7 @@ private: String getTableNameForLogs(const String & table_name) const; - String formatTableName(const String & table_name) const; + String formatTableName(const String & table_name, bool quoted = true) const; bool checkPostgresTable(const String & table_name) const; diff --git a/src/Databases/PostgreSQL/fetchPostgreSQLTableStructure.cpp b/src/Databases/PostgreSQL/fetchPostgreSQLTableStructure.cpp index 5ac4180ec27..16e7ce89579 100644 --- a/src/Databases/PostgreSQL/fetchPostgreSQLTableStructure.cpp +++ b/src/Databases/PostgreSQL/fetchPostgreSQLTableStructure.cpp @@ -135,7 +135,7 @@ static DataTypePtr convertPostgreSQLDataType(String & type, Fn auto && r template std::shared_ptr readNamesAndTypesList( - T & tx, const String & postgres_table_name, const String & query, bool use_nulls, bool only_names_and_types) + T & tx, const String & postgres_table, const String & query, bool use_nulls, bool only_names_and_types) { auto columns = NamesAndTypes(); @@ -180,7 +180,7 @@ std::shared_ptr readNamesAndTypesList( /// All rows must contain the same number of dimensions, so limit 1 is ok. If number of dimensions in all rows is not the same - /// such arrays are not able to be used as ClickHouse Array at all. - pqxx::result result{tx.exec(fmt::format("SELECT array_ndims({}) FROM {} LIMIT 1", name_and_type.name, postgres_table_name))}; + pqxx::result result{tx.exec(fmt::format("SELECT array_ndims({}) FROM {} LIMIT 1", name_and_type.name, postgres_table))}; auto dimensions = result[0][0].as(); /// It is always 1d array if it is in recheck. @@ -191,10 +191,13 @@ std::shared_ptr readNamesAndTypesList( columns[i] = NameAndTypePair(name_and_type.name, type); } } - catch (const pqxx::undefined_table &) { - throw Exception(ErrorCodes::UNKNOWN_TABLE, "PostgreSQL table {} does not exist", postgres_table_name); + throw Exception(ErrorCodes::UNKNOWN_TABLE, "PostgreSQL table {} does not exist", postgres_table); + } + catch (const pqxx::syntax_error & e) + { + throw Exception(ErrorCodes::BAD_ARGUMENTS, "Error: {} (in query: {})", e.what(), query); } catch (Exception & e) { @@ -208,18 +211,27 @@ std::shared_ptr readNamesAndTypesList( template PostgreSQLTableStructure fetchPostgreSQLTableStructure( - T & tx, const String & postgres_table_name, bool use_nulls, bool with_primary_key, bool with_replica_identity_index) + T & tx, const String & postgres_table, const String & postgres_schema, bool use_nulls, bool with_primary_key, bool with_replica_identity_index) { PostgreSQLTableStructure table; + auto where = fmt::format("relname = {}", quoteString(postgres_table)); + if (postgres_schema.empty()) + where += " AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public')"; + else + where += fmt::format(" AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = {})", quoteString(postgres_schema)); + std::string query = fmt::format( "SELECT attname AS name, format_type(atttypid, atttypmod) AS type, " "attnotnull AS not_null, attndims AS dims " "FROM pg_attribute " - "WHERE attrelid = {}::regclass " - "AND NOT attisdropped AND attnum > 0", quoteString(postgres_table_name)); + "WHERE attrelid = (SELECT oid FROM pg_class WHERE {}) " + "AND NOT attisdropped AND attnum > 0", where); - table.columns = readNamesAndTypesList(tx, postgres_table_name, query, use_nulls, false); + table.columns = readNamesAndTypesList(tx, postgres_table, query, use_nulls, false); + + if (!table.columns) + throw Exception(ErrorCodes::UNKNOWN_TABLE, "PostgreSQL table {} does not exist", postgres_table); if (with_primary_key) { @@ -229,9 +241,9 @@ PostgreSQLTableStructure fetchPostgreSQLTableStructure( "FROM pg_index i " "JOIN pg_attribute a ON a.attrelid = i.indrelid " "AND a.attnum = ANY(i.indkey) " - "WHERE i.indrelid = {}::regclass AND i.indisprimary", quoteString(postgres_table_name)); + "WHERE attrelid = (SELECT oid FROM pg_class WHERE {}) AND i.indisprimary", where); - table.primary_key_columns = readNamesAndTypesList(tx, postgres_table_name, query, use_nulls, true); + table.primary_key_columns = readNamesAndTypesList(tx, postgres_table, query, use_nulls, true); } if (with_replica_identity_index && !table.primary_key_columns) @@ -254,19 +266,19 @@ PostgreSQLTableStructure fetchPostgreSQLTableStructure( "and t.relname = {} " /// Connection is already done to a needed database, only table name is needed. "and ix.indisreplident = 't' " /// index is is replica identity index "ORDER BY a.attname", /// column names - quoteString(postgres_table_name)); + quoteString(postgres_table)); - table.replica_identity_columns = readNamesAndTypesList(tx, postgres_table_name, query, use_nulls, true); + table.replica_identity_columns = readNamesAndTypesList(tx, postgres_table, query, use_nulls, true); } return table; } -PostgreSQLTableStructure fetchPostgreSQLTableStructure(pqxx::connection & connection, const String & postgres_table_name, bool use_nulls) +PostgreSQLTableStructure fetchPostgreSQLTableStructure(pqxx::connection & connection, const String & postgres_table, const String & postgres_schema, bool use_nulls) { pqxx::ReadTransaction tx(connection); - auto result = fetchPostgreSQLTableStructure(tx, postgres_table_name, use_nulls, false, false); + auto result = fetchPostgreSQLTableStructure(tx, postgres_table, postgres_schema, use_nulls, false, false); tx.commit(); return result; } @@ -283,18 +295,18 @@ std::set fetchPostgreSQLTablesList(pqxx::connection & connection, const template PostgreSQLTableStructure fetchPostgreSQLTableStructure( - pqxx::ReadTransaction & tx, const String & postgres_table_name, bool use_nulls, - bool with_primary_key, bool with_replica_identity_index); + pqxx::ReadTransaction & tx, const String & postgres_table, const String & postgres_schema, + bool use_nulls, bool with_primary_key, bool with_replica_identity_index); template PostgreSQLTableStructure fetchPostgreSQLTableStructure( - pqxx::ReplicationTransaction & tx, const String & postgres_table_name, bool use_nulls, - bool with_primary_key, bool with_replica_identity_index); + pqxx::ReplicationTransaction & tx, const String & postgres_table, const String & postgres_schema, + bool use_nulls, bool with_primary_key, bool with_replica_identity_index); template PostgreSQLTableStructure fetchPostgreSQLTableStructure( - pqxx::nontransaction & tx, const String & postgres_table_name, bool use_nulls, - bool with_primary_key, bool with_replica_identity_index); + pqxx::nontransaction & tx, const String & postgres_table, const String & postrges_schema, + bool use_nulls, bool with_primary_key, bool with_replica_identity_index); template std::set fetchPostgreSQLTablesList(pqxx::work & tx, const String & postgres_schema); diff --git a/src/Databases/PostgreSQL/fetchPostgreSQLTableStructure.h b/src/Databases/PostgreSQL/fetchPostgreSQLTableStructure.h index 62f85e7f414..19871234e28 100644 --- a/src/Databases/PostgreSQL/fetchPostgreSQLTableStructure.h +++ b/src/Databases/PostgreSQL/fetchPostgreSQLTableStructure.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX #include @@ -24,11 +22,11 @@ using PostgreSQLTableStructurePtr = std::unique_ptr; std::set fetchPostgreSQLTablesList(pqxx::connection & connection, const String & postgres_schema); PostgreSQLTableStructure fetchPostgreSQLTableStructure( - pqxx::connection & connection, const String & postgres_table_name, bool use_nulls = true); + pqxx::connection & connection, const String & postgres_table, const String & postgres_schema, bool use_nulls = true); template PostgreSQLTableStructure fetchPostgreSQLTableStructure( - T & tx, const String & postgres_table_name, bool use_nulls = true, + T & tx, const String & postgres_table, const String & postgres_schema, bool use_nulls = true, bool with_primary_key = false, bool with_replica_identity_index = false); template diff --git a/src/Databases/SQLite/DatabaseSQLite.h b/src/Databases/SQLite/DatabaseSQLite.h index 18a571dd703..d0b8d582844 100644 --- a/src/Databases/SQLite/DatabaseSQLite.h +++ b/src/Databases/SQLite/DatabaseSQLite.h @@ -1,15 +1,13 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_SQLITE #include #include #include -#include // Y_IGNORE +#include namespace DB diff --git a/src/Databases/SQLite/SQLiteUtils.h b/src/Databases/SQLite/SQLiteUtils.h index 35f00904d0d..09119b3f145 100644 --- a/src/Databases/SQLite/SQLiteUtils.h +++ b/src/Databases/SQLite/SQLiteUtils.h @@ -1,13 +1,11 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_SQLITE #include #include -#include // Y_IGNORE +#include namespace DB diff --git a/src/Databases/SQLite/fetchSQLiteTableStructure.cpp b/src/Databases/SQLite/fetchSQLiteTableStructure.cpp index c4acf5b3a3a..32341a36f3e 100644 --- a/src/Databases/SQLite/fetchSQLiteTableStructure.cpp +++ b/src/Databases/SQLite/fetchSQLiteTableStructure.cpp @@ -13,6 +13,10 @@ #include #include +#include + + +using namespace std::literals; namespace DB { @@ -58,15 +62,15 @@ std::shared_ptr fetchSQLiteTableStructure(sqlite3 * connectio for (int i = 0; i < col_num; ++i) { - if (strcmp(col_names[i], "name") == 0) + if (col_names[i] == "name"sv) { name_and_type.name = data_by_col[i]; } - else if (strcmp(col_names[i], "type") == 0) + else if (col_names[i] == "type"sv) { name_and_type.type = convertSQLiteDataType(data_by_col[i]); } - else if (strcmp(col_names[i], "notnull") == 0) + else if (col_names[i] == "notnull"sv) { is_nullable = (data_by_col[i][0] == '0'); } diff --git a/src/Databases/SQLite/fetchSQLiteTableStructure.h b/src/Databases/SQLite/fetchSQLiteTableStructure.h index 80f50173e5e..dbdf35be4bb 100644 --- a/src/Databases/SQLite/fetchSQLiteTableStructure.h +++ b/src/Databases/SQLite/fetchSQLiteTableStructure.h @@ -1,13 +1,11 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_SQLITE #include -#include // Y_IGNORE +#include namespace DB diff --git a/src/Dictionaries/CacheDictionary.cpp b/src/Dictionaries/CacheDictionary.cpp index f7e9ce6624c..723457fba5b 100644 --- a/src/Dictionaries/CacheDictionary.cpp +++ b/src/Dictionaries/CacheDictionary.cpp @@ -484,24 +484,37 @@ MutableColumns CacheDictionary::aggregateColumns( } template -Pipe CacheDictionary::read(const Names & column_names, size_t max_block_size) const +Pipe CacheDictionary::read(const Names & column_names, size_t max_block_size, size_t num_streams) const { - Pipe pipe; - std::optional data; + ColumnsWithTypeAndName key_columns; + { /// Write lock on storage const ProfilingScopedWriteRWLock write_lock{rw_lock, ProfileEvents::DictCacheLockWriteNs}; - if constexpr (dictionary_key_type == DictionaryKeyType::Simple) - data.emplace(shared_from_this(), cache_storage_ptr->getCachedSimpleKeys(), column_names); + { + auto keys = cache_storage_ptr->getCachedSimpleKeys(); + key_columns = {ColumnWithTypeAndName(getColumnFromPODArray(keys), std::make_shared(), dict_struct.id->name)}; + } else { auto keys = cache_storage_ptr->getCachedComplexKeys(); - data.emplace(shared_from_this(), keys, column_names); + key_columns = deserializeColumnsWithTypeAndNameFromKeys(dict_struct, keys, 0, keys.size()); } } - return Pipe(std::make_shared(std::move(*data), max_block_size)); + std::shared_ptr dictionary = shared_from_this(); + auto coordinator = std::make_shared(dictionary, column_names, std::move(key_columns), max_block_size); + + Pipes pipes; + + for (size_t i = 0; i < num_streams; ++i) + { + auto source = std::make_shared(coordinator); + pipes.emplace_back(Pipe(std::move(source))); + } + + return Pipe::unitePipes(std::move(pipes)); } template diff --git a/src/Dictionaries/CacheDictionary.h b/src/Dictionaries/CacheDictionary.h index 8b3b4dbd30f..d2c2ed9a212 100644 --- a/src/Dictionaries/CacheDictionary.h +++ b/src/Dictionaries/CacheDictionary.h @@ -136,7 +136,7 @@ public: ColumnUInt8::Ptr hasKeys(const Columns & key_columns, const DataTypes & key_types) const override; - Pipe read(const Names & column_names, size_t max_block_size) const override; + Pipe read(const Names & column_names, size_t max_block_size, size_t num_streams) const override; std::exception_ptr getLastException() const override; diff --git a/src/Dictionaries/CassandraHelpers.h b/src/Dictionaries/CassandraHelpers.h index 8a00e372c96..30111e11686 100644 --- a/src/Dictionaries/CassandraHelpers.h +++ b/src/Dictionaries/CassandraHelpers.h @@ -1,11 +1,9 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_CASSANDRA -#include // Y_IGNORE +#include #include #include diff --git a/src/Dictionaries/CassandraSource.cpp b/src/Dictionaries/CassandraSource.cpp index 1ebacdb2c2f..5b84936a137 100644 --- a/src/Dictionaries/CassandraSource.cpp +++ b/src/Dictionaries/CassandraSource.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_CASSANDRA diff --git a/src/Dictionaries/DictionaryHelpers.h b/src/Dictionaries/DictionaryHelpers.h index 65c40898983..26fbb6f193f 100644 --- a/src/Dictionaries/DictionaryHelpers.h +++ b/src/Dictionaries/DictionaryHelpers.h @@ -668,6 +668,16 @@ static ColumnPtr getColumnFromPODArray(const PaddedPODArray & array) return column_vector; } +template +static ColumnPtr getColumnFromPODArray(const PaddedPODArray & array, size_t start, size_t length) +{ + auto column_vector = ColumnVector::create(); + column_vector->getData().reserve(length); + column_vector->getData().insert(array.begin() + start, array.begin() + start + length); + + return column_vector; +} + } diff --git a/src/Dictionaries/DictionarySource.cpp b/src/Dictionaries/DictionarySource.cpp index a164543e1ff..fa25dab6115 100644 --- a/src/Dictionaries/DictionarySource.cpp +++ b/src/Dictionaries/DictionarySource.cpp @@ -7,155 +7,178 @@ namespace DB namespace ErrorCodes { extern const int LOGICAL_ERROR; + extern const int NO_SUCH_COLUMN_IN_TABLE; } -DictionarySourceData::DictionarySourceData( - std::shared_ptr dictionary_, PaddedPODArray && ids_, const Names & column_names_) - : num_rows(ids_.size()) - , dictionary(dictionary_) - , column_names(column_names_.begin(), column_names_.end()) - , ids(std::move(ids_)) - , key_type(DictionaryInputStreamKeyType::Id) +bool DictionarySourceCoordinator::getKeyColumnsNextRangeToRead(ColumnsWithTypeAndName & key_columns, ColumnsWithTypeAndName & data_columns) { + size_t read_block_index = parallel_read_block_index++; + + size_t start = read_block_index * max_block_size; + size_t end = (read_block_index + 1) * max_block_size; + + size_t keys_size = key_columns_with_type[0].column->size(); + + if (start >= keys_size) + return false; + + end = std::min(end, keys_size); + size_t length = end - start; + + key_columns = cutColumns(key_columns_with_type, start, length); + data_columns = cutColumns(data_columns_with_type, start, length); + + return true; } -DictionarySourceData::DictionarySourceData( - std::shared_ptr dictionary_, - const PaddedPODArray & keys, - const Names & column_names_) - : num_rows(keys.size()) - , dictionary(dictionary_) - , column_names(column_names_.begin(), column_names_.end()) - , key_type(DictionaryInputStreamKeyType::ComplexKey) +void DictionarySourceCoordinator::initialize(const Names & column_names) { - const DictionaryStructure & dictionary_structure = dictionary->getStructure(); - key_columns = deserializeColumnsWithTypeAndNameFromKeys(dictionary_structure, keys, 0, keys.size()); -} + ColumnsWithTypeAndName columns_with_type; -DictionarySourceData::DictionarySourceData( - std::shared_ptr dictionary_, - const Columns & data_columns_, - const Names & column_names_, - GetColumnsFunction && get_key_columns_function_, - GetColumnsFunction && get_view_columns_function_) - : num_rows(data_columns_.front()->size()) - , dictionary(dictionary_) - , column_names(column_names_.begin(), column_names_.end()) - , data_columns(data_columns_) - , get_key_columns_function(std::move(get_key_columns_function_)) - , get_view_columns_function(std::move(get_view_columns_function_)) - , key_type(DictionaryInputStreamKeyType::Callback) -{ -} + const auto & dictionary_structure = dictionary->getStructure(); -Block DictionarySourceData::getBlock(size_t start, size_t length) const -{ - /// TODO: Rewrite - switch (key_type) + for (const auto & column_name : column_names) { - case DictionaryInputStreamKeyType::ComplexKey: + ColumnWithTypeAndName column_with_type; + column_with_type.name = column_name; + + auto it = dictionary_structure.attribute_name_to_index.find(column_name); + if (it == dictionary_structure.attribute_name_to_index.end()) { - Columns columns; - ColumnsWithTypeAndName view_columns; - columns.reserve(key_columns.size()); - for (const auto & key_column : key_columns) + if (dictionary_structure.id.has_value() && column_name == dictionary_structure.id->name) { - ColumnPtr column = key_column.column->cut(start, length); - columns.emplace_back(column); - view_columns.emplace_back(column, key_column.type, key_column.name); + column_with_type.type = std::make_shared(); } - return fillBlock({}, columns, {}, std::move(view_columns)); + else if (dictionary_structure.range_min.has_value() && column_name == dictionary_structure.range_min->name) + { + column_with_type.type = dictionary_structure.range_min->type; + } + else if (dictionary_structure.range_max.has_value() && column_name == dictionary_structure.range_max->name) + { + column_with_type.type = dictionary_structure.range_max->type; + } + else if (dictionary_structure.key.has_value()) + { + const auto & dictionary_key_attributes = *dictionary_structure.key; + for (const auto & attribute : dictionary_key_attributes) + { + if (column_name == attribute.name) + { + column_with_type.type = attribute.type; + break; + } + } + } + } + else + { + const auto & attribute = dictionary_structure.attributes[it->second]; + attributes_names_to_read.emplace_back(attribute.name); + attributes_types_to_read.emplace_back(attribute.type); + attributes_default_values_columns.emplace_back(nullptr); + + column_with_type.type = attribute.type; } - case DictionaryInputStreamKeyType::Id: - { - PaddedPODArray ids_to_fill(ids.begin() + start, ids.begin() + start + length); - return fillBlock(ids_to_fill, {}, {}, {}); - } + if (!column_with_type.type) + throw Exception(ErrorCodes::NO_SUCH_COLUMN_IN_TABLE, "No such column name {} in dictionary {}", + column_name, + dictionary->getDictionaryID().getNameForLogs()); - case DictionaryInputStreamKeyType::Callback: - { - Columns columns; - columns.reserve(data_columns.size()); - for (const auto & data_column : data_columns) - columns.push_back(data_column->cut(start, length)); - const DictionaryStructure & dictionaty_structure = dictionary->getStructure(); - const auto & attributes = *dictionaty_structure.key; - ColumnsWithTypeAndName keys_with_type_and_name = get_key_columns_function(columns, attributes); - ColumnsWithTypeAndName view_with_type_and_name = get_view_columns_function(columns, attributes); - DataTypes types; - columns.clear(); - for (const auto & key_column : keys_with_type_and_name) - { - columns.push_back(key_column.column); - types.push_back(key_column.type); - } - return fillBlock({}, columns, types, std::move(view_with_type_and_name)); - } + column_with_type.column = column_with_type.type->createColumn(); + columns_with_type.emplace_back(std::move(column_with_type)); } - throw Exception(ErrorCodes::LOGICAL_ERROR, "Unexpected DictionaryInputStreamKeyType."); + header = Block(std::move(columns_with_type)); } -Block DictionarySourceData::fillBlock( - const PaddedPODArray & ids_to_fill, - const Columns & keys, - const DataTypes & types, - ColumnsWithTypeAndName && view) const +ColumnsWithTypeAndName +DictionarySourceCoordinator::cutColumns(const ColumnsWithTypeAndName & columns_with_type, size_t start, size_t length) { - DataTypes data_types = types; - ColumnsWithTypeAndName block_columns; + ColumnsWithTypeAndName result; + result.reserve(columns_with_type.size()); - data_types.reserve(keys.size()); - const DictionaryStructure & dictionary_structure = dictionary->getStructure(); - if (data_types.empty() && dictionary_structure.key) - for (const auto & key : *dictionary_structure.key) - data_types.push_back(key.type); - - for (const auto & column : view) - if (column_names.find(column.name) != column_names.end()) - block_columns.push_back(column); - - const DictionaryStructure & structure = dictionary->getStructure(); - ColumnPtr ids_column = getColumnFromPODArray(ids_to_fill); - - if (structure.id && column_names.find(structure.id->name) != column_names.end()) + for (const auto & column_with_type : columns_with_type) { - block_columns.emplace_back(ids_column, std::make_shared(), structure.id->name); + ColumnWithTypeAndName result_column_with_type; + + result_column_with_type.column = column_with_type.column->cut(start, length); + result_column_with_type.type = column_with_type.type; + result_column_with_type.name = column_with_type.name; + + result.emplace_back(std::move(result_column_with_type)); } - auto dictionary_key_type = dictionary->getKeyType(); + return result; +} - for (const auto & attribute : structure.attributes) + +Chunk DictionarySource::generate() +{ + ColumnsWithTypeAndName key_columns_to_read; + ColumnsWithTypeAndName data_columns; + + if (!coordinator->getKeyColumnsNextRangeToRead(key_columns_to_read, data_columns)) + return {}; + + const auto & header = coordinator->getHeader(); + + std::vector key_columns; + std::vector key_types; + + key_columns.reserve(key_columns_to_read.size()); + key_types.reserve(key_columns_to_read.size()); + + std::unordered_map name_to_column; + + for (const auto & key_column_to_read : key_columns_to_read) { - if (column_names.find(attribute.name) != column_names.end()) - { - ColumnPtr column; + key_columns.emplace_back(key_column_to_read.column); + key_types.emplace_back(key_column_to_read.type); - if (dictionary_key_type == DictionaryKeyType::Simple) - { - column = dictionary->getColumn( - attribute.name, - attribute.type, - {ids_column}, - {std::make_shared()}, - nullptr /* default_values_column */); - } - else - { - column = dictionary->getColumn( - attribute.name, - attribute.type, - keys, - data_types, - nullptr /* default_values_column*/); - } - - block_columns.emplace_back(column, attribute.type, attribute.name); - } + if (header.has(key_column_to_read.name)) + name_to_column.emplace(key_column_to_read.name, key_column_to_read.column); } - return Block(block_columns); + for (const auto & data_column : data_columns) + { + if (header.has(data_column.name)) + name_to_column.emplace(data_column.name, data_column.column); + } + + const auto & attributes_names_to_read = coordinator->getAttributesNamesToRead(); + const auto & attributes_types_to_read = coordinator->getAttributesTypesToRead(); + const auto & attributes_default_values_columns = coordinator->getAttributesDefaultValuesColumns(); + + const auto & dictionary = coordinator->getDictionary(); + auto attributes_columns = dictionary->getColumns( + attributes_names_to_read, + attributes_types_to_read, + key_columns, + key_types, + attributes_default_values_columns); + + for (size_t i = 0; i < attributes_names_to_read.size(); ++i) + { + const auto & attribute_name = attributes_names_to_read[i]; + name_to_column.emplace(attribute_name, attributes_columns[i]); + } + + std::vector result_columns; + result_columns.reserve(header.columns()); + + for (const auto & column_with_type : header) + { + const auto & header_name = column_with_type.name; + auto it = name_to_column.find(header_name); + if (it == name_to_column.end()) + throw Exception(ErrorCodes::LOGICAL_ERROR, "Column name {} not found in result columns", header_name); + + result_columns.emplace_back(it->second); + } + + size_t rows_size = result_columns[0]->size(); + return Chunk(result_columns, rows_size); } } diff --git a/src/Dictionaries/DictionarySource.h b/src/Dictionaries/DictionarySource.h index cd4b3120ac0..d1851b73a21 100644 --- a/src/Dictionaries/DictionarySource.h +++ b/src/Dictionaries/DictionarySource.h @@ -7,82 +7,91 @@ #include #include #include +#include #include #include -#include namespace DB { -class DictionarySourceData +class DictionarySourceCoordinator { public: - DictionarySourceData( - std::shared_ptr dictionary, - PaddedPODArray && ids, - const Names & column_names); - DictionarySourceData( - std::shared_ptr dictionary, - const PaddedPODArray & keys, - const Names & column_names); - - using GetColumnsFunction = std::function & attributes)>; - - // Used to separate key columns format for storage and view. - // Calls get_key_columns_function to get key column for dictionary get function call - // and get_view_columns_function to get key representation. - // Now used in trie dictionary, where columns are stored as ip and mask, and are showed as string - DictionarySourceData( - std::shared_ptr dictionary, - const Columns & data_columns, + explicit DictionarySourceCoordinator( + std::shared_ptr dictionary_, const Names & column_names, - GetColumnsFunction && get_key_columns_function, - GetColumnsFunction && get_view_columns_function); + ColumnsWithTypeAndName && key_columns_with_type_, + size_t max_block_size_) + : dictionary(std::move(dictionary_)) + , key_columns_with_type(std::move(key_columns_with_type_)) + , max_block_size(max_block_size_) + { + initialize(column_names); + } - Block getBlock(size_t start, size_t length) const; - size_t getNumRows() const { return num_rows; } + explicit DictionarySourceCoordinator( + std::shared_ptr dictionary_, + const Names & column_names, + ColumnsWithTypeAndName && key_columns_with_type_, + ColumnsWithTypeAndName && data_columns_with_type_, + size_t max_block_size_) + : dictionary(std::move(dictionary_)) + , key_columns_with_type(std::move(key_columns_with_type_)) + , data_columns_with_type(std::move(data_columns_with_type_)) + , max_block_size(max_block_size_) + { + initialize(column_names); + } + + bool getKeyColumnsNextRangeToRead(ColumnsWithTypeAndName & key_columns, ColumnsWithTypeAndName & data_columns); + + const Block & getHeader() const { return header; } + + const std::vector & getAttributesNamesToRead() const { return attributes_names_to_read; } + + const std::vector & getAttributesTypesToRead() const { return attributes_types_to_read; } + + const std::vector & getAttributesDefaultValuesColumns() const { return attributes_default_values_columns; } + + const std::shared_ptr & getDictionary() const { return dictionary; } private: - Block fillBlock( - const PaddedPODArray & ids_to_fill, - const Columns & keys, - const DataTypes & types, - ColumnsWithTypeAndName && view) const; + void initialize(const Names & column_names); + + static ColumnsWithTypeAndName cutColumns(const ColumnsWithTypeAndName & columns_with_type, size_t start, size_t length); - const size_t num_rows; std::shared_ptr dictionary; - std::unordered_set column_names; - PaddedPODArray ids; - ColumnsWithTypeAndName key_columns; - Columns data_columns; - GetColumnsFunction get_key_columns_function; - GetColumnsFunction get_view_columns_function; + ColumnsWithTypeAndName key_columns_with_type; + ColumnsWithTypeAndName data_columns_with_type; - enum class DictionaryInputStreamKeyType - { - Id, - ComplexKey, - Callback - }; + Block header; - DictionaryInputStreamKeyType key_type; + std::vector attributes_names_to_read; + std::vector attributes_types_to_read; + std::vector attributes_default_values_columns; + + const size_t max_block_size; + std::atomic parallel_read_block_index = 0; }; -class DictionarySource final : public DictionarySourceBase +class DictionarySource : public SourceWithProgress { public: - DictionarySource(DictionarySourceData data_, UInt64 max_block_size) - : DictionarySourceBase(data_.getBlock(0, 0), data_.getNumRows(), max_block_size) - , data(std::move(data_)) - {} + explicit DictionarySource(std::shared_ptr coordinator_) + : SourceWithProgress(coordinator_->getHeader()), coordinator(std::move(coordinator_)) + { + } + +private: String getName() const override { return "DictionarySource"; } - Block getBlock(size_t start, size_t length) const override { return data.getBlock(start, length); } - DictionarySourceData data; + Chunk generate() override; + + std::shared_ptr coordinator; }; } diff --git a/src/Dictionaries/DictionarySourceBase.cpp b/src/Dictionaries/DictionarySourceBase.cpp deleted file mode 100644 index cc420b33144..00000000000 --- a/src/Dictionaries/DictionarySourceBase.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "DictionarySourceBase.h" - -namespace DB -{ -DictionarySourceBase::DictionarySourceBase(const Block & header, size_t rows_count_, size_t max_block_size_) - : SourceWithProgress(header), rows_count(rows_count_), max_block_size(max_block_size_) -{ -} - -Chunk DictionarySourceBase::generate() -{ - if (next_row == rows_count) - return {}; - - size_t size = std::min(max_block_size, rows_count - next_row); - auto block = getBlock(next_row, size); - next_row += size; - return Chunk(block.getColumns(), size); -} - -} diff --git a/src/Dictionaries/DictionarySourceBase.h b/src/Dictionaries/DictionarySourceBase.h deleted file mode 100644 index 1533cba82f6..00000000000 --- a/src/Dictionaries/DictionarySourceBase.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include - -namespace DB -{ -class DictionarySourceBase : public SourceWithProgress -{ -protected: - DictionarySourceBase(const Block & header, size_t rows_count_, size_t max_block_size_); - - virtual Block getBlock(size_t start, size_t length) const = 0; - -private: - const size_t rows_count; - const size_t max_block_size; - size_t next_row = 0; - - Chunk generate() override; -}; - -} diff --git a/src/Dictionaries/DirectDictionary.cpp b/src/Dictionaries/DirectDictionary.cpp index f4f33439638..551f485e5bb 100644 --- a/src/Dictionaries/DirectDictionary.cpp +++ b/src/Dictionaries/DirectDictionary.cpp @@ -290,7 +290,7 @@ Pipe DirectDictionary::getSourceBlockInputStream( } template -Pipe DirectDictionary::read(const Names & /* column_names */, size_t /* max_block_size */) const +Pipe DirectDictionary::read(const Names & /* column_names */, size_t /* max_block_size */, size_t /* num_streams */) const { return source_ptr->loadAll(); } diff --git a/src/Dictionaries/DirectDictionary.h b/src/Dictionaries/DirectDictionary.h index ebe5f5fbbc7..edf4c8d1d9a 100644 --- a/src/Dictionaries/DirectDictionary.h +++ b/src/Dictionaries/DirectDictionary.h @@ -96,7 +96,7 @@ public: ColumnPtr in_key_column, const DataTypePtr & key_type) const override; - Pipe read(const Names & column_names, size_t max_block_size) const override; + Pipe read(const Names & column_names, size_t max_block_size, size_t num_streams) const override; private: Pipe getSourceBlockInputStream(const Columns & key_columns, const PaddedPODArray & requested_keys) const; diff --git a/src/Dictionaries/FlatDictionary.cpp b/src/Dictionaries/FlatDictionary.cpp index a7cf69bb14d..b6c5f10564b 100644 --- a/src/Dictionaries/FlatDictionary.cpp +++ b/src/Dictionaries/FlatDictionary.cpp @@ -538,7 +538,7 @@ void FlatDictionary::setAttributeValue(Attribute & attribute, const UInt64 key, callOnDictionaryAttributeType(attribute.type, type_call); } -Pipe FlatDictionary::read(const Names & column_names, size_t max_block_size) const +Pipe FlatDictionary::read(const Names & column_names, size_t max_block_size, size_t num_streams) const { const auto keys_count = loaded_keys.size(); @@ -549,8 +549,20 @@ Pipe FlatDictionary::read(const Names & column_names, size_t max_block_size) con if (loaded_keys[key_index]) keys.push_back(key_index); - return Pipe(std::make_shared( - DictionarySourceData(shared_from_this(), std::move(keys), column_names), max_block_size)); + ColumnsWithTypeAndName key_columns = {ColumnWithTypeAndName(getColumnFromPODArray(keys), std::make_shared(), dict_struct.id->name)}; + + std::shared_ptr dictionary = shared_from_this(); + auto coordinator = std::make_shared(dictionary, column_names, std::move(key_columns), max_block_size); + + Pipes pipes; + + for (size_t i = 0; i < num_streams; ++i) + { + auto source = std::make_shared(coordinator); + pipes.emplace_back(Pipe(std::move(source))); + } + + return Pipe::unitePipes(std::move(pipes)); } void registerDictionaryFlat(DictionaryFactory & factory) diff --git a/src/Dictionaries/FlatDictionary.h b/src/Dictionaries/FlatDictionary.h index 196194ddb21..5c3a1d634d8 100644 --- a/src/Dictionaries/FlatDictionary.h +++ b/src/Dictionaries/FlatDictionary.h @@ -97,7 +97,7 @@ public: const DataTypePtr & key_type, size_t level) const override; - Pipe read(const Names & column_names, size_t max_block_size) const override; + Pipe read(const Names & column_names, size_t max_block_size, size_t num_streams) const override; private: template diff --git a/src/Dictionaries/HTTPDictionarySource.cpp b/src/Dictionaries/HTTPDictionarySource.cpp index 26ebde36f7d..29f503fc160 100644 --- a/src/Dictionaries/HTTPDictionarySource.cpp +++ b/src/Dictionaries/HTTPDictionarySource.cpp @@ -101,6 +101,7 @@ Pipe HTTPDictionarySource::loadAll() 0, credentials, DBMS_DEFAULT_BUFFER_SIZE, + context->getReadSettings(), configuration.header_entries); return createWrappedBuffer(std::move(in_ptr)); @@ -119,6 +120,7 @@ Pipe HTTPDictionarySource::loadUpdatedAll() 0, credentials, DBMS_DEFAULT_BUFFER_SIZE, + context->getReadSettings(), configuration.header_entries); return createWrappedBuffer(std::move(in_ptr)); @@ -146,6 +148,7 @@ Pipe HTTPDictionarySource::loadIds(const std::vector & ids) 0, credentials, DBMS_DEFAULT_BUFFER_SIZE, + context->getReadSettings(), configuration.header_entries); return createWrappedBuffer(std::move(in_ptr)); @@ -173,6 +176,7 @@ Pipe HTTPDictionarySource::loadKeys(const Columns & key_columns, const std::vect 0, credentials, DBMS_DEFAULT_BUFFER_SIZE, + context->getReadSettings(), configuration.header_entries); return createWrappedBuffer(std::move(in_ptr)); diff --git a/src/Dictionaries/HashedArrayDictionary.cpp b/src/Dictionaries/HashedArrayDictionary.cpp index 3c02f377c3e..a92f8bc1191 100644 --- a/src/Dictionaries/HashedArrayDictionary.cpp +++ b/src/Dictionaries/HashedArrayDictionary.cpp @@ -55,95 +55,93 @@ ColumnPtr HashedArrayDictionary::getColumn( DictionaryKeysArenaHolder arena_holder; DictionaryKeysExtractor extractor(key_columns, arena_holder.getComplexKeyArena()); - const size_t size = extractor.getKeysSize(); + const size_t keys_size = extractor.getKeysSize(); const auto & dictionary_attribute = dict_struct.getAttribute(attribute_name, result_type); const size_t attribute_index = dict_struct.attribute_name_to_index.find(attribute_name)->second; auto & attribute = attributes[attribute_index]; - bool is_attribute_nullable = attribute.is_index_null.has_value(); + return getAttributeColumn(attribute, dictionary_attribute, keys_size, default_values_column, extractor); +} - ColumnUInt8::MutablePtr col_null_map_to; - ColumnUInt8::Container * vec_null_map_to = nullptr; - if (attribute.is_index_null) +template +Columns HashedArrayDictionary::getColumns( + const Strings & attribute_names, + const DataTypes & result_types, + const Columns & key_columns, + const DataTypes & key_types, + const Columns & default_values_columns) const +{ + if (dictionary_key_type == DictionaryKeyType::Complex) + dict_struct.validateKeyTypes(key_types); + + DictionaryKeysArenaHolder arena_holder; + DictionaryKeysExtractor extractor(key_columns, arena_holder.getComplexKeyArena()); + + const size_t keys_size = extractor.getKeysSize(); + + PaddedPODArray key_index_to_element_index; + + /** Optimization for multiple attributes. + * For each key save element index in key_index_to_element_index array. + * Later in type_call for attribute use getItemsImpl specialization with key_index_to_element_index array + * instead of DictionaryKeyExtractor. + */ + if (attribute_names.size() > 1) { - col_null_map_to = ColumnUInt8::create(size, false); - vec_null_map_to = &col_null_map_to->getData(); + const auto & key_attribute_container = key_attribute.container; + size_t keys_found = 0; + + key_index_to_element_index.resize(keys_size); + + for (size_t key_index = 0; key_index < keys_size; ++key_index) + { + auto key = extractor.extractCurrentKey(); + + auto it = key_attribute_container.find(key); + if (it == key_attribute_container.end()) + { + key_index_to_element_index[key_index] = -1; + } + else + { + key_index_to_element_index[key_index] = it->getMapped(); + ++keys_found; + } + + extractor.rollbackCurrentKey(); + } + + query_count.fetch_add(keys_size, std::memory_order_relaxed); + found_count.fetch_add(keys_found, std::memory_order_relaxed); } - auto type_call = [&](const auto & dictionary_attribute_type) + size_t attribute_names_size = attribute_names.size(); + + Columns result_columns; + result_columns.reserve(attribute_names_size); + + for (size_t i = 0; i < attribute_names_size; ++i) { - using Type = std::decay_t; - using AttributeType = typename Type::AttributeType; - using ValueType = DictionaryValueType; - using ColumnProvider = DictionaryAttributeColumnProvider; + ColumnPtr result_column; - DictionaryDefaultValueExtractor default_value_extractor(dictionary_attribute.null_value, default_values_column); + const auto & attribute_name = attribute_names[i]; + const auto & result_type = result_types[i]; + const auto & default_values_column = default_values_columns[i]; - auto column = ColumnProvider::getColumn(dictionary_attribute, size); + const auto & dictionary_attribute = dict_struct.getAttribute(attribute_name, result_type); + const size_t attribute_index = dict_struct.attribute_name_to_index.find(attribute_name)->second; + auto & attribute = attributes[attribute_index]; - if constexpr (std::is_same_v) - { - auto * out = column.get(); - - getItemsImpl( - attribute, - extractor, - [&](const size_t, const Array & value, bool) { out->insert(value); }, - default_value_extractor); - } - else if constexpr (std::is_same_v) - { - auto * out = column.get(); - - if (is_attribute_nullable) - getItemsImpl( - attribute, - extractor, - [&](size_t row, const StringRef value, bool is_null) - { - (*vec_null_map_to)[row] = is_null; - out->insertData(value.data, value.size); - }, - default_value_extractor); - else - getItemsImpl( - attribute, - extractor, - [&](size_t, const StringRef value, bool) { out->insertData(value.data, value.size); }, - default_value_extractor); - } + if (attribute_names_size > 1) + result_column = getAttributeColumn(attribute, dictionary_attribute, keys_size, default_values_column, key_index_to_element_index); else - { - auto & out = column->getData(); + result_column = getAttributeColumn(attribute, dictionary_attribute, keys_size, default_values_column, extractor); - if (is_attribute_nullable) - getItemsImpl( - attribute, - extractor, - [&](size_t row, const auto value, bool is_null) - { - (*vec_null_map_to)[row] = is_null; - out[row] = value; - }, - default_value_extractor); - else - getItemsImpl( - attribute, - extractor, - [&](size_t row, const auto value, bool) { out[row] = value; }, - default_value_extractor); - } + result_columns.emplace_back(std::move(result_column)); + } - result = std::move(column); - }; - - callOnDictionaryAttributeType(attribute.type, type_call); - - if (is_attribute_nullable) - result = ColumnNullable::create(std::move(result), std::move(col_null_map_to)); - - return result; + return result_columns; } template @@ -499,6 +497,102 @@ void HashedArrayDictionary::resize(size_t added_rows) key_attribute.container.reserve(added_rows); } +template +template +ColumnPtr HashedArrayDictionary::getAttributeColumn( + const Attribute & attribute, + const DictionaryAttribute & dictionary_attribute, + size_t keys_size, + ColumnPtr default_values_column, + KeysProvider && keys_object) const +{ + ColumnPtr result; + + bool is_attribute_nullable = attribute.is_index_null.has_value(); + + ColumnUInt8::MutablePtr col_null_map_to; + ColumnUInt8::Container * vec_null_map_to = nullptr; + if (attribute.is_index_null) + { + col_null_map_to = ColumnUInt8::create(keys_size, false); + vec_null_map_to = &col_null_map_to->getData(); + } + + auto type_call = [&](const auto & dictionary_attribute_type) + { + using Type = std::decay_t; + using AttributeType = typename Type::AttributeType; + using ValueType = DictionaryValueType; + using ColumnProvider = DictionaryAttributeColumnProvider; + + DictionaryDefaultValueExtractor default_value_extractor(dictionary_attribute.null_value, default_values_column); + + auto column = ColumnProvider::getColumn(dictionary_attribute, keys_size); + + if constexpr (std::is_same_v) + { + auto * out = column.get(); + + getItemsImpl( + attribute, + keys_object, + [&](const size_t, const Array & value, bool) { out->insert(value); }, + default_value_extractor); + } + else if constexpr (std::is_same_v) + { + auto * out = column.get(); + + if (is_attribute_nullable) + getItemsImpl( + attribute, + keys_object, + [&](size_t row, const StringRef value, bool is_null) + { + (*vec_null_map_to)[row] = is_null; + out->insertData(value.data, value.size); + }, + default_value_extractor); + else + getItemsImpl( + attribute, + keys_object, + [&](size_t, const StringRef value, bool) { out->insertData(value.data, value.size); }, + default_value_extractor); + } + else + { + auto & out = column->getData(); + + if (is_attribute_nullable) + getItemsImpl( + attribute, + keys_object, + [&](size_t row, const auto value, bool is_null) + { + (*vec_null_map_to)[row] = is_null; + out[row] = value; + }, + default_value_extractor); + else + getItemsImpl( + attribute, + keys_object, + [&](size_t row, const auto value, bool) { out[row] = value; }, + default_value_extractor); + } + + result = std::move(column); + }; + + callOnDictionaryAttributeType(attribute.type, type_call); + + if (is_attribute_nullable) + result = ColumnNullable::create(std::move(result), std::move(col_null_map_to)); + + return result; +} + template template void HashedArrayDictionary::getItemsImpl( @@ -547,6 +641,41 @@ void HashedArrayDictionary::getItemsImpl( found_count.fetch_add(keys_found, std::memory_order_relaxed); } +template +template +void HashedArrayDictionary::getItemsImpl( + const Attribute & attribute, + const PaddedPODArray & key_index_to_element_index, + ValueSetter && set_value, + DefaultValueExtractor & default_value_extractor) const +{ + const auto & attribute_container = std::get>(attribute.container); + const size_t keys_size = key_index_to_element_index.size(); + + for (size_t key_index = 0; key_index < keys_size; ++key_index) + { + bool key_exists = key_index_to_element_index[key_index] != -1; + + if (key_exists) + { + size_t element_index = static_cast(key_index_to_element_index[key_index]); + const auto & element = attribute_container[element_index]; + + if constexpr (is_nullable) + set_value(key_index, element, (*attribute.is_index_null)[element_index]); + else + set_value(key_index, element, false); + } + else + { + if constexpr (is_nullable) + set_value(key_index, default_value_extractor[key_index], default_value_extractor.isNullAt(key_index)); + else + set_value(key_index, default_value_extractor[key_index], false); + } + } +} + template StringRef HashedArrayDictionary::copyKeyInArena(StringRef key) { @@ -634,7 +763,7 @@ void HashedArrayDictionary::calculateBytesAllocated() } template -Pipe HashedArrayDictionary::read(const Names & column_names, size_t max_block_size) const +Pipe HashedArrayDictionary::read(const Names & column_names, size_t max_block_size, size_t num_streams) const { PaddedPODArray keys; keys.reserve(key_attribute.container.size()); @@ -642,7 +771,25 @@ Pipe HashedArrayDictionary::read(const Names & column_names for (auto & [key, _] : key_attribute.container) keys.emplace_back(key); - return Pipe(std::make_shared(DictionarySourceData(shared_from_this(), std::move(keys), column_names), max_block_size)); + ColumnsWithTypeAndName key_columns; + + if constexpr (dictionary_key_type == DictionaryKeyType::Simple) + key_columns = {ColumnWithTypeAndName(getColumnFromPODArray(keys), std::make_shared(), dict_struct.id->name)}; + else + key_columns = deserializeColumnsWithTypeAndNameFromKeys(dict_struct, keys, 0, keys.size()); + + std::shared_ptr dictionary = shared_from_this(); + auto coordinator = std::make_shared(dictionary, column_names, std::move(key_columns), max_block_size); + + Pipes pipes; + + for (size_t i = 0; i < num_streams; ++i) + { + auto source = std::make_shared(coordinator); + pipes.emplace_back(Pipe(std::move(source))); + } + + return Pipe::unitePipes(std::move(pipes)); } template class HashedArrayDictionary; diff --git a/src/Dictionaries/HashedArrayDictionary.h b/src/Dictionaries/HashedArrayDictionary.h index 053813bdc44..5ad1efeb056 100644 --- a/src/Dictionaries/HashedArrayDictionary.h +++ b/src/Dictionaries/HashedArrayDictionary.h @@ -93,6 +93,13 @@ public: const DataTypes & key_types, const ColumnPtr & default_values_column) const override; + Columns getColumns( + const Strings & attribute_names, + const DataTypes & result_types, + const Columns & key_columns, + const DataTypes & key_types, + const Columns & default_values_columns) const override; + ColumnUInt8::Ptr hasKeys(const Columns & key_columns, const DataTypes & key_types) const override; bool hasHierarchy() const override { return dictionary_key_type == DictionaryKeyType::Simple && dict_struct.hierarchical_attribute_index.has_value(); } @@ -109,7 +116,7 @@ public: const DataTypePtr & key_type, size_t level) const override; - Pipe read(const Names & column_names, size_t max_block_size) const override; + Pipe read(const Names & column_names, size_t max_block_size, size_t num_streams) const override; private: @@ -170,6 +177,14 @@ private: void calculateBytesAllocated(); + template + ColumnPtr getAttributeColumn( + const Attribute & attribute, + const DictionaryAttribute & dictionary_attribute, + size_t keys_size, + ColumnPtr default_values_column, + KeysProvider && keys_object) const; + template void getItemsImpl( const Attribute & attribute, @@ -177,6 +192,13 @@ private: ValueSetter && set_value, DefaultValueExtractor & default_value_extractor) const; + template + void getItemsImpl( + const Attribute & attribute, + const PaddedPODArray & key_index_to_element_index, + ValueSetter && set_value, + DefaultValueExtractor & default_value_extractor) const; + template void getAttributeContainer(size_t attribute_index, GetContainerFunc && get_container_func); diff --git a/src/Dictionaries/HashedDictionary.cpp b/src/Dictionaries/HashedDictionary.cpp index 44a0d8a62c1..728d8c1c352 100644 --- a/src/Dictionaries/HashedDictionary.cpp +++ b/src/Dictionaries/HashedDictionary.cpp @@ -6,6 +6,8 @@ #include #include +#include + #include #include #include @@ -640,7 +642,7 @@ void HashedDictionary::calculateBytesAllocated() } template -Pipe HashedDictionary::read(const Names & column_names, size_t max_block_size) const +Pipe HashedDictionary::read(const Names & column_names, size_t max_block_size, size_t num_streams) const { PaddedPODArray keys; @@ -669,7 +671,25 @@ Pipe HashedDictionary::read(const Names & column_na }); } - return Pipe(std::make_shared(DictionarySourceData(shared_from_this(), std::move(keys), column_names), max_block_size)); + ColumnsWithTypeAndName key_columns; + + if constexpr (dictionary_key_type == DictionaryKeyType::Simple) + key_columns = {ColumnWithTypeAndName(getColumnFromPODArray(keys), std::make_shared(), dict_struct.id->name)}; + else + key_columns = deserializeColumnsWithTypeAndNameFromKeys(dict_struct, keys, 0, keys.size()); + + std::shared_ptr dictionary = shared_from_this(); + auto coordinator = std::make_shared(dictionary, column_names, std::move(key_columns), max_block_size); + + Pipes pipes; + + for (size_t i = 0; i < num_streams; ++i) + { + auto source = std::make_shared(coordinator); + pipes.emplace_back(Pipe(std::move(source))); + } + + return Pipe::unitePipes(std::move(pipes)); } template diff --git a/src/Dictionaries/HashedDictionary.h b/src/Dictionaries/HashedDictionary.h index d1e1f681fa1..23919c009c5 100644 --- a/src/Dictionaries/HashedDictionary.h +++ b/src/Dictionaries/HashedDictionary.h @@ -115,7 +115,7 @@ public: const DataTypePtr & key_type, size_t level) const override; - Pipe read(const Names & column_names, size_t max_block_size) const override; + Pipe read(const Names & column_names, size_t max_block_size, size_t num_streams) const override; private: template diff --git a/src/Dictionaries/ICacheDictionaryStorage.h b/src/Dictionaries/ICacheDictionaryStorage.h index 72b3ef76f11..b094d76a9a7 100644 --- a/src/Dictionaries/ICacheDictionaryStorage.h +++ b/src/Dictionaries/ICacheDictionaryStorage.h @@ -106,7 +106,8 @@ public: /// Insert default keys virtual void insertDefaultKeys(const PaddedPODArray & keys) = 0; - /// Return cached simple keys + /// Return cached complex keys. + /// It is client responsibility to ensure keys proper lifetime. virtual PaddedPODArray getCachedComplexKeys() const = 0; /// Return size of keys in storage diff --git a/src/Dictionaries/IDictionary.h b/src/Dictionaries/IDictionary.h index b40dc418c66..66e35c8fa12 100644 --- a/src/Dictionaries/IDictionary.h +++ b/src/Dictionaries/IDictionary.h @@ -110,7 +110,7 @@ struct IDictionary : public IExternalLoadable */ virtual DictionaryKeyType getKeyType() const = 0; - virtual DictionarySpecialKeyType getSpecialKeyType() const { return DictionarySpecialKeyType::None;} + virtual DictionarySpecialKeyType getSpecialKeyType() const { return DictionarySpecialKeyType::None; } /** Subclass must validate key columns and keys types * and return column representation of dictionary attribute. @@ -194,7 +194,7 @@ struct IDictionary : public IExternalLoadable getDictionaryID().getNameForLogs()); } - virtual Pipe read(const Names & column_names, size_t max_block_size) const = 0; + virtual Pipe read(const Names & column_names, size_t max_block_size, size_t num_streams) const = 0; bool supportUpdates() const override { return true; } diff --git a/src/Dictionaries/IPAddressDictionary.cpp b/src/Dictionaries/IPAddressDictionary.cpp index c37f90c50c6..266f8a7415c 100644 --- a/src/Dictionaries/IPAddressDictionary.cpp +++ b/src/Dictionaries/IPAddressDictionary.cpp @@ -807,13 +807,14 @@ Columns IPAddressDictionary::getKeyColumns() const key_ip_column->insertData(data, IPV6_BINARY_LENGTH); key_mask_column->insertValue(mask_column[row]); } + return {std::move(key_ip_column), std::move(key_mask_column)}; } template static auto keyViewGetter() { - return [](const Columns & columns, const std::vector & dict_attributes) + return [](const Columns & columns, const std::vector & dictonary_key_attributes) { auto column = ColumnString::create(); const auto & key_ip_column = assert_cast(*columns.front()); @@ -830,41 +831,52 @@ static auto keyViewGetter() column->insertData(buffer, str_len); } return ColumnsWithTypeAndName{ - ColumnWithTypeAndName(std::move(column), std::make_shared(), dict_attributes.front().name)}; + ColumnWithTypeAndName(std::move(column), std::make_shared(), dictonary_key_attributes.front().name)}; }; } -Pipe IPAddressDictionary::read(const Names & column_names, size_t max_block_size) const +Pipe IPAddressDictionary::read(const Names & column_names, size_t max_block_size, size_t num_streams) const { const bool is_ipv4 = std::get_if(&ip_column) != nullptr; - auto get_keys = [is_ipv4](const Columns & columns, const std::vector & dict_attributes) - { - const auto & attr = dict_attributes.front(); - std::shared_ptr key_typ; - if (is_ipv4) - key_typ = std::make_shared(); - else - key_typ = std::make_shared(IPV6_BINARY_LENGTH); + auto key_columns = getKeyColumns(); - return ColumnsWithTypeAndName({ - ColumnWithTypeAndName(columns.front(), key_typ, attr.name), - ColumnWithTypeAndName(columns.back(), std::make_shared(), attr.name + ".mask") - }); + std::shared_ptr key_type; + if (is_ipv4) + key_type = std::make_shared(); + else + key_type = std::make_shared(IPV6_BINARY_LENGTH); + + ColumnsWithTypeAndName key_columns_with_type = { + ColumnWithTypeAndName(key_columns.front(), key_type, ""), + ColumnWithTypeAndName(key_columns.back(), std::make_shared(), "") }; + ColumnsWithTypeAndName view_columns; + if (is_ipv4) { auto get_view = keyViewGetter, true>(); - return Pipe(std::make_shared( - DictionarySourceData(shared_from_this(), getKeyColumns(), column_names, std::move(get_keys), std::move(get_view)), - max_block_size)); + view_columns = get_view(key_columns, *dict_struct.key); + } + else + { + auto get_view = keyViewGetter(); + view_columns = get_view(key_columns, *dict_struct.key); } - auto get_view = keyViewGetter(); - return Pipe(std::make_shared( - DictionarySourceData(shared_from_this(), getKeyColumns(), column_names, std::move(get_keys), std::move(get_view)), - max_block_size)); + std::shared_ptr dictionary = shared_from_this(); + auto coordinator = std::make_shared(dictionary, column_names, std::move(key_columns_with_type), std::move(view_columns), max_block_size); + + Pipes pipes; + + for (size_t i = 0; i < num_streams; ++i) + { + auto source = std::make_shared(coordinator); + pipes.emplace_back(Pipe(std::move(source))); + } + + return Pipe::unitePipes(std::move(pipes)); } IPAddressDictionary::RowIdxConstIter IPAddressDictionary::ipNotFound() const diff --git a/src/Dictionaries/IPAddressDictionary.h b/src/Dictionaries/IPAddressDictionary.h index 2103c702493..ed0d8692d21 100644 --- a/src/Dictionaries/IPAddressDictionary.h +++ b/src/Dictionaries/IPAddressDictionary.h @@ -78,7 +78,7 @@ public: ColumnUInt8::Ptr hasKeys(const Columns & key_columns, const DataTypes & key_types) const override; - Pipe read(const Names & column_names, size_t max_block_size) const override; + Pipe read(const Names & column_names, size_t max_block_size, size_t num_streams) const override; private: diff --git a/src/Dictionaries/MySQLDictionarySource.h b/src/Dictionaries/MySQLDictionarySource.h index 1ecc41036be..37743ca2f62 100644 --- a/src/Dictionaries/MySQLDictionarySource.h +++ b/src/Dictionaries/MySQLDictionarySource.h @@ -2,9 +2,7 @@ #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL # include diff --git a/src/Dictionaries/PolygonDictionary.cpp b/src/Dictionaries/PolygonDictionary.cpp index 0a9ba1f5ea8..8c31be329aa 100644 --- a/src/Dictionaries/PolygonDictionary.cpp +++ b/src/Dictionaries/PolygonDictionary.cpp @@ -118,7 +118,7 @@ ColumnPtr IPolygonDictionary::getColumn( return result; } -Pipe IPolygonDictionary::read(const Names & column_names, size_t) const +Pipe IPolygonDictionary::read(const Names & column_names, size_t, size_t) const { if (!configuration.store_polygon_key_column) throw Exception(ErrorCodes::UNSUPPORTED_METHOD, diff --git a/src/Dictionaries/PolygonDictionary.h b/src/Dictionaries/PolygonDictionary.h index 00a151d546f..346160c342f 100644 --- a/src/Dictionaries/PolygonDictionary.h +++ b/src/Dictionaries/PolygonDictionary.h @@ -106,7 +106,7 @@ public: ColumnUInt8::Ptr hasKeys(const Columns & key_columns, const DataTypes & key_types) const override; - Pipe read(const Names & column_names, size_t max_block_size) const override; + Pipe read(const Names & column_names, size_t max_block_size, size_t num_streams) const override; /** Single coordinate type. */ using Coord = Float32; diff --git a/src/Dictionaries/PostgreSQLDictionarySource.h b/src/Dictionaries/PostgreSQLDictionarySource.h index d5ae025ea80..1cde2958107 100644 --- a/src/Dictionaries/PostgreSQLDictionarySource.h +++ b/src/Dictionaries/PostgreSQLDictionarySource.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #include "DictionaryStructure.h" #include "IDictionarySource.h" diff --git a/src/Dictionaries/RangeDictionarySource.h b/src/Dictionaries/RangeDictionarySource.h deleted file mode 100644 index dcc5b1ea3b8..00000000000 --- a/src/Dictionaries/RangeDictionarySource.h +++ /dev/null @@ -1,219 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -namespace DB -{ - -template -class RangeDictionarySourceData -{ -public: - - using KeyType = std::conditional_t; - - RangeDictionarySourceData( - std::shared_ptr dictionary, - const Names & column_names, - PaddedPODArray && keys, - PaddedPODArray && start_dates, - PaddedPODArray && end_dates); - - Block getBlock(size_t start, size_t length) const; - size_t getNumRows() const { return keys.size(); } - -private: - - Block fillBlock( - const PaddedPODArray & keys_to_fill, - const PaddedPODArray & block_start_dates, - const PaddedPODArray & block_end_dates, - size_t start, - size_t end) const; - - PaddedPODArray makeDateKeys( - const PaddedPODArray & block_start_dates, - const PaddedPODArray & block_end_dates) const; - - std::shared_ptr dictionary; - NameSet column_names; - PaddedPODArray keys; - PaddedPODArray start_dates; - PaddedPODArray end_dates; -}; - - -template -RangeDictionarySourceData::RangeDictionarySourceData( - std::shared_ptr dictionary_, - const Names & column_names_, - PaddedPODArray && keys, - PaddedPODArray && block_start_dates, - PaddedPODArray && block_end_dates) - : dictionary(dictionary_) - , column_names(column_names_.begin(), column_names_.end()) - , keys(std::move(keys)) - , start_dates(std::move(block_start_dates)) - , end_dates(std::move(block_end_dates)) -{ -} - -template -Block RangeDictionarySourceData::getBlock(size_t start, size_t length) const -{ - PaddedPODArray block_keys; - PaddedPODArray block_start_dates; - PaddedPODArray block_end_dates; - block_keys.reserve(length); - block_start_dates.reserve(length); - block_end_dates.reserve(length); - - for (size_t index = start; index < start + length; ++index) - { - block_keys.push_back(keys[index]); - block_start_dates.push_back(start_dates[index]); - block_end_dates.push_back(end_dates[index]); - } - - return fillBlock(block_keys, block_start_dates, block_end_dates, start, start + length); -} - -template -PaddedPODArray RangeDictionarySourceData::makeDateKeys( - const PaddedPODArray & block_start_dates, - const PaddedPODArray & block_end_dates) const -{ - PaddedPODArray keys(block_start_dates.size()); - - for (size_t i = 0; i < keys.size(); ++i) - { - if (Range::isCorrectDate(block_start_dates[i])) - keys[i] = block_start_dates[i]; - else - keys[i] = block_end_dates[i]; - } - - return keys; -} - - -template -Block RangeDictionarySourceData::fillBlock( - const PaddedPODArray & keys_to_fill, - const PaddedPODArray & block_start_dates, - const PaddedPODArray & block_end_dates, - size_t start, - size_t end) const -{ - ColumnsWithTypeAndName columns; - const DictionaryStructure & dictionary_structure = dictionary->getStructure(); - - DataTypes keys_types; - Columns keys_columns; - Strings keys_names = dictionary_structure.getKeysNames(); - - if constexpr (dictionary_key_type == DictionaryKeyType::Simple) - { - keys_columns = {getColumnFromPODArray(keys_to_fill)}; - keys_types = {std::make_shared()}; - } - else - { - for (const auto & attribute : *dictionary_structure.key) - keys_types.emplace_back(attribute.type); - - auto deserialized_columns = deserializeColumnsFromKeys(dictionary_structure, keys, start, end); - for (auto & deserialized_column : deserialized_columns) - keys_columns.emplace_back(std::move(deserialized_column)); - } - - size_t keys_size = keys_names.size(); - - assert(keys_columns.size() == keys_size); - assert(keys_types.size() == keys_size); - - for (size_t i = 0; i < keys_size; ++i) - { - auto & key_name = keys_names[i]; - - if (column_names.find(key_name) != column_names.end()) - columns.emplace_back(keys_columns[i], keys_types[i], key_name); - } - - auto date_key = makeDateKeys(block_start_dates, block_end_dates); - auto date_column = getColumnFromPODArray(date_key); - keys_columns.emplace_back(std::move(date_column)); - keys_types.emplace_back(std::make_shared()); - - const auto & range_min_column_name = dictionary_structure.range_min->name; - if (column_names.find(range_min_column_name) != column_names.end()) - { - auto range_min_column = getColumnFromPODArray(block_start_dates); - columns.emplace_back(range_min_column, dictionary_structure.range_max->type, range_min_column_name); - } - - const auto & range_max_column_name = dictionary_structure.range_max->name; - if (column_names.find(range_max_column_name) != column_names.end()) - { - auto range_max_column = getColumnFromPODArray(block_end_dates); - columns.emplace_back(range_max_column, dictionary_structure.range_max->type, range_max_column_name); - } - - size_t attributes_size = dictionary_structure.attributes.size(); - for (size_t attribute_index = 0; attribute_index < attributes_size; ++attribute_index) - { - const auto & attribute = dictionary_structure.attributes[attribute_index]; - if (column_names.find(attribute.name) == column_names.end()) - continue; - - auto column = dictionary->getColumn( - attribute.name, - attribute.type, - keys_columns, - keys_types, - nullptr /* default_values_column*/); - - columns.emplace_back(std::move(column), attribute.type, attribute.name); - } - - return Block(columns); -} - -template -class RangeDictionarySource : public DictionarySourceBase -{ -public: - - RangeDictionarySource(RangeDictionarySourceData data_, size_t max_block_size); - - String getName() const override { return "RangeDictionarySource"; } - -protected: - Block getBlock(size_t start, size_t length) const override; - - RangeDictionarySourceData data; -}; - -template -RangeDictionarySource::RangeDictionarySource(RangeDictionarySourceData data_, size_t max_block_size) - : DictionarySourceBase(data_.getBlock(0, 0), data_.getNumRows(), max_block_size) - , data(std::move(data_)) -{ -} - -template -Block RangeDictionarySource::getBlock(size_t start, size_t length) const -{ - return data.getBlock(start, length); -} - -} diff --git a/src/Dictionaries/RangeHashedDictionary.cpp b/src/Dictionaries/RangeHashedDictionary.cpp index 2e677c163d6..42d6a0c0c03 100644 --- a/src/Dictionaries/RangeHashedDictionary.cpp +++ b/src/Dictionaries/RangeHashedDictionary.cpp @@ -1,11 +1,14 @@ -#include "RangeHashedDictionary.h" +#include + #include #include -#include #include #include +#include +#include +#include #include -#include +#include namespace @@ -219,6 +222,7 @@ ColumnUInt8::Ptr RangeHashedDictionary::hasKeys(const Colum key_types_copy.pop_back(); dict_struct.validateKeyTypes(key_types_copy); } + auto range_column_storage_type = std::make_shared(); auto range_storage_column = key_columns.back(); ColumnWithTypeAndName column_to_cast = {range_storage_column->convertToFullColumnIfConst(), key_types.back(), ""}; @@ -567,7 +571,7 @@ void RangeHashedDictionary::getKeysAndDates( { const auto & attribute = attributes.front(); - auto type_call = [&](const auto &dictionary_attribute_type) + auto type_call = [&](const auto & dictionary_attribute_type) { using Type = std::decay_t; using AttributeType = typename Type::AttributeType; @@ -610,28 +614,6 @@ void RangeHashedDictionary::getKeysAndDates( } } -template -template -Pipe RangeHashedDictionary::readImpl(const Names & column_names, size_t max_block_size) const -{ - PaddedPODArray keys; - PaddedPODArray start_dates; - PaddedPODArray end_dates; - getKeysAndDates(keys, start_dates, end_dates); - - using RangeDictionarySourceType = RangeDictionarySource; - - auto source_data = RangeDictionarySourceData( - shared_from_this(), - column_names, - std::move(keys), - std::move(start_dates), - std::move(end_dates)); - auto source = std::make_shared(std::move(source_data), max_block_size); - - return Pipe(source); -} - template StringRef RangeHashedDictionary::copyKeyInArena(StringRef key) { @@ -643,38 +625,86 @@ StringRef RangeHashedDictionary::copyKeyInArena(StringRef k } template -struct RangeHashedDictionaryCallGetSourceImpl +template +PaddedPODArray RangeHashedDictionary::makeDateKeys( + const PaddedPODArray & block_start_dates, + const PaddedPODArray & block_end_dates) const { - Pipe pipe; - const RangeHashedDictionary * dict; - const Names * column_names; - size_t max_block_size; + PaddedPODArray keys(block_start_dates.size()); - template - void operator()(Id) + for (size_t i = 0; i < keys.size(); ++i) { - const auto & type = dict->dict_struct.range_min->type; - if (pipe.empty() && dynamic_cast *>(type.get())) - pipe = dict->template readImpl(*column_names, max_block_size); + if (Range::isCorrectDate(block_start_dates[i])) + keys[i] = block_start_dates[i]; // NOLINT + else + keys[i] = block_end_dates[i]; // NOLINT } -}; + + return keys; +} template -Pipe RangeHashedDictionary::read(const Names & column_names, size_t max_block_size) const +Pipe RangeHashedDictionary::read(const Names & column_names, size_t max_block_size, size_t num_streams) const { - RangeHashedDictionaryCallGetSourceImpl callable; - callable.dict = this; - callable.column_names = &column_names; - callable.max_block_size = max_block_size; + auto type = dict_struct.range_min->type; - TLUtils::forEach(TLIntegral{}, callable); + ColumnsWithTypeAndName key_columns; + ColumnWithTypeAndName range_min_column; + ColumnWithTypeAndName range_max_column; - if (callable.pipe.empty()) - throw Exception(ErrorCodes::LOGICAL_ERROR, - "Unexpected range type for RangeHashed dictionary: {}", - dict_struct.range_min->type->getName()); + auto type_call = [&](const auto & types) mutable -> bool + { + using Types = std::decay_t; + using LeftDataType = typename Types::LeftType; - return std::move(callable.pipe); + if constexpr (IsDataTypeNumber || + std::is_same_v || + std::is_same_v || + std::is_same_v) + { + using RangeType = typename LeftDataType::FieldType; + + PaddedPODArray keys; + PaddedPODArray start_dates; + PaddedPODArray end_dates; + getKeysAndDates(keys, start_dates, end_dates); + + range_min_column = ColumnWithTypeAndName{getColumnFromPODArray(start_dates), dict_struct.range_min->type, dict_struct.range_min->name}; + range_max_column = ColumnWithTypeAndName{getColumnFromPODArray(end_dates), dict_struct.range_max->type, dict_struct.range_max->name}; + + if constexpr (dictionary_key_type == DictionaryKeyType::Simple) + key_columns = {ColumnWithTypeAndName(getColumnFromPODArray(keys), std::make_shared(), dict_struct.id->name)}; + else + key_columns = deserializeColumnsWithTypeAndNameFromKeys(dict_struct, keys, 0, keys.size()); + + auto date_column = getColumnFromPODArray(makeDateKeys(start_dates, end_dates)); + key_columns.emplace_back(ColumnWithTypeAndName{std::move(date_column), std::make_shared(), ""}); + + return true; + } + else + { + return false; + } + }; + + if (!callOnIndexAndDataType(type->getTypeId(), type_call)) + throw Exception(ErrorCodes::LOGICAL_ERROR, "RangeHashedDictionary min max range type should be numeric"); + + ColumnsWithTypeAndName data_columns = {std::move(range_min_column), std::move(range_max_column)}; + + std::shared_ptr dictionary = shared_from_this(); + auto coordinator = std::make_shared(dictionary, column_names, std::move(key_columns), std::move(data_columns), max_block_size); + + Pipes pipes; + + for (size_t i = 0; i < num_streams; ++i) + { + auto source = std::make_shared(coordinator); + pipes.emplace_back(Pipe(std::move(source))); + } + + return Pipe::unitePipes(std::move(pipes)); } diff --git a/src/Dictionaries/RangeHashedDictionary.h b/src/Dictionaries/RangeHashedDictionary.h index 4cdab66a0e4..1ccd9708d79 100644 --- a/src/Dictionaries/RangeHashedDictionary.h +++ b/src/Dictionaries/RangeHashedDictionary.h @@ -90,7 +90,7 @@ public: ColumnUInt8::Ptr hasKeys(const Columns & key_columns, const DataTypes & key_types) const override; - Pipe read(const Names & column_names, size_t max_block_size) const override; + Pipe read(const Names & column_names, size_t max_block_size, size_t num_streams) const override; private: template @@ -175,13 +175,12 @@ private: PaddedPODArray & end_dates) const; template - Pipe readImpl(const Names & column_names, size_t max_block_size) const; + PaddedPODArray makeDateKeys( + const PaddedPODArray & block_start_dates, + const PaddedPODArray & block_end_dates) const; StringRef copyKeyInArena(StringRef key); - template - friend struct RangeHashedDictionaryCallGetSourceImpl; - const DictionaryStructure dict_struct; const DictionarySourcePtr source_ptr; const DictionaryLifetime dict_lifetime; diff --git a/src/Dictionaries/registerDictionaries.cpp b/src/Dictionaries/registerDictionaries.cpp index df191edd1c3..4ade5d88bd4 100644 --- a/src/Dictionaries/registerDictionaries.cpp +++ b/src/Dictionaries/registerDictionaries.cpp @@ -14,9 +14,7 @@ void registerDictionarySourceCassandra(DictionarySourceFactory & source_factory) void registerDictionarySourceRedis(DictionarySourceFactory & source_factory); void registerDictionarySourceXDBC(DictionarySourceFactory & source_factory); void registerDictionarySourceJDBC(DictionarySourceFactory & source_factory); -#if !defined(ARCADIA_BUILD) void registerDictionarySourcePostgreSQL(DictionarySourceFactory & source_factory); -#endif void registerDictionarySourceExecutable(DictionarySourceFactory & source_factory); void registerDictionarySourceExecutablePool(DictionarySourceFactory & source_factory); void registerDictionarySourceHTTP(DictionarySourceFactory & source_factory); @@ -46,9 +44,7 @@ void registerDictionaries() registerDictionarySourceCassandra(source_factory); registerDictionarySourceXDBC(source_factory); registerDictionarySourceJDBC(source_factory); -#if !defined(ARCADIA_BUILD) registerDictionarySourcePostgreSQL(source_factory); -#endif registerDictionarySourceExecutable(source_factory); registerDictionarySourceExecutablePool(source_factory); registerDictionarySourceHTTP(source_factory); diff --git a/src/Disks/DiskCacheWrapper.cpp b/src/Disks/DiskCacheWrapper.cpp index 270b7d836ca..45ec3d2f95b 100644 --- a/src/Disks/DiskCacheWrapper.cpp +++ b/src/Disks/DiskCacheWrapper.cpp @@ -89,15 +89,15 @@ std::unique_ptr DiskCacheWrapper::readFile( const String & path, const ReadSettings & settings, - size_t estimated_size) const + std::optional size) const { if (!cache_file_predicate(path)) - return DiskDecorator::readFile(path, settings, estimated_size); + return DiskDecorator::readFile(path, settings, size); LOG_DEBUG(log, "Read file {} from cache", backQuote(path)); if (cache_disk->exists(path)) - return cache_disk->readFile(path, settings, estimated_size); + return cache_disk->readFile(path, settings, size); auto metadata = acquireDownloadMetadata(path); @@ -131,7 +131,7 @@ DiskCacheWrapper::readFile( auto tmp_path = path + ".tmp"; { - auto src_buffer = DiskDecorator::readFile(path, settings, estimated_size); + auto src_buffer = DiskDecorator::readFile(path, settings, size); auto dst_buffer = cache_disk->writeFile(tmp_path, settings.local_fs_buffer_size, WriteMode::Rewrite); copyData(*src_buffer, *dst_buffer); } @@ -155,9 +155,9 @@ DiskCacheWrapper::readFile( } if (metadata->status == DOWNLOADED) - return cache_disk->readFile(path, settings, estimated_size); + return cache_disk->readFile(path, settings, size); - return DiskDecorator::readFile(path, settings, estimated_size); + return DiskDecorator::readFile(path, settings, size); } std::unique_ptr @@ -177,7 +177,7 @@ DiskCacheWrapper::writeFile(const String & path, size_t buf_size, WriteMode mode [this, path, buf_size, mode]() { /// Copy file from cache to actual disk when cached buffer is finalized. - auto src_buffer = cache_disk->readFile(path, ReadSettings(), 0); + auto src_buffer = cache_disk->readFile(path, ReadSettings(), /* size= */ {}); auto dst_buffer = DiskDecorator::writeFile(path, buf_size, mode); copyData(*src_buffer, *dst_buffer); dst_buffer->finalize(); diff --git a/src/Disks/DiskCacheWrapper.h b/src/Disks/DiskCacheWrapper.h index 3c8a470d5ca..8b15a8875be 100644 --- a/src/Disks/DiskCacheWrapper.h +++ b/src/Disks/DiskCacheWrapper.h @@ -37,7 +37,7 @@ public: std::unique_ptr readFile( const String & path, const ReadSettings & settings, - size_t estimated_size) const override; + std::optional size) const override; std::unique_ptr writeFile(const String & path, size_t buf_size, WriteMode mode) override; diff --git a/src/Disks/DiskDecorator.cpp b/src/Disks/DiskDecorator.cpp index 212b6230f40..263c6c9c0ff 100644 --- a/src/Disks/DiskDecorator.cpp +++ b/src/Disks/DiskDecorator.cpp @@ -115,9 +115,9 @@ void DiskDecorator::listFiles(const String & path, std::vector & file_na std::unique_ptr DiskDecorator::readFile( - const String & path, const ReadSettings & settings, size_t estimated_size) const + const String & path, const ReadSettings & settings, std::optional size) const { - return delegate->readFile(path, settings, estimated_size); + return delegate->readFile(path, settings, size); } std::unique_ptr diff --git a/src/Disks/DiskDecorator.h b/src/Disks/DiskDecorator.h index 44013db5c87..5b88f4a36fa 100644 --- a/src/Disks/DiskDecorator.h +++ b/src/Disks/DiskDecorator.h @@ -38,7 +38,7 @@ public: std::unique_ptr readFile( const String & path, const ReadSettings & settings, - size_t estimated_size) const override; + std::optional size) const override; std::unique_ptr writeFile( const String & path, diff --git a/src/Disks/DiskEncrypted.cpp b/src/Disks/DiskEncrypted.cpp index 71b10fd4e53..de569d82c60 100644 --- a/src/Disks/DiskEncrypted.cpp +++ b/src/Disks/DiskEncrypted.cpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #include @@ -250,10 +252,16 @@ void DiskEncrypted::copy(const String & from_path, const std::shared_ptr std::unique_ptr DiskEncrypted::readFile( const String & path, const ReadSettings & settings, - size_t estimated_size) const + std::optional size) const { auto wrapped_path = wrappedPath(path); - auto buffer = delegate->readFile(wrapped_path, settings, estimated_size); + auto buffer = delegate->readFile(wrapped_path, settings, size); + if (buffer->eof()) + { + /// File is empty, that's a normal case, see DiskEncrypted::truncateFile(). + /// There is no header so we just return `ReadBufferFromString("")`. + return std::make_unique(std::make_unique(std::string_view{}), wrapped_path); + } auto encryption_settings = current_settings.get(); FileEncryption::Header header = readHeader(*buffer); String key = getKey(path, header, *encryption_settings); diff --git a/src/Disks/DiskEncrypted.h b/src/Disks/DiskEncrypted.h index c8525d96517..5b1bd7c5c6d 100644 --- a/src/Disks/DiskEncrypted.h +++ b/src/Disks/DiskEncrypted.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_SSL #include @@ -122,7 +120,7 @@ public: std::unique_ptr readFile( const String & path, const ReadSettings & settings, - size_t estimated_size) const override; + std::optional size) const override; std::unique_ptr writeFile( const String & path, diff --git a/src/Disks/DiskLocal.cpp b/src/Disks/DiskLocal.cpp index 37d758c5388..2774bb1bfd2 100644 --- a/src/Disks/DiskLocal.cpp +++ b/src/Disks/DiskLocal.cpp @@ -259,9 +259,9 @@ void DiskLocal::replaceFile(const String & from_path, const String & to_path) fs::rename(from_file, to_file); } -std::unique_ptr DiskLocal::readFile(const String & path, const ReadSettings & settings, size_t estimated_size) const +std::unique_ptr DiskLocal::readFile(const String & path, const ReadSettings & settings, std::optional size) const { - return createReadBufferFromFileBase(fs::path(disk_path) / path, settings, estimated_size); + return createReadBufferFromFileBase(fs::path(disk_path) / path, settings, size); } std::unique_ptr diff --git a/src/Disks/DiskLocal.h b/src/Disks/DiskLocal.h index 02550b3b79c..37855327578 100644 --- a/src/Disks/DiskLocal.h +++ b/src/Disks/DiskLocal.h @@ -74,7 +74,7 @@ public: std::unique_ptr readFile( const String & path, const ReadSettings & settings, - size_t estimated_size) const override; + std::optional size) const override; std::unique_ptr writeFile( const String & path, diff --git a/src/Disks/DiskMemory.cpp b/src/Disks/DiskMemory.cpp index 526b8322b4a..f8e77d0a0b3 100644 --- a/src/Disks/DiskMemory.cpp +++ b/src/Disks/DiskMemory.cpp @@ -315,7 +315,7 @@ void DiskMemory::replaceFileImpl(const String & from_path, const String & to_pat files.insert(std::move(node)); } -std::unique_ptr DiskMemory::readFile(const String & path, const ReadSettings &, size_t) const +std::unique_ptr DiskMemory::readFile(const String & path, const ReadSettings &, std::optional) const { std::lock_guard lock(mutex); diff --git a/src/Disks/DiskMemory.h b/src/Disks/DiskMemory.h index 1ad251d5ea5..d77161d898e 100644 --- a/src/Disks/DiskMemory.h +++ b/src/Disks/DiskMemory.h @@ -65,7 +65,7 @@ public: std::unique_ptr readFile( const String & path, const ReadSettings & settings, - size_t estimated_size) const override; + std::optional size) const override; std::unique_ptr writeFile( const String & path, diff --git a/src/Disks/DiskRestartProxy.cpp b/src/Disks/DiskRestartProxy.cpp index 8f12452e2ed..f2b27c2c876 100644 --- a/src/Disks/DiskRestartProxy.cpp +++ b/src/Disks/DiskRestartProxy.cpp @@ -20,6 +20,10 @@ public: RestartAwareReadBuffer(const DiskRestartProxy & disk, std::unique_ptr impl_) : ReadBufferFromFileDecorator(std::move(impl_)), lock(disk.mutex) { } + void prefetch() override { impl->prefetch(); } + + void setReadUntilPosition(size_t position) override { impl->setReadUntilPosition(position); } + private: ReadLock lock; }; @@ -187,10 +191,10 @@ void DiskRestartProxy::listFiles(const String & path, std::vector & file } std::unique_ptr DiskRestartProxy::readFile( - const String & path, const ReadSettings & settings, size_t estimated_size) const + const String & path, const ReadSettings & settings, std::optional size) const { ReadLock lock (mutex); - auto impl = DiskDecorator::readFile(path, settings, estimated_size); + auto impl = DiskDecorator::readFile(path, settings, size); return std::make_unique(*this, std::move(impl)); } diff --git a/src/Disks/DiskRestartProxy.h b/src/Disks/DiskRestartProxy.h index f42594a9239..e8b5891947a 100644 --- a/src/Disks/DiskRestartProxy.h +++ b/src/Disks/DiskRestartProxy.h @@ -46,7 +46,7 @@ public: std::unique_ptr readFile( const String & path, const ReadSettings & settings, - size_t estimated_size) const override; + std::optional size) const override; std::unique_ptr writeFile(const String & path, size_t buf_size, WriteMode mode) override; void removeFile(const String & path) override; void removeFileIfExists(const String & path) override; diff --git a/src/Disks/DiskWebServer.cpp b/src/Disks/DiskWebServer.cpp index 347ece5a78d..55ea91c40c9 100644 --- a/src/Disks/DiskWebServer.cpp +++ b/src/Disks/DiskWebServer.cpp @@ -3,15 +3,18 @@ #include #include -#include -#include -#include - #include #include #include #include +#include +#include +#include +#include +#include +#include + #include #include @@ -105,39 +108,6 @@ private: }; -class ReadBufferFromWebServer final : public ReadIndirectBufferFromRemoteFS -{ -public: - ReadBufferFromWebServer( - const String & uri_, - RemoteMetadata metadata_, - ContextPtr context_, - size_t buf_size_, - size_t backoff_threshold_, - size_t max_tries_) - : ReadIndirectBufferFromRemoteFS(metadata_) - , uri(uri_) - , context(context_) - , buf_size(buf_size_) - , backoff_threshold(backoff_threshold_) - , max_tries(max_tries_) - { - } - - std::unique_ptr createReadBuffer(const String & path) override - { - return std::make_unique(fs::path(uri) / path, context, buf_size, backoff_threshold, max_tries); - } - -private: - String uri; - ContextPtr context; - size_t buf_size; - size_t backoff_threshold; - size_t max_tries; -}; - - DiskWebServer::DiskWebServer( const String & disk_name_, const String & url_, @@ -182,7 +152,7 @@ bool DiskWebServer::exists(const String & path) const } -std::unique_ptr DiskWebServer::readFile(const String & path, const ReadSettings & read_settings, size_t) const +std::unique_ptr DiskWebServer::readFile(const String & path, const ReadSettings & read_settings, std::optional) const { LOG_TRACE(log, "Read from path: {}", path); auto iter = files.find(path); @@ -196,9 +166,20 @@ std::unique_ptr DiskWebServer::readFile(const String & p RemoteMetadata meta(path, remote_path); meta.remote_fs_objects.emplace_back(std::make_pair(remote_path, iter->second.size)); - auto reader = std::make_unique(url, meta, getContext(), - read_settings.remote_fs_buffer_size, read_settings.remote_fs_backoff_threshold, read_settings.remote_fs_backoff_max_tries); - return std::make_unique(std::move(reader), min_bytes_for_seek); + bool threadpool_read = read_settings.remote_fs_method == RemoteFSReadMethod::read_threadpool; + + auto web_impl = std::make_unique(path, url, meta, getContext(), threadpool_read, read_settings); + + if (threadpool_read) + { + auto reader = IDiskRemote::getThreadPoolReader(); + return std::make_unique(reader, read_settings, std::move(web_impl), min_bytes_for_seek); + } + else + { + auto buf = std::make_unique(std::move(web_impl)); + return std::make_unique(std::move(buf), min_bytes_for_seek); + } } diff --git a/src/Disks/DiskWebServer.h b/src/Disks/DiskWebServer.h index 29bc12d8794..1a193d91adf 100644 --- a/src/Disks/DiskWebServer.h +++ b/src/Disks/DiskWebServer.h @@ -63,7 +63,7 @@ public: std::unique_ptr readFile(const String & path, const ReadSettings & settings, - size_t estimated_size) const override; + std::optional size) const override; /// Disk info diff --git a/src/Disks/HDFS/DiskHDFS.cpp b/src/Disks/HDFS/DiskHDFS.cpp index 7b37c2ae8fa..9071ce1d139 100644 --- a/src/Disks/HDFS/DiskHDFS.cpp +++ b/src/Disks/HDFS/DiskHDFS.cpp @@ -1,10 +1,14 @@ #include -#include -#include #include -#include -#include +#include + +#include +#include +#include +#include +#include + #include #include @@ -48,37 +52,6 @@ private: }; -/// Reads data from HDFS using stored paths in metadata. -class ReadIndirectBufferFromHDFS final : public ReadIndirectBufferFromRemoteFS -{ -public: - ReadIndirectBufferFromHDFS( - const Poco::Util::AbstractConfiguration & config_, - const String & hdfs_uri_, - DiskHDFS::Metadata metadata_, - size_t buf_size_) - : ReadIndirectBufferFromRemoteFS(metadata_) - , config(config_) - , buf_size(buf_size_) - { - const size_t begin_of_path = hdfs_uri_.find('/', hdfs_uri_.find("//") + 2); - hdfs_directory = hdfs_uri_.substr(begin_of_path); - hdfs_uri = hdfs_uri_.substr(0, begin_of_path); - } - - std::unique_ptr createReadBuffer(const String & path) override - { - return std::make_unique(hdfs_uri, hdfs_directory + path, config, buf_size); - } - -private: - const Poco::Util::AbstractConfiguration & config; - String hdfs_uri; - String hdfs_directory; - size_t buf_size; -}; - - DiskHDFS::DiskHDFS( const String & disk_name_, const String & hdfs_root_path_, @@ -94,7 +67,7 @@ DiskHDFS::DiskHDFS( } -std::unique_ptr DiskHDFS::readFile(const String & path, const ReadSettings & read_settings, size_t) const +std::unique_ptr DiskHDFS::readFile(const String & path, const ReadSettings & read_settings, std::optional) const { auto metadata = readMeta(path); @@ -102,8 +75,18 @@ std::unique_ptr DiskHDFS::readFile(const String & path, "Read from file by path: {}. Existing HDFS objects: {}", backQuote(metadata_path + path), metadata.remote_fs_objects.size()); - auto reader = std::make_unique(config, remote_fs_root_path, metadata, read_settings.remote_fs_buffer_size); - return std::make_unique(std::move(reader), settings->min_bytes_for_seek); + auto hdfs_impl = std::make_unique(path, config, remote_fs_root_path, metadata, read_settings.remote_fs_buffer_size); + + if (read_settings.remote_fs_method == RemoteFSReadMethod::read_threadpool) + { + auto reader = getThreadPoolReader(); + return std::make_unique(reader, read_settings, std::move(hdfs_impl)); + } + else + { + auto buf = std::make_unique(std::move(hdfs_impl)); + return std::make_unique(std::move(buf), settings->min_bytes_for_seek); + } } diff --git a/src/Disks/HDFS/DiskHDFS.h b/src/Disks/HDFS/DiskHDFS.h index 108d8da0d16..5bb947c9f58 100644 --- a/src/Disks/HDFS/DiskHDFS.h +++ b/src/Disks/HDFS/DiskHDFS.h @@ -50,7 +50,7 @@ public: std::unique_ptr readFile( const String & path, const ReadSettings & settings, - size_t estimated_size) const override; + std::optional size) const override; std::unique_ptr writeFile(const String & path, size_t buf_size, WriteMode mode) override; diff --git a/src/Disks/IDisk.h b/src/Disks/IDisk.h index 925a0316273..03ed92e7d5e 100644 --- a/src/Disks/IDisk.h +++ b/src/Disks/IDisk.h @@ -166,7 +166,7 @@ public: virtual std::unique_ptr readFile( const String & path, const ReadSettings & settings = ReadSettings{}, - size_t estimated_size = 0) const = 0; + std::optional size = {}) const = 0; /// Open the file for write and return WriteBufferFromFileBase object. virtual std::unique_ptr writeFile( diff --git a/src/Disks/IDiskRemote.cpp b/src/Disks/IDiskRemote.cpp index 1a6e4eb73a1..cf1baafce6c 100644 --- a/src/Disks/IDiskRemote.cpp +++ b/src/Disks/IDiskRemote.cpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace DB @@ -496,4 +497,13 @@ String IDiskRemote::getUniqueId(const String & path) const return id; } + +AsynchronousReaderPtr IDiskRemote::getThreadPoolReader() +{ + constexpr size_t pool_size = 50; + constexpr size_t queue_size = 1000000; + static AsynchronousReaderPtr reader = std::make_shared(pool_size, queue_size); + return reader; +} + } diff --git a/src/Disks/IDiskRemote.h b/src/Disks/IDiskRemote.h index 5333b14a12d..50c8d73c048 100644 --- a/src/Disks/IDiskRemote.h +++ b/src/Disks/IDiskRemote.h @@ -1,12 +1,10 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #include -#include "Disks/DiskFactory.h" -#include "Disks/Executor.h" +#include +#include #include #include #include @@ -35,6 +33,10 @@ protected: using RemoteFSPathKeeperPtr = std::shared_ptr; +class IAsynchronousReader; +using AsynchronousReaderPtr = std::shared_ptr; + + /// Base Disk class for remote FS's, which are not posix-compatible (DiskS3 and DiskHDFS) class IDiskRemote : public IDisk { @@ -127,6 +129,8 @@ public: virtual RemoteFSPathKeeperPtr createFSPathKeeper() const = 0; + static AsynchronousReaderPtr getThreadPoolReader(); + protected: Poco::Logger * log; const String name; diff --git a/src/Disks/IO/AsynchronousReadIndirectBufferFromRemoteFS.cpp b/src/Disks/IO/AsynchronousReadIndirectBufferFromRemoteFS.cpp new file mode 100644 index 00000000000..c283e0ea159 --- /dev/null +++ b/src/Disks/IO/AsynchronousReadIndirectBufferFromRemoteFS.cpp @@ -0,0 +1,262 @@ +#include "AsynchronousReadIndirectBufferFromRemoteFS.h" + +#include +#include +#include +#include +#include + + +namespace CurrentMetrics +{ + extern const Metric AsynchronousReadWait; +} + +namespace ProfileEvents +{ + extern const Event AsynchronousReadWaitMicroseconds; + extern const Event RemoteFSSeeks; + extern const Event RemoteFSPrefetches; + extern const Event RemoteFSCancelledPrefetches; + extern const Event RemoteFSUnusedPrefetches; + extern const Event RemoteFSPrefetchedReads; + extern const Event RemoteFSUnprefetchedReads; + extern const Event RemoteFSBuffers; +} + +namespace DB +{ + +namespace ErrorCodes +{ + extern const int LOGICAL_ERROR; + extern const int CANNOT_SEEK_THROUGH_FILE; +} + + +AsynchronousReadIndirectBufferFromRemoteFS::AsynchronousReadIndirectBufferFromRemoteFS( + AsynchronousReaderPtr reader_, + const ReadSettings & settings_, + std::shared_ptr impl_, + size_t min_bytes_for_seek_) + : ReadBufferFromFileBase(settings_.remote_fs_buffer_size, nullptr, 0) + , reader(reader_) + , priority(settings_.priority) + , impl(impl_) + , prefetch_buffer(settings_.remote_fs_buffer_size) + , min_bytes_for_seek(min_bytes_for_seek_) + , must_read_until_position(settings_.must_read_until_position) +{ + ProfileEvents::increment(ProfileEvents::RemoteFSBuffers); +} + + +String AsynchronousReadIndirectBufferFromRemoteFS::getFileName() const +{ + return impl->getFileName(); +} + + +bool AsynchronousReadIndirectBufferFromRemoteFS::hasPendingDataToRead() +{ + /// Position is set only for MergeTree tables. + if (read_until_position) + { + /// Everything is already read. + if (file_offset_of_buffer_end == read_until_position) + return false; + + if (file_offset_of_buffer_end > read_until_position) + throw Exception(ErrorCodes::LOGICAL_ERROR, "Read beyond last offset ({} > {})", + file_offset_of_buffer_end, read_until_position); + } + else if (must_read_until_position) + throw Exception(ErrorCodes::LOGICAL_ERROR, + "Reading for MergeTree family tables must be done with last position boundary"); + + return true; +} + + +std::future AsynchronousReadIndirectBufferFromRemoteFS::readInto(char * data, size_t size) +{ + IAsynchronousReader::Request request; + request.descriptor = std::make_shared(impl); + request.buf = data; + request.size = size; + request.offset = file_offset_of_buffer_end; + request.priority = priority; + + if (bytes_to_ignore) + { + request.ignore = bytes_to_ignore; + bytes_to_ignore = 0; + } + return reader->submit(request); +} + + +void AsynchronousReadIndirectBufferFromRemoteFS::prefetch() +{ + if (prefetch_future.valid()) + return; + + /// Check boundary, which was set in readUntilPosition(). + if (!hasPendingDataToRead()) + return; + + /// Prefetch even in case hasPendingData() == true. + prefetch_future = readInto(prefetch_buffer.data(), prefetch_buffer.size()); + ProfileEvents::increment(ProfileEvents::RemoteFSPrefetches); +} + + +void AsynchronousReadIndirectBufferFromRemoteFS::setReadUntilPosition(size_t position) +{ + if (prefetch_future.valid()) + throw Exception(ErrorCodes::LOGICAL_ERROR, "Prefetch is valid in readUntilPosition"); + + read_until_position = position; + impl->setReadUntilPosition(read_until_position); +} + + +void AsynchronousReadIndirectBufferFromRemoteFS::setReadUntilEnd() +{ + if (prefetch_future.valid()) + throw Exception(ErrorCodes::LOGICAL_ERROR, "Prefetch is valid in readUntilEnd"); + + read_until_position = impl->getFileSize(); + impl->setReadUntilPosition(read_until_position); +} + + +bool AsynchronousReadIndirectBufferFromRemoteFS::nextImpl() +{ + if (!hasPendingDataToRead()) + return false; + + size_t size = 0; + + if (prefetch_future.valid()) + { + ProfileEvents::increment(ProfileEvents::RemoteFSPrefetchedReads); + + CurrentMetrics::Increment metric_increment{CurrentMetrics::AsynchronousReadWait}; + Stopwatch watch; + { + size = prefetch_future.get(); + if (size) + { + memory.swap(prefetch_buffer); + set(memory.data(), memory.size()); + working_buffer.resize(size); + file_offset_of_buffer_end += size; + } + } + + watch.stop(); + ProfileEvents::increment(ProfileEvents::AsynchronousReadWaitMicroseconds, watch.elapsedMicroseconds()); + } + else + { + ProfileEvents::increment(ProfileEvents::RemoteFSUnprefetchedReads); + size = readInto(memory.data(), memory.size()).get(); + + if (size) + { + set(memory.data(), memory.size()); + working_buffer.resize(size); + file_offset_of_buffer_end += size; + } + } + + prefetch_future = {}; + return size; +} + + +off_t AsynchronousReadIndirectBufferFromRemoteFS::seek(off_t offset_, int whence) +{ + ProfileEvents::increment(ProfileEvents::RemoteFSSeeks); + + if (whence == SEEK_CUR) + { + /// If position within current working buffer - shift pos. + if (!working_buffer.empty() && static_cast(getPosition() + offset_) < file_offset_of_buffer_end) + { + pos += offset_; + return getPosition(); + } + else + { + file_offset_of_buffer_end += offset_; + } + } + else if (whence == SEEK_SET) + { + /// If position is within current working buffer - shift pos. + if (!working_buffer.empty() + && static_cast(offset_) >= file_offset_of_buffer_end - working_buffer.size() + && size_t(offset_) < file_offset_of_buffer_end) + { + pos = working_buffer.end() - (file_offset_of_buffer_end - offset_); + + assert(pos >= working_buffer.begin()); + assert(pos <= working_buffer.end()); + + return getPosition(); + } + else + { + file_offset_of_buffer_end = offset_; + } + } + else + throw Exception("Only SEEK_SET or SEEK_CUR modes are allowed.", ErrorCodes::CANNOT_SEEK_THROUGH_FILE); + + if (prefetch_future.valid()) + { + ProfileEvents::increment(ProfileEvents::RemoteFSCancelledPrefetches); + prefetch_future.wait(); + prefetch_future = {}; + } + + pos = working_buffer.end(); + + /// Note: we read in range [file_offset_of_buffer_end, read_until_position). + if (file_offset_of_buffer_end < read_until_position + && static_cast(file_offset_of_buffer_end) >= getPosition() + && static_cast(file_offset_of_buffer_end) < getPosition() + static_cast(min_bytes_for_seek)) + { + /** + * Lazy ignore. Save number of bytes to ignore and ignore it either for prefetch buffer or current buffer. + */ + bytes_to_ignore = file_offset_of_buffer_end - getPosition(); + } + else + { + impl->reset(); + } + + return file_offset_of_buffer_end; +} + + +void AsynchronousReadIndirectBufferFromRemoteFS::finalize() +{ + if (prefetch_future.valid()) + { + ProfileEvents::increment(ProfileEvents::RemoteFSUnusedPrefetches); + prefetch_future.wait(); + prefetch_future = {}; + } +} + + +AsynchronousReadIndirectBufferFromRemoteFS::~AsynchronousReadIndirectBufferFromRemoteFS() +{ + finalize(); +} + +} diff --git a/src/Disks/IO/AsynchronousReadIndirectBufferFromRemoteFS.h b/src/Disks/IO/AsynchronousReadIndirectBufferFromRemoteFS.h new file mode 100644 index 00000000000..d8fad08bc8a --- /dev/null +++ b/src/Disks/IO/AsynchronousReadIndirectBufferFromRemoteFS.h @@ -0,0 +1,84 @@ +#pragma once + +#if !defined(ARCADIA_BUILD) +#include +#endif + +#include +#include +#include + + +namespace DB +{ + +class ReadBufferFromRemoteFSGather; +struct ReadSettings; + +/** + * Reads data from S3/HDFS/Web using stored paths in metadata. +* This class is an asynchronous version of ReadIndirectBufferFromRemoteFS. +* +* Buffers chain for diskS3: +* AsynchronousIndirectReadBufferFromRemoteFS -> ReadBufferFromRemoteFS -> +* -> ReadBufferFromS3 -> ReadBufferFromIStream. +* +* Buffers chain for diskWeb: +* AsynchronousIndirectReadBufferFromRemoteFS -> ReadBufferFromRemoteFS -> +* -> ReadIndirectBufferFromWebServer -> ReadBufferFromHttp -> ReadBufferFromIStream. +* +* We pass either `memory` or `prefetch_buffer` through all this chain and return it back. +*/ +class AsynchronousReadIndirectBufferFromRemoteFS : public ReadBufferFromFileBase +{ +public: + explicit AsynchronousReadIndirectBufferFromRemoteFS( + AsynchronousReaderPtr reader_, const ReadSettings & settings_, + std::shared_ptr impl_, + size_t min_bytes_for_seek = 1024 * 1024); + + ~AsynchronousReadIndirectBufferFromRemoteFS() override; + + off_t seek(off_t offset_, int whence) override; + + off_t getPosition() override { return file_offset_of_buffer_end - available(); } + + String getFileName() const override; + + void prefetch() override; + + void setReadUntilPosition(size_t position) override; + + void setReadUntilEnd() override; + +private: + bool nextImpl() override; + + void finalize(); + + bool hasPendingDataToRead(); + + std::future readInto(char * data, size_t size); + + AsynchronousReaderPtr reader; + + Int32 priority; + + std::shared_ptr impl; + + std::future prefetch_future; + + size_t file_offset_of_buffer_end = 0; + + Memory<> prefetch_buffer; + + size_t min_bytes_for_seek; + + size_t bytes_to_ignore = 0; + + size_t read_until_position = 0; + + bool must_read_until_position; +}; + +} diff --git a/src/Disks/IO/ReadBufferFromRemoteFSGather.cpp b/src/Disks/IO/ReadBufferFromRemoteFSGather.cpp new file mode 100644 index 00000000000..a9a94fa63e2 --- /dev/null +++ b/src/Disks/IO/ReadBufferFromRemoteFSGather.cpp @@ -0,0 +1,182 @@ +#include "ReadBufferFromRemoteFSGather.h" + +#include +#include +#include + +#if USE_AWS_S3 +#include +#endif + +#if USE_HDFS +#include +#endif + +#include +#include +#include + +namespace fs = std::filesystem; + +namespace DB +{ + +#if USE_AWS_S3 +SeekableReadBufferPtr ReadBufferFromS3Gather::createImplementationBuffer(const String & path, size_t read_until_position_) const +{ + return std::make_unique(client_ptr, bucket, + fs::path(metadata.remote_fs_root_path) / path, max_single_read_retries, settings, threadpool_read, read_until_position_); +} +#endif + + +SeekableReadBufferPtr ReadBufferFromWebServerGather::createImplementationBuffer(const String & path, size_t read_until_position_) const +{ + return std::make_unique(fs::path(uri) / path, context, settings, threadpool_read, read_until_position_); +} + + +#if USE_HDFS +SeekableReadBufferPtr ReadBufferFromHDFSGather::createImplementationBuffer(const String & path, size_t read_until_position_) const +{ + return std::make_unique(hdfs_uri, fs::path(hdfs_directory) / path, config, buf_size, read_until_position_); +} +#endif + + +ReadBufferFromRemoteFSGather::ReadBufferFromRemoteFSGather(const RemoteMetadata & metadata_, const String & path_) + : ReadBuffer(nullptr, 0) + , metadata(metadata_) + , canonical_path(path_) +{ +} + + +size_t ReadBufferFromRemoteFSGather::readInto(char * data, size_t size, size_t offset, size_t ignore) +{ + /** + * Set `data` to current working and internal buffers. + * Internal buffer with size `size`. Working buffer with size 0. + */ + set(data, size); + + absolute_position = offset; + bytes_to_ignore = ignore; + + auto result = nextImpl(); + bytes_to_ignore = 0; + + if (result) + return working_buffer.size(); + + return 0; +} + + +void ReadBufferFromRemoteFSGather::initialize() +{ + /// One clickhouse file can be split into multiple files in remote fs. + auto current_buf_offset = absolute_position; + for (size_t i = 0; i < metadata.remote_fs_objects.size(); ++i) + { + const auto & [file_path, size] = metadata.remote_fs_objects[i]; + + if (size > current_buf_offset) + { + /// Do not create a new buffer if we already have what we need. + if (!current_buf || current_buf_idx != i) + { + current_buf = createImplementationBuffer(file_path, read_until_position); + current_buf_idx = i; + } + + current_buf->seek(current_buf_offset, SEEK_SET); + return; + } + + current_buf_offset -= size; + } + current_buf_idx = metadata.remote_fs_objects.size(); + current_buf = nullptr; +} + + +bool ReadBufferFromRemoteFSGather::nextImpl() +{ + /// Find first available buffer that fits to given offset. + if (!current_buf) + initialize(); + + /// If current buffer has remaining data - use it. + if (current_buf) + { + if (readImpl()) + return true; + } + else + return false; + + /// If there is no available buffers - nothing to read. + if (current_buf_idx + 1 >= metadata.remote_fs_objects.size()) + return false; + + ++current_buf_idx; + + const auto & current_path = metadata.remote_fs_objects[current_buf_idx].first; + current_buf = createImplementationBuffer(current_path, read_until_position); + + return readImpl(); +} + + +bool ReadBufferFromRemoteFSGather::readImpl() +{ + swap(*current_buf); + + /** + * Lazy seek is performed here. + * In asynchronous buffer when seeking to offset in range [pos, pos + min_bytes_for_seek] + * we save how many bytes need to be ignored (new_offset - position() bytes). + */ + if (bytes_to_ignore) + current_buf->ignore(bytes_to_ignore); + + auto result = current_buf->next(); + + swap(*current_buf); + + if (result) + absolute_position += working_buffer.size(); + + return result; +} + + +void ReadBufferFromRemoteFSGather::setReadUntilPosition(size_t position) +{ + read_until_position = position; + reset(); +} + + +void ReadBufferFromRemoteFSGather::reset() +{ + current_buf.reset(); +} + + +String ReadBufferFromRemoteFSGather::getFileName() const +{ + return canonical_path; +} + + +size_t ReadBufferFromRemoteFSGather::getFileSize() const +{ + size_t size = 0; + for (const auto & object : metadata.remote_fs_objects) + size += object.second; + return size; +} + +} diff --git a/src/Disks/IO/ReadBufferFromRemoteFSGather.h b/src/Disks/IO/ReadBufferFromRemoteFSGather.h new file mode 100644 index 00000000000..5bc7d4e4819 --- /dev/null +++ b/src/Disks/IO/ReadBufferFromRemoteFSGather.h @@ -0,0 +1,161 @@ +#pragma once + +#if !defined(ARCADIA_BUILD) +#include +#endif + +#include +#include +#include + +namespace Aws +{ +namespace S3 +{ +class S3Client; +} +} + +namespace DB +{ + +/** + * Remote disk might need to split one clickhouse file into multiple files in remote fs. + * This class works like a proxy to allow transition from one file into multiple. + */ +class ReadBufferFromRemoteFSGather : public ReadBuffer +{ +friend class ReadIndirectBufferFromRemoteFS; + +public: + explicit ReadBufferFromRemoteFSGather(const RemoteMetadata & metadata_, const String & path_); + + String getFileName() const; + + void reset(); + + void setReadUntilPosition(size_t position) override; + + size_t readInto(char * data, size_t size, size_t offset, size_t ignore = 0); + + size_t getFileSize() const; + +protected: + virtual SeekableReadBufferPtr createImplementationBuffer(const String & path, size_t read_until_position) const = 0; + + RemoteMetadata metadata; + +private: + bool nextImpl() override; + + void initialize(); + + bool readImpl(); + + SeekableReadBufferPtr current_buf; + + size_t current_buf_idx = 0; + + size_t absolute_position = 0; + + size_t bytes_to_ignore = 0; + + size_t read_until_position = 0; + + String canonical_path; +}; + + +#if USE_AWS_S3 +/// Reads data from S3 using stored paths in metadata. +class ReadBufferFromS3Gather final : public ReadBufferFromRemoteFSGather +{ +public: + ReadBufferFromS3Gather( + const String & path_, + std::shared_ptr client_ptr_, + const String & bucket_, + IDiskRemote::Metadata metadata_, + size_t max_single_read_retries_, + const ReadSettings & settings_, + bool threadpool_read_ = false) + : ReadBufferFromRemoteFSGather(metadata_, path_) + , client_ptr(std::move(client_ptr_)) + , bucket(bucket_) + , max_single_read_retries(max_single_read_retries_) + , settings(settings_) + , threadpool_read(threadpool_read_) + { + } + + SeekableReadBufferPtr createImplementationBuffer(const String & path, size_t read_until_position) const override; + +private: + std::shared_ptr client_ptr; + String bucket; + UInt64 max_single_read_retries; + ReadSettings settings; + bool threadpool_read; +}; +#endif + + +class ReadBufferFromWebServerGather final : public ReadBufferFromRemoteFSGather +{ +public: + ReadBufferFromWebServerGather( + const String & path_, + const String & uri_, + RemoteMetadata metadata_, + ContextPtr context_, + size_t threadpool_read_, + const ReadSettings & settings_) + : ReadBufferFromRemoteFSGather(metadata_, path_) + , uri(uri_) + , context(context_) + , threadpool_read(threadpool_read_) + , settings(settings_) + { + } + + SeekableReadBufferPtr createImplementationBuffer(const String & path, size_t read_until_position) const override; + +private: + String uri; + ContextPtr context; + bool threadpool_read; + ReadSettings settings; +}; + + +#if USE_HDFS +/// Reads data from HDFS using stored paths in metadata. +class ReadBufferFromHDFSGather final : public ReadBufferFromRemoteFSGather +{ +public: + ReadBufferFromHDFSGather( + const String & path_, + const Poco::Util::AbstractConfiguration & config_, + const String & hdfs_uri_, + IDiskRemote::Metadata metadata_, + size_t buf_size_) + : ReadBufferFromRemoteFSGather(metadata_, path_) + , config(config_) + , buf_size(buf_size_) + { + const size_t begin_of_path = hdfs_uri_.find('/', hdfs_uri_.find("//") + 2); + hdfs_directory = hdfs_uri_.substr(begin_of_path); + hdfs_uri = hdfs_uri_.substr(0, begin_of_path); + } + + SeekableReadBufferPtr createImplementationBuffer(const String & path, size_t read_until_position) const override; + +private: + const Poco::Util::AbstractConfiguration & config; + String hdfs_uri; + String hdfs_directory; + size_t buf_size; +}; +#endif + +} diff --git a/src/Disks/IO/ReadBufferFromWebServer.cpp b/src/Disks/IO/ReadBufferFromWebServer.cpp new file mode 100644 index 00000000000..bda20f78e79 --- /dev/null +++ b/src/Disks/IO/ReadBufferFromWebServer.cpp @@ -0,0 +1,198 @@ +#include "ReadBufferFromWebServer.h" + +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace DB +{ + +namespace ErrorCodes +{ + extern const int CANNOT_SEEK_THROUGH_FILE; + extern const int SEEK_POSITION_OUT_OF_BOUND; + extern const int LOGICAL_ERROR; +} + + +static constexpr size_t HTTP_MAX_TRIES = 10; +static constexpr size_t WAIT_INIT = 100; + +ReadBufferFromWebServer::ReadBufferFromWebServer( + const String & url_, + ContextPtr context_, + const ReadSettings & settings_, + bool use_external_buffer_, + size_t last_offset_) + : SeekableReadBuffer(nullptr, 0) + , log(&Poco::Logger::get("ReadBufferFromWebServer")) + , context(context_) + , url(url_) + , buf_size(settings_.remote_fs_buffer_size) + , read_settings(settings_) + , use_external_buffer(use_external_buffer_) + , last_offset(last_offset_) +{ +} + + +std::unique_ptr ReadBufferFromWebServer::initialize() +{ + Poco::URI uri(url); + + ReadWriteBufferFromHTTP::HTTPHeaderEntries headers; + + if (last_offset) + { + if (last_offset < offset) + throw Exception(ErrorCodes::LOGICAL_ERROR, "Attempt to read beyond right offset ({} > {})", offset, last_offset - 1); + + headers.emplace_back(std::make_pair("Range", fmt::format("bytes={}-{}", offset, last_offset - 1))); + LOG_DEBUG(log, "Reading with range: {}-{}", offset, last_offset); + } + else + { + headers.emplace_back(std::make_pair("Range", fmt::format("bytes={}-", offset))); + LOG_DEBUG(log, "Reading from offset: {}", offset); + } + + const auto & settings = context->getSettingsRef(); + const auto & config = context->getConfigRef(); + Poco::Timespan http_keep_alive_timeout{config.getUInt("keep_alive_timeout", 20), 0}; + + return std::make_unique( + uri, + Poco::Net::HTTPRequest::HTTP_GET, + ReadWriteBufferFromHTTP::OutStreamCallback(), + ConnectionTimeouts(std::max(Poco::Timespan(settings.http_connection_timeout.totalSeconds(), 0), Poco::Timespan(20, 0)), + settings.http_send_timeout, + std::max(Poco::Timespan(settings.http_receive_timeout.totalSeconds(), 0), Poco::Timespan(20, 0)), + settings.tcp_keep_alive_timeout, + http_keep_alive_timeout), + 0, + Poco::Net::HTTPBasicCredentials{}, + buf_size, + read_settings, + headers, + context->getRemoteHostFilter(), + use_external_buffer); +} + + +void ReadBufferFromWebServer::initializeWithRetry() +{ + /// Initialize impl with retry. + size_t milliseconds_to_wait = WAIT_INIT; + for (size_t i = 0; i < HTTP_MAX_TRIES; ++i) + { + try + { + impl = initialize(); + + if (use_external_buffer) + { + /** + * See comment 30 lines lower. + */ + impl->set(internal_buffer.begin(), internal_buffer.size()); + assert(working_buffer.begin() != nullptr); + assert(!internal_buffer.empty()); + } + + break; + } + catch (Poco::Exception & e) + { + if (i == HTTP_MAX_TRIES - 1) + throw; + + LOG_ERROR(&Poco::Logger::get("ReadBufferFromWeb"), "Error: {}, code: {}", e.what(), e.code()); + sleepForMilliseconds(milliseconds_to_wait); + milliseconds_to_wait *= 2; + } + } +} + + +bool ReadBufferFromWebServer::nextImpl() +{ + if (last_offset) + { + if (last_offset == offset) + return false; + + if (last_offset < offset) + throw Exception(ErrorCodes::LOGICAL_ERROR, "Attempt to read beyond right offset ({} > {})", offset, last_offset - 1); + } + + if (impl) + { + if (use_external_buffer) + { + /** + * use_external_buffer -- means we read into the buffer which + * was passed to us from somewhere else. We do not check whether + * previously returned buffer was read or not, because this branch + * means we are prefetching data, each nextImpl() call we can fill + * a different buffer. + */ + impl->set(internal_buffer.begin(), internal_buffer.size()); + assert(working_buffer.begin() != nullptr); + assert(!internal_buffer.empty()); + } + else + { + /** + * impl was initialized before, pass position() to it to make + * sure there is no pending data which was not read, because + * this branch means we read sequentially. + */ + impl->position() = position(); + assert(!impl->hasPendingData()); + } + } + else + { + initializeWithRetry(); + } + + auto result = impl->next(); + if (result) + { + BufferBase::set(impl->buffer().begin(), impl->buffer().size(), impl->offset()); + offset += working_buffer.size(); + } + + return result; +} + + +off_t ReadBufferFromWebServer::seek(off_t offset_, int whence) +{ + if (impl) + throw Exception(ErrorCodes::CANNOT_SEEK_THROUGH_FILE, "Seek is allowed only before first read attempt from the buffer"); + + if (whence != SEEK_SET) + throw Exception(ErrorCodes::CANNOT_SEEK_THROUGH_FILE, "Only SEEK_SET mode is allowed"); + + if (offset_ < 0) + throw Exception(ErrorCodes::SEEK_POSITION_OUT_OF_BOUND, "Seek position is out of bounds. Offset: {}", std::to_string(offset_)); + + offset = offset_; + + return offset; +} + + +off_t ReadBufferFromWebServer::getPosition() +{ + return offset - available(); +} + +} diff --git a/src/Disks/ReadIndirectBufferFromWebServer.h b/src/Disks/IO/ReadBufferFromWebServer.h similarity index 56% rename from src/Disks/ReadIndirectBufferFromWebServer.h rename to src/Disks/IO/ReadBufferFromWebServer.h index 04bb155f83b..1ffb8589392 100644 --- a/src/Disks/ReadIndirectBufferFromWebServer.h +++ b/src/Disks/IO/ReadBufferFromWebServer.h @@ -2,6 +2,7 @@ #include #include +#include #include @@ -11,15 +12,16 @@ namespace DB /* Read buffer, which reads via http, but is used as ReadBufferFromFileBase. * Used to read files, hosted on a web server with static files. * - * Usage: ReadIndirectBufferFromRemoteFS -> SeekAvoidingReadBuffer -> ReadIndirectBufferFromWebServer -> ReadWriteBufferFromHTTP. + * Usage: ReadIndirectBufferFromRemoteFS -> SeekAvoidingReadBuffer -> ReadBufferFromWebServer -> ReadWriteBufferFromHTTP. */ -class ReadIndirectBufferFromWebServer : public BufferWithOwnMemory +class ReadBufferFromWebServer : public SeekableReadBuffer { public: - explicit ReadIndirectBufferFromWebServer(const String & url_, - ContextPtr context_, - size_t buf_size_ = DBMS_DEFAULT_BUFFER_SIZE, - size_t backoff_threshold_ = 10000, size_t max_tries_ = 4); + explicit ReadBufferFromWebServer( + const String & url_, ContextPtr context_, + const ReadSettings & settings_ = {}, + bool use_external_buffer_ = false, + size_t last_offset = 0); bool nextImpl() override; @@ -30,6 +32,8 @@ public: private: std::unique_ptr initialize(); + void initializeWithRetry(); + Poco::Logger * log; ContextPtr context; @@ -40,8 +44,11 @@ private: off_t offset = 0; - size_t backoff_threshold_ms; - size_t max_tries; + ReadSettings read_settings; + + bool use_external_buffer; + + off_t last_offset = 0; }; } diff --git a/src/Disks/IO/ReadIndirectBufferFromRemoteFS.cpp b/src/Disks/IO/ReadIndirectBufferFromRemoteFS.cpp new file mode 100644 index 00000000000..112124d9fd7 --- /dev/null +++ b/src/Disks/IO/ReadIndirectBufferFromRemoteFS.cpp @@ -0,0 +1,85 @@ +#include "ReadIndirectBufferFromRemoteFS.h" + +#include + + +namespace DB +{ + +namespace ErrorCodes +{ + extern const int CANNOT_SEEK_THROUGH_FILE; +} + + +ReadIndirectBufferFromRemoteFS::ReadIndirectBufferFromRemoteFS( + std::shared_ptr impl_) : impl(std::move(impl_)) +{ +} + + +off_t ReadIndirectBufferFromRemoteFS::getPosition() +{ + return impl->absolute_position - available(); +} + + +String ReadIndirectBufferFromRemoteFS::getFileName() const +{ + return impl->getFileName(); +} + + +off_t ReadIndirectBufferFromRemoteFS::seek(off_t offset_, int whence) +{ + if (whence == SEEK_CUR) + { + /// If position within current working buffer - shift pos. + if (!working_buffer.empty() && size_t(getPosition() + offset_) < impl->absolute_position) + { + pos += offset_; + return getPosition(); + } + else + { + impl->absolute_position += offset_; + } + } + else if (whence == SEEK_SET) + { + /// If position within current working buffer - shift pos. + if (!working_buffer.empty() + && size_t(offset_) >= impl->absolute_position - working_buffer.size() + && size_t(offset_) < impl->absolute_position) + { + pos = working_buffer.end() - (impl->absolute_position - offset_); + return getPosition(); + } + else + { + impl->absolute_position = offset_; + } + } + else + throw Exception("Only SEEK_SET or SEEK_CUR modes are allowed.", ErrorCodes::CANNOT_SEEK_THROUGH_FILE); + + impl->reset(); + pos = working_buffer.end(); + + return impl->absolute_position; +} + + +bool ReadIndirectBufferFromRemoteFS::nextImpl() +{ + /// Transfer current position and working_buffer to actual ReadBuffer + swap(*impl); + /// Position and working_buffer will be updated in next() call + auto result = impl->next(); + /// and assigned to current buffer. + swap(*impl); + + return result; +} + +} diff --git a/src/Disks/IO/ReadIndirectBufferFromRemoteFS.h b/src/Disks/IO/ReadIndirectBufferFromRemoteFS.h new file mode 100644 index 00000000000..0c8b1b4dd21 --- /dev/null +++ b/src/Disks/IO/ReadIndirectBufferFromRemoteFS.h @@ -0,0 +1,36 @@ +#pragma once + +#include +#include +#include +#include + + +namespace DB +{ + +class ReadBufferFromRemoteFSGather; + +/** +* Reads data from S3/HDFS/Web using stored paths in metadata. +* There is asynchronous version of this class -- AsynchronousReadIndirectBufferFromRemoteFS. +*/ +class ReadIndirectBufferFromRemoteFS : public ReadBufferFromFileBase +{ + +public: + explicit ReadIndirectBufferFromRemoteFS(std::shared_ptr impl_); + + off_t seek(off_t offset_, int whence) override; + + off_t getPosition() override; + + String getFileName() const override; + +private: + bool nextImpl() override; + + std::shared_ptr impl; +}; + +} diff --git a/src/Disks/IO/ThreadPoolRemoteFSReader.cpp b/src/Disks/IO/ThreadPoolRemoteFSReader.cpp new file mode 100644 index 00000000000..945b2d3eb7e --- /dev/null +++ b/src/Disks/IO/ThreadPoolRemoteFSReader.cpp @@ -0,0 +1,68 @@ +#include "ThreadPoolRemoteFSReader.h" + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + + +namespace ProfileEvents +{ + extern const Event RemoteFSReadMicroseconds; + extern const Event RemoteFSReadBytes; +} + +namespace CurrentMetrics +{ + extern const Metric Read; +} + +namespace DB +{ + +size_t ThreadPoolRemoteFSReader::RemoteFSFileDescriptor::readInto(char * data, size_t size, size_t offset, size_t ignore) +{ + return reader->readInto(data, size, offset, ignore); +} + + +ThreadPoolRemoteFSReader::ThreadPoolRemoteFSReader(size_t pool_size, size_t queue_size_) + : pool(pool_size, pool_size, queue_size_) +{ +} + + +std::future ThreadPoolRemoteFSReader::submit(Request request) +{ + auto task = std::make_shared>([request] + { + setThreadName("ThreadPoolRemoteFSRead"); + CurrentMetrics::Increment metric_increment{CurrentMetrics::Read}; + auto * remote_fs_fd = assert_cast(request.descriptor.get()); + + Stopwatch watch(CLOCK_MONOTONIC); + auto bytes_read = remote_fs_fd->readInto(request.buf, request.size, request.offset, request.ignore); + watch.stop(); + + ProfileEvents::increment(ProfileEvents::RemoteFSReadMicroseconds, watch.elapsedMicroseconds()); + ProfileEvents::increment(ProfileEvents::RemoteFSReadBytes, bytes_read); + + return bytes_read; + }); + + auto future = task->get_future(); + + /// ThreadPool is using "bigger is higher priority" instead of "smaller is more priority". + pool.scheduleOrThrow([task]{ (*task)(); }, -request.priority); + + return future; +} +} diff --git a/src/Disks/IO/ThreadPoolRemoteFSReader.h b/src/Disks/IO/ThreadPoolRemoteFSReader.h new file mode 100644 index 00000000000..c300162e214 --- /dev/null +++ b/src/Disks/IO/ThreadPoolRemoteFSReader.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include +#include +#include + + +namespace DB +{ +class ReadBufferFromRemoteFSGather; + +class ThreadPoolRemoteFSReader : public IAsynchronousReader +{ + +private: + ThreadPool pool; + +public: + ThreadPoolRemoteFSReader(size_t pool_size, size_t queue_size_); + + std::future submit(Request request) override; + + struct RemoteFSFileDescriptor; +}; + + +struct ThreadPoolRemoteFSReader::RemoteFSFileDescriptor : public IFileDescriptor +{ +public: + RemoteFSFileDescriptor(std::shared_ptr reader_) : reader(reader_) {} + + size_t readInto(char * data, size_t size, size_t offset, size_t ignore = 0); + +private: + std::shared_ptr reader; +}; + +} diff --git a/src/Disks/WriteIndirectBufferFromRemoteFS.cpp b/src/Disks/IO/WriteIndirectBufferFromRemoteFS.cpp similarity index 100% rename from src/Disks/WriteIndirectBufferFromRemoteFS.cpp rename to src/Disks/IO/WriteIndirectBufferFromRemoteFS.cpp diff --git a/src/Disks/WriteIndirectBufferFromRemoteFS.h b/src/Disks/IO/WriteIndirectBufferFromRemoteFS.h similarity index 95% rename from src/Disks/WriteIndirectBufferFromRemoteFS.h rename to src/Disks/IO/WriteIndirectBufferFromRemoteFS.h index 69f5705356e..ef021686221 100644 --- a/src/Disks/WriteIndirectBufferFromRemoteFS.h +++ b/src/Disks/IO/WriteIndirectBufferFromRemoteFS.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #include #include diff --git a/src/Disks/ReadIndirectBufferFromRemoteFS.cpp b/src/Disks/ReadIndirectBufferFromRemoteFS.cpp deleted file mode 100644 index 3bc22167f50..00000000000 --- a/src/Disks/ReadIndirectBufferFromRemoteFS.cpp +++ /dev/null @@ -1,143 +0,0 @@ -#include "ReadIndirectBufferFromRemoteFS.h" - -#include -#include -#include - - -namespace DB -{ - -namespace ErrorCodes -{ - extern const int CANNOT_SEEK_THROUGH_FILE; -} - - -template -ReadIndirectBufferFromRemoteFS::ReadIndirectBufferFromRemoteFS( - RemoteMetadata metadata_) - : metadata(std::move(metadata_)) -{ -} - - -template -off_t ReadIndirectBufferFromRemoteFS::seek(off_t offset_, int whence) -{ - if (whence == SEEK_CUR) - { - /// If position within current working buffer - shift pos. - if (!working_buffer.empty() && size_t(getPosition() + offset_) < absolute_position) - { - pos += offset_; - return getPosition(); - } - else - { - absolute_position += offset_; - } - } - else if (whence == SEEK_SET) - { - /// If position within current working buffer - shift pos. - if (!working_buffer.empty() && size_t(offset_) >= absolute_position - working_buffer.size() - && size_t(offset_) < absolute_position) - { - pos = working_buffer.end() - (absolute_position - offset_); - return getPosition(); - } - else - { - absolute_position = offset_; - } - } - else - throw Exception("Only SEEK_SET or SEEK_CUR modes are allowed.", ErrorCodes::CANNOT_SEEK_THROUGH_FILE); - - current_buf = initialize(); - pos = working_buffer.end(); - - return absolute_position; -} - - -template -std::unique_ptr ReadIndirectBufferFromRemoteFS::initialize() -{ - size_t offset = absolute_position; - for (size_t i = 0; i < metadata.remote_fs_objects.size(); ++i) - { - current_buf_idx = i; - const auto & [file_path, size] = metadata.remote_fs_objects[i]; - if (size > offset) - { - auto buf = createReadBuffer(file_path); - buf->seek(offset, SEEK_SET); - return buf; - } - offset -= size; - } - return nullptr; -} - - -template -bool ReadIndirectBufferFromRemoteFS::nextImpl() -{ - /// Find first available buffer that fits to given offset. - if (!current_buf) - current_buf = initialize(); - - /// If current buffer has remaining data - use it. - if (current_buf) - { - bool result = nextAndShiftPosition(); - if (result) - return true; - } - - /// If there is no available buffers - nothing to read. - if (current_buf_idx + 1 >= metadata.remote_fs_objects.size()) - return false; - - ++current_buf_idx; - const auto & path = metadata.remote_fs_objects[current_buf_idx].first; - - current_buf = createReadBuffer(path); - - return nextAndShiftPosition(); -} - -template -bool ReadIndirectBufferFromRemoteFS::nextAndShiftPosition() -{ - /// Transfer current position and working_buffer to actual ReadBuffer - swap(*current_buf); - /// Position and working_buffer will be updated in next() call - auto result = current_buf->next(); - /// and assigned to current buffer. - swap(*current_buf); - - /// absolute position is shifted by a data size that was read in next() call above. - if (result) - absolute_position += working_buffer.size(); - - return result; -} - - -#if USE_AWS_S3 -template -class ReadIndirectBufferFromRemoteFS; -#endif - -#if USE_HDFS -template -class ReadIndirectBufferFromRemoteFS; -#endif - -template -class ReadIndirectBufferFromRemoteFS; - -} diff --git a/src/Disks/ReadIndirectBufferFromRemoteFS.h b/src/Disks/ReadIndirectBufferFromRemoteFS.h deleted file mode 100644 index d3cc6aeddd0..00000000000 --- a/src/Disks/ReadIndirectBufferFromRemoteFS.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -#if !defined(ARCADIA_BUILD) -#include -#endif - -#include -#include -#include - - -namespace DB -{ - -/// Reads data from S3/HDFS using stored paths in metadata. -template -class ReadIndirectBufferFromRemoteFS : public ReadBufferFromFileBase -{ -public: - explicit ReadIndirectBufferFromRemoteFS(RemoteMetadata metadata_); - - off_t seek(off_t offset_, int whence) override; - - off_t getPosition() override { return absolute_position - available(); } - - String getFileName() const override { return metadata.metadata_file_path; } - - virtual std::unique_ptr createReadBuffer(const String & path) = 0; - -protected: - RemoteMetadata metadata; - -private: - std::unique_ptr initialize(); - - bool nextAndShiftPosition(); - - bool nextImpl() override; - - size_t absolute_position = 0; - - size_t current_buf_idx = 0; - - std::unique_ptr current_buf; -}; - -} diff --git a/src/Disks/ReadIndirectBufferFromWebServer.cpp b/src/Disks/ReadIndirectBufferFromWebServer.cpp deleted file mode 100644 index f4c01784542..00000000000 --- a/src/Disks/ReadIndirectBufferFromWebServer.cpp +++ /dev/null @@ -1,146 +0,0 @@ -#include "ReadIndirectBufferFromWebServer.h" - -#include -#include -#include -#include -#include -#include -#include -#include - - -namespace DB -{ - -namespace ErrorCodes -{ - extern const int CANNOT_SEEK_THROUGH_FILE; - extern const int SEEK_POSITION_OUT_OF_BOUND; - extern const int NETWORK_ERROR; -} - -static const auto WAIT_MS = 10; - - -ReadIndirectBufferFromWebServer::ReadIndirectBufferFromWebServer( - const String & url_, ContextPtr context_, size_t buf_size_, size_t backoff_threshold_, size_t max_tries_) - : BufferWithOwnMemory(buf_size_) - , log(&Poco::Logger::get("ReadIndirectBufferFromWebServer")) - , context(context_) - , url(url_) - , buf_size(buf_size_) - , backoff_threshold_ms(backoff_threshold_) - , max_tries(max_tries_) -{ -} - - -std::unique_ptr ReadIndirectBufferFromWebServer::initialize() -{ - Poco::URI uri(url); - - ReadWriteBufferFromHTTP::HTTPHeaderEntries headers; - headers.emplace_back(std::make_pair("Range", fmt::format("bytes={}-", offset))); - const auto & settings = context->getSettingsRef(); - LOG_DEBUG(log, "Reading from offset: {}", offset); - const auto & config = context->getConfigRef(); - Poco::Timespan http_keep_alive_timeout{config.getUInt("keep_alive_timeout", 20), 0}; - - return std::make_unique( - uri, - Poco::Net::HTTPRequest::HTTP_GET, - ReadWriteBufferFromHTTP::OutStreamCallback(), - ConnectionTimeouts(std::max(Poco::Timespan(settings.http_connection_timeout.totalSeconds(), 0), Poco::Timespan(20, 0)), - settings.http_send_timeout, - std::max(Poco::Timespan(settings.http_receive_timeout.totalSeconds(), 0), Poco::Timespan(20, 0)), - settings.tcp_keep_alive_timeout, - http_keep_alive_timeout), - 0, - Poco::Net::HTTPBasicCredentials{}, - buf_size, - headers); -} - - -bool ReadIndirectBufferFromWebServer::nextImpl() -{ - bool next_result = false, successful_read = false; - UInt16 milliseconds_to_wait = WAIT_MS; - - if (impl) - { - /// Restore correct position at the needed offset. - impl->position() = position(); - assert(!impl->hasPendingData()); - } - - WriteBufferFromOwnString error_msg; - for (size_t i = 0; (i < max_tries) && !successful_read && !next_result; ++i) - { - while (milliseconds_to_wait < backoff_threshold_ms) - { - try - { - if (!impl) - { - impl = initialize(); - next_result = impl->hasPendingData(); - if (next_result) - break; - } - - next_result = impl->next(); - successful_read = true; - break; - } - catch (const Poco::Exception & e) - { - LOG_WARNING(log, "Read attempt failed for url: {}. Error: {}", url, e.what()); - error_msg << fmt::format("Error: {}\n", e.what()); - - sleepForMilliseconds(milliseconds_to_wait); - milliseconds_to_wait *= 2; - impl.reset(); - } - } - milliseconds_to_wait = WAIT_MS; - } - - if (!successful_read) - throw Exception(ErrorCodes::NETWORK_ERROR, - "All read attempts failed for url: {}. Reason:\n{}", url, error_msg.str()); - - if (next_result) - { - BufferBase::set(impl->buffer().begin(), impl->buffer().size(), impl->offset()); - offset += working_buffer.size(); - } - - return next_result; -} - - -off_t ReadIndirectBufferFromWebServer::seek(off_t offset_, int whence) -{ - if (impl) - throw Exception(ErrorCodes::CANNOT_SEEK_THROUGH_FILE, "Seek is allowed only before first read attempt from the buffer"); - - if (whence != SEEK_SET) - throw Exception(ErrorCodes::CANNOT_SEEK_THROUGH_FILE, "Only SEEK_SET mode is allowed"); - - if (offset_ < 0) - throw Exception(ErrorCodes::SEEK_POSITION_OUT_OF_BOUND, "Seek position is out of bounds. Offset: {}", std::to_string(offset_)); - - offset = offset_; - - return offset; -} - - -off_t ReadIndirectBufferFromWebServer::getPosition() -{ - return offset - available(); -} - -} diff --git a/src/Disks/S3/DiskS3.cpp b/src/Disks/S3/DiskS3.cpp index be07f036d47..3e99ca1a886 100644 --- a/src/Disks/S3/DiskS3.cpp +++ b/src/Disks/S3/DiskS3.cpp @@ -17,11 +17,7 @@ #include #include -#include -#include - #include - #include #include #include @@ -29,15 +25,21 @@ #include #include -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace DB @@ -126,48 +128,45 @@ void throwIfError(const Aws::Utils::Outcome & response) throw Exception(err.GetMessage(), static_cast(err.GetErrorType())); } } - -/// Reads data from S3 using stored paths in metadata. -class ReadIndirectBufferFromS3 final : public ReadIndirectBufferFromRemoteFS +template +void logIfError(Aws::Utils::Outcome & response, Fn auto && msg) { -public: - ReadIndirectBufferFromS3( - std::shared_ptr client_ptr_, - const String & bucket_, - DiskS3::Metadata metadata_, - size_t max_single_read_retries_, - size_t buf_size_) - : ReadIndirectBufferFromRemoteFS(metadata_) - , client_ptr(std::move(client_ptr_)) - , bucket(bucket_) - , max_single_read_retries(max_single_read_retries_) - , buf_size(buf_size_) + try { + throwIfError(response); } - - std::unique_ptr createReadBuffer(const String & path) override + catch (...) { - return std::make_unique(client_ptr, bucket, fs::path(metadata.remote_fs_root_path) / path, max_single_read_retries, buf_size); + tryLogCurrentException(__PRETTY_FUNCTION__, msg()); } +} -private: - std::shared_ptr client_ptr; - const String & bucket; - UInt64 max_single_read_retries; - size_t buf_size; -}; +template +void logIfError(const Aws::Utils::Outcome & response, Fn auto && msg) +{ + try + { + throwIfError(response); + } + catch (...) + { + tryLogCurrentException(__PRETTY_FUNCTION__, msg()); + } +} DiskS3::DiskS3( String name_, String bucket_, String s3_root_path_, String metadata_path_, + ContextPtr context_, SettingsPtr settings_, GetDiskSettings settings_getter_) : IDiskRemote(name_, s3_root_path_, metadata_path_, "DiskS3", settings_->thread_pool_size) , bucket(std::move(bucket_)) , current_settings(std::move(settings_)) , settings_getter(settings_getter_) + , context(context_) { } @@ -185,15 +184,16 @@ void DiskS3::removeFromRemoteFS(RemoteFSPathKeeperPtr fs_paths_keeper) if (s3_paths_keeper) s3_paths_keeper->removePaths([&](S3PathKeeper::Chunk && chunk) { - LOG_TRACE(log, "Remove AWS keys {}", S3PathKeeper::getChunkKeys(chunk)); + String keys = S3PathKeeper::getChunkKeys(chunk); + LOG_TRACE(log, "Remove AWS keys {}", keys); Aws::S3::Model::Delete delkeys; delkeys.SetObjects(chunk); - /// TODO: Make operation idempotent. Do not throw exception if key is already deleted. Aws::S3::Model::DeleteObjectsRequest request; request.SetBucket(bucket); request.SetDelete(delkeys); auto outcome = settings->client->DeleteObjects(request); - throwIfError(outcome); + // Do not throw here, continue deleting other chunks + logIfError(outcome, [&](){return "Can't remove AWS keys: " + keys;}); }); } @@ -222,7 +222,7 @@ void DiskS3::moveFile(const String & from_path, const String & to_path, bool sen fs::rename(fs::path(metadata_path) / from_path, fs::path(metadata_path) / to_path); } -std::unique_ptr DiskS3::readFile(const String & path, const ReadSettings & read_settings, size_t) const +std::unique_ptr DiskS3::readFile(const String & path, const ReadSettings & read_settings, std::optional) const { auto settings = current_settings.get(); auto metadata = readMeta(path); @@ -230,9 +230,23 @@ std::unique_ptr DiskS3::readFile(const String & path, co LOG_TRACE(log, "Read from file by path: {}. Existing S3 objects: {}", backQuote(metadata_path + path), metadata.remote_fs_objects.size()); - auto reader = std::make_unique( - settings->client, bucket, metadata, settings->s3_max_single_read_retries, read_settings.remote_fs_buffer_size); - return std::make_unique(std::move(reader), settings->min_bytes_for_seek); + bool threadpool_read = read_settings.remote_fs_method == RemoteFSReadMethod::read_threadpool; + + auto s3_impl = std::make_unique( + path, + settings->client, bucket, metadata, + settings->s3_max_single_read_retries, read_settings, threadpool_read); + + if (threadpool_read) + { + auto reader = getThreadPoolReader(); + return std::make_unique(reader, read_settings, std::move(s3_impl)); + } + else + { + auto buf = std::make_unique(std::move(s3_impl)); + return std::make_unique(std::move(buf), settings->min_bytes_for_seek); + } } std::unique_ptr DiskS3::writeFile(const String & path, size_t buf_size, WriteMode mode) @@ -378,7 +392,7 @@ int DiskS3::readSchemaVersion(const String & source_bucket, const String & sourc source_bucket, source_path + SCHEMA_VERSION_OBJECT, settings->s3_max_single_read_retries, - DBMS_DEFAULT_BUFFER_SIZE); + context->getReadSettings()); readIntText(version, buffer); @@ -512,9 +526,11 @@ bool DiskS3::checkUniqueId(const String & id) const Aws::S3::Model::ListObjectsV2Request request; request.SetBucket(bucket); request.SetPrefix(id); - auto resp = settings->client->ListObjectsV2(request); - throwIfError(resp); - Aws::Vector object_list = resp.GetResult().GetContents(); + + auto outcome = settings->client->ListObjectsV2(request); + throwIfError(outcome); + + Aws::Vector object_list = outcome.GetResult().GetContents(); for (const auto & object : object_list) if (object.GetKey() == id) @@ -1033,9 +1049,9 @@ void DiskS3::onFreeze(const String & path) revision_file_buf.finalize(); } -void DiskS3::applyNewSettings(const Poco::Util::AbstractConfiguration & config, ContextPtr context, const String &, const DisksMap &) +void DiskS3::applyNewSettings(const Poco::Util::AbstractConfiguration & config, ContextPtr context_, const String &, const DisksMap &) { - auto new_settings = settings_getter(config, "storage_configuration.disks." + name, context); + auto new_settings = settings_getter(config, "storage_configuration.disks." + name, context_); current_settings.set(std::move(new_settings)); diff --git a/src/Disks/S3/DiskS3.h b/src/Disks/S3/DiskS3.h index 3ef1db43742..19bcb925cb4 100644 --- a/src/Disks/S3/DiskS3.h +++ b/src/Disks/S3/DiskS3.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 @@ -71,13 +69,14 @@ public: String bucket_, String s3_root_path_, String metadata_path_, + ContextPtr context_, SettingsPtr settings_, GetDiskSettings settings_getter_); std::unique_ptr readFile( const String & path, const ReadSettings & settings, - size_t estimated_size) const override; + std::optional size) const override; std::unique_ptr writeFile( const String & path, @@ -177,6 +176,8 @@ private: static constexpr int RESTORABLE_SCHEMA_VERSION = 1; /// Directories with data. const std::vector data_roots {"data", "store"}; + + ContextPtr context; }; } diff --git a/src/Disks/S3/ProxyConfiguration.h b/src/Disks/S3/ProxyConfiguration.h index 2e4e5bec89a..a567c2abb5a 100644 --- a/src/Disks/S3/ProxyConfiguration.h +++ b/src/Disks/S3/ProxyConfiguration.h @@ -1,14 +1,12 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 #include #include -#include // Y_IGNORE +#include #include namespace DB::S3 diff --git a/src/Disks/S3/ProxyListConfiguration.h b/src/Disks/S3/ProxyListConfiguration.h index bd5bbba19a4..c7a4ee9ec58 100644 --- a/src/Disks/S3/ProxyListConfiguration.h +++ b/src/Disks/S3/ProxyListConfiguration.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 diff --git a/src/Disks/S3/ProxyResolverConfiguration.h b/src/Disks/S3/ProxyResolverConfiguration.h index f7eba8d028a..f5baac54fba 100644 --- a/src/Disks/S3/ProxyResolverConfiguration.h +++ b/src/Disks/S3/ProxyResolverConfiguration.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 diff --git a/src/Disks/S3/registerDiskS3.cpp b/src/Disks/S3/registerDiskS3.cpp index 0946c8875d3..8174ccea330 100644 --- a/src/Disks/S3/registerDiskS3.cpp +++ b/src/Disks/S3/registerDiskS3.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) - #include -#endif +#include #include #include @@ -10,7 +8,7 @@ #if USE_AWS_S3 -#include // Y_IGNORE +#include #include #include "DiskS3.h" #include "Disks/DiskCacheWrapper.h" @@ -186,6 +184,7 @@ void registerDiskS3(DiskFactory & factory) uri.bucket, uri.key, metadata_path, + context, getSettings(config, config_prefix, context), getSettings); diff --git a/src/Disks/registerDisks.cpp b/src/Disks/registerDisks.cpp index 94ab6098c44..5dd86043d83 100644 --- a/src/Disks/registerDisks.cpp +++ b/src/Disks/registerDisks.cpp @@ -2,9 +2,7 @@ #include "DiskFactory.h" -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace DB { diff --git a/src/Disks/tests/gtest_disk_encrypted.cpp b/src/Disks/tests/gtest_disk_encrypted.cpp new file mode 100644 index 00000000000..85dd8eb78b8 --- /dev/null +++ b/src/Disks/tests/gtest_disk_encrypted.cpp @@ -0,0 +1,292 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace DB; + +constexpr auto kHeaderSize = FileEncryption::Header::kSize; + + +class DiskEncryptedTest : public ::testing::Test +{ +protected: + void SetUp() override + { + /// Make local disk. + temp_dir = std::make_unique(); + temp_dir->createDirectories(); + local_disk = std::make_shared("local_disk", getDirectory(), 0); + } + + void TearDown() override + { + encrypted_disk.reset(); + local_disk.reset(); + } + + void makeEncryptedDisk(FileEncryption::Algorithm algorithm, const String & key, const String & path = "") + { + auto settings = std::make_unique(); + settings->wrapped_disk = local_disk; + settings->current_algorithm = algorithm; + settings->keys[0] = key; + settings->current_key_id = 0; + settings->disk_path = path; + encrypted_disk = std::make_shared("encrypted_disk", std::move(settings)); + } + + String getFileNames() + { + Strings file_names; + encrypted_disk->listFiles("", file_names); + return boost::algorithm::join(file_names, ", "); + } + + String getDirectory() + { + return temp_dir->path() + "/"; + } + + String getFileContents(const String & file_name) + { + auto buf = encrypted_disk->readFile(file_name, /* settings= */ {}, /* size= */ {}); + String str; + readStringUntilEOF(str, *buf); + return str; + } + + static String getBinaryRepresentation(const String & abs_path) + { + auto buf = createReadBufferFromFileBase(abs_path, /* settings= */ {}); + String str; + readStringUntilEOF(str, *buf); + return str; + } + + static void checkBinaryRepresentation(const String & abs_path, size_t size) + { + String str = getBinaryRepresentation(abs_path); + EXPECT_EQ(str.size(), size); + if (str.size() >= 3) + { + EXPECT_EQ(str.substr(0, 3), "ENC"); + } + } + + std::unique_ptr temp_dir; + std::shared_ptr local_disk; + std::shared_ptr encrypted_disk; +}; + + +TEST_F(DiskEncryptedTest, WriteAndRead) +{ + makeEncryptedDisk(FileEncryption::Algorithm::AES_128_CTR, "1234567890123456"); + + /// No files + EXPECT_EQ(getFileNames(), ""); + + /// Write a file. + { + auto buf = encrypted_disk->writeFile("a.txt", DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Rewrite); + writeString(std::string_view{"Some text"}, *buf); + } + + /// Now we have one file. + EXPECT_EQ(getFileNames(), "a.txt"); + EXPECT_EQ(encrypted_disk->getFileSize("a.txt"), 9); + + /// Read the file. + EXPECT_EQ(getFileContents("a.txt"), "Some text"); + checkBinaryRepresentation(getDirectory() + "a.txt", kHeaderSize + 9); + + /// Remove the file. + encrypted_disk->removeFile("a.txt"); + + /// No files again. + EXPECT_EQ(getFileNames(), ""); +} + + +TEST_F(DiskEncryptedTest, Append) +{ + makeEncryptedDisk(FileEncryption::Algorithm::AES_128_CTR, "1234567890123456"); + + /// Write a file (we use the append mode). + { + auto buf = encrypted_disk->writeFile("a.txt", DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Append); + writeString(std::string_view{"Some text"}, *buf); + } + + EXPECT_EQ(encrypted_disk->getFileSize("a.txt"), 9); + EXPECT_EQ(getFileContents("a.txt"), "Some text"); + checkBinaryRepresentation(getDirectory() + "a.txt", kHeaderSize + 9); + + /// Append the file. + { + auto buf = encrypted_disk->writeFile("a.txt", DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Append); + writeString(std::string_view{" Another text"}, *buf); + } + + EXPECT_EQ(encrypted_disk->getFileSize("a.txt"), 22); + EXPECT_EQ(getFileContents("a.txt"), "Some text Another text"); + checkBinaryRepresentation(getDirectory() + "a.txt", kHeaderSize + 22); +} + + +TEST_F(DiskEncryptedTest, Truncate) +{ + makeEncryptedDisk(FileEncryption::Algorithm::AES_128_CTR, "1234567890123456"); + + /// Write a file (we use the append mode). + { + auto buf = encrypted_disk->writeFile("a.txt", DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Append); + writeString(std::string_view{"Some text"}, *buf); + } + + EXPECT_EQ(encrypted_disk->getFileSize("a.txt"), 9); + EXPECT_EQ(getFileContents("a.txt"), "Some text"); + checkBinaryRepresentation(getDirectory() + "a.txt", kHeaderSize + 9); + + /// Truncate the file. + encrypted_disk->truncateFile("a.txt", 4); + + EXPECT_EQ(encrypted_disk->getFileSize("a.txt"), 4); + EXPECT_EQ(getFileContents("a.txt"), "Some"); + checkBinaryRepresentation(getDirectory() + "a.txt", kHeaderSize + 4); + + /// Truncate the file to zero size. + encrypted_disk->truncateFile("a.txt", 0); + + EXPECT_EQ(encrypted_disk->getFileSize("a.txt"), 0); + EXPECT_EQ(getFileContents("a.txt"), ""); + checkBinaryRepresentation(getDirectory() + "a.txt", 0); +} + + +TEST_F(DiskEncryptedTest, ZeroFileSize) +{ + makeEncryptedDisk(FileEncryption::Algorithm::AES_128_CTR, "1234567890123456"); + + /// Write nothing to a file. + { + auto buf = encrypted_disk->writeFile("a.txt", DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Rewrite); + } + + EXPECT_EQ(encrypted_disk->getFileSize("a.txt"), 0); + EXPECT_EQ(getFileContents("a.txt"), ""); + checkBinaryRepresentation(getDirectory() + "a.txt", 0); + + /// Append the file with nothing. + { + auto buf = encrypted_disk->writeFile("a.txt", DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Append); + } + + EXPECT_EQ(encrypted_disk->getFileSize("a.txt"), 0); + EXPECT_EQ(getFileContents("a.txt"), ""); + checkBinaryRepresentation(getDirectory() + "a.txt", 0); + + /// Truncate the file to zero size. + encrypted_disk->truncateFile("a.txt", 0); + + EXPECT_EQ(encrypted_disk->getFileSize("a.txt"), 0); + EXPECT_EQ(getFileContents("a.txt"), ""); + checkBinaryRepresentation(getDirectory() + "a.txt", 0); +} + + +TEST_F(DiskEncryptedTest, AnotherFolder) +{ + /// Encrypted disk will store its files at the path "folder1/folder2/". + local_disk->createDirectories("folder1/folder2"); + makeEncryptedDisk(FileEncryption::Algorithm::AES_128_CTR, "1234567890123456", "folder1/folder2/"); + + /// Write a file. + { + auto buf = encrypted_disk->writeFile("a.txt", DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Rewrite); + writeString(std::string_view{"Some text"}, *buf); + } + + /// Now we have one file. + EXPECT_EQ(getFileNames(), "a.txt"); + EXPECT_EQ(encrypted_disk->getFileSize("a.txt"), 9); + + /// Read the file. + EXPECT_EQ(getFileContents("a.txt"), "Some text"); + checkBinaryRepresentation(getDirectory() + "folder1/folder2/a.txt", kHeaderSize + 9); +} + + +TEST_F(DiskEncryptedTest, RandomIV) +{ + makeEncryptedDisk(FileEncryption::Algorithm::AES_128_CTR, "1234567890123456"); + + /// Write two files with the same contents. + { + auto buf = encrypted_disk->writeFile("a.txt", DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Rewrite); + writeString(std::string_view{"Some text"}, *buf); + } + { + auto buf = encrypted_disk->writeFile("b.txt", DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Rewrite); + writeString(std::string_view{"Some text"}, *buf); + } + + /// Now we have two files. + EXPECT_EQ(encrypted_disk->getFileSize("a.txt"), 9); + EXPECT_EQ(encrypted_disk->getFileSize("b.txt"), 9); + + /// Read the files. + EXPECT_EQ(getFileContents("a.txt"), "Some text"); + EXPECT_EQ(getFileContents("b.txt"), "Some text"); + checkBinaryRepresentation(getDirectory() + "a.txt", kHeaderSize + 9); + checkBinaryRepresentation(getDirectory() + "b.txt", kHeaderSize + 9); + + String bina = getBinaryRepresentation(getDirectory() + "a.txt"); + String binb = getBinaryRepresentation(getDirectory() + "b.txt"); + constexpr size_t iv_offset = 16; + constexpr size_t iv_size = FileEncryption::InitVector::kSize; + EXPECT_EQ(bina.substr(0, iv_offset), binb.substr(0, iv_offset)); /// Part of the header before IV is the same. + EXPECT_NE(bina.substr(iv_offset, iv_size), binb.substr(iv_offset, iv_size)); /// IV differs. + EXPECT_EQ(bina.substr(iv_offset + iv_size, kHeaderSize - iv_offset - iv_size), + binb.substr(iv_offset + iv_size, kHeaderSize - iv_offset - iv_size)); /// Part of the header after IV is the same. + EXPECT_NE(bina.substr(kHeaderSize), binb.substr(kHeaderSize)); /// Encrypted data differs. +} + + +#if 0 +/// TODO: Try to change DiskEncrypted::writeFile() to fix this test. +/// It fails sometimes with quite an unexpected error: +/// libc++abi: terminating with uncaught exception of type std::__1::__fs::filesystem::filesystem_error: +/// filesystem error: in file_size: No such file or directory [/tmp/tmp14608aaaaaa/a.txt] +/// Aborted (core dumped) +/// It happens because for encrypted disks file appending is not atomic (see DiskEncrypted::writeFile()) +/// and a file could be removed after checking its existence but before getting its size. +TEST_F(DiskEncryptedTest, RemoveFileDuringWriting) +{ + makeEncryptedDisk(FileEncryption::Algorithm::AES_128_CTR, "1234567890123456"); + + size_t n = 100000; + std::thread t1{[&] + { + for (size_t i = 0; i != n; ++i) + encrypted_disk->writeFile("a.txt", DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Append); + }}; + + std::thread t2{[&] + { + for (size_t i = 0; i != n; ++i) + encrypted_disk->removeFileIfExists("a.txt"); + }}; + + t1.join(); + t2.join(); +} +#endif diff --git a/src/Formats/FormatFactory.cpp b/src/Formats/FormatFactory.cpp index a34660a0197..1bea8277a65 100644 --- a/src/Formats/FormatFactory.cpp +++ b/src/Formats/FormatFactory.cpp @@ -56,7 +56,7 @@ FormatSettings getFormatSettings(ContextPtr context, const Settings & settings) format_settings.csv.allow_single_quotes = settings.format_csv_allow_single_quotes; format_settings.csv.crlf_end_of_line = settings.output_format_csv_crlf_end_of_line; format_settings.csv.delimiter = settings.format_csv_delimiter; - format_settings.csv.empty_as_default = settings.input_format_defaults_for_omitted_fields; + format_settings.csv.empty_as_default = settings.input_format_csv_empty_as_default; format_settings.csv.input_format_enum_as_number = settings.input_format_csv_enum_as_number; format_settings.csv.null_representation = settings.format_csv_null_representation; format_settings.csv.input_format_arrays_as_nested_csv = settings.input_format_csv_arrays_as_nested_csv; @@ -106,10 +106,12 @@ FormatSettings getFormatSettings(ContextPtr context, const Settings & settings) format_settings.values.deduce_templates_of_expressions = settings.input_format_values_deduce_templates_of_expressions; format_settings.values.interpret_expressions = settings.input_format_values_interpret_expressions; format_settings.with_names_use_header = settings.input_format_with_names_use_header; + format_settings.with_types_use_header = settings.input_format_with_types_use_header; format_settings.write_statistics = settings.output_format_write_statistics; format_settings.arrow.low_cardinality_as_dictionary = settings.output_format_arrow_low_cardinality_as_dictionary; format_settings.arrow.import_nested = settings.input_format_arrow_import_nested; format_settings.orc.import_nested = settings.input_format_orc_import_nested; + format_settings.defaults_for_omitted_fields = settings.input_format_defaults_for_omitted_fields; format_settings.capn_proto.enum_comparing_mode = settings.format_capn_proto_enum_comparising_mode; /// Validate avro_schema_registry_url with RemoteHostFilter when non-empty and in Server context diff --git a/src/Formats/FormatFactory.h b/src/Formats/FormatFactory.h index ee3824081bb..4e10aa4141a 100644 --- a/src/Formats/FormatFactory.h +++ b/src/Formats/FormatFactory.h @@ -68,7 +68,6 @@ public: size_t row)>; private: - using InputCreatorFunc = InputFormatPtr( ReadBuffer & buf, const Block & header, diff --git a/src/Formats/FormatSettings.h b/src/Formats/FormatSettings.h index 269ce9a8a53..2cc0ea2a7e8 100644 --- a/src/Formats/FormatSettings.h +++ b/src/Formats/FormatSettings.h @@ -25,10 +25,12 @@ struct FormatSettings bool skip_unknown_fields = false; bool with_names_use_header = false; + bool with_types_use_header = false; bool write_statistics = true; bool import_nested_json = false; bool null_as_default = true; bool decimal_trailing_zeros = false; + bool defaults_for_omitted_fields = true; enum class DateTimeInputFormat { diff --git a/src/Formats/IndexForNativeFormat.cpp b/src/Formats/IndexForNativeFormat.cpp new file mode 100644 index 00000000000..a383fb7bd48 --- /dev/null +++ b/src/Formats/IndexForNativeFormat.cpp @@ -0,0 +1,91 @@ +#include +#include + + +namespace DB +{ + +namespace ErrorCodes +{ + extern const int INCORRECT_INDEX; +} + +void IndexOfBlockForNativeFormat::read(ReadBuffer & istr) +{ + readVarUInt(num_columns, istr); + readVarUInt(num_rows, istr); + columns.clear(); + for (size_t i = 0; i < num_columns; ++i) + { + auto & column = columns.emplace_back(); + readBinary(column.name, istr); + readBinary(column.type, istr); + readBinary(column.location.offset_in_compressed_file, istr); + readBinary(column.location.offset_in_decompressed_block, istr); + } +} + +void IndexOfBlockForNativeFormat::write(WriteBuffer & ostr) const +{ + writeVarUInt(num_columns, ostr); + writeVarUInt(num_rows, ostr); + for (size_t i = 0; i < num_columns; ++i) + { + const auto & column = columns[i]; + writeBinary(column.name, ostr); + writeBinary(column.type, ostr); + writeBinary(column.location.offset_in_compressed_file, ostr); + writeBinary(column.location.offset_in_decompressed_block, ostr); + } +} + +IndexOfBlockForNativeFormat IndexOfBlockForNativeFormat::extractIndexForColumns(const NameSet & required_columns) const +{ + if (num_columns < required_columns.size()) + throw Exception("Index contain less than required columns", ErrorCodes::INCORRECT_INDEX); + + IndexOfBlockForNativeFormat res; + for (size_t i = 0; i < num_columns; ++i) + { + const auto & column = columns[i]; + if (required_columns.contains(column.name)) + res.columns.push_back(column); + } + + if (res.columns.size() < required_columns.size()) + throw Exception("Index contain less than required columns", ErrorCodes::INCORRECT_INDEX); + if (res.columns.size() > required_columns.size()) + throw Exception("Index contain duplicate columns", ErrorCodes::INCORRECT_INDEX); + + res.num_columns = res.columns.size(); + res.num_rows = num_rows; + return res; +} + + +void IndexForNativeFormat::read(ReadBuffer & istr) +{ + blocks.clear(); + while (!istr.eof()) + { + auto & block = blocks.emplace_back(); + block.read(istr); + } +} + +void IndexForNativeFormat::write(WriteBuffer & ostr) const +{ + for (const auto & block : blocks) + block.write(ostr); +} + +IndexForNativeFormat IndexForNativeFormat::extractIndexForColumns(const NameSet & required_columns) const +{ + IndexForNativeFormat res; + res.blocks.reserve(blocks.size()); + for (const auto & block : blocks) + res.blocks.emplace_back(block.extractIndexForColumns(required_columns)); + return res; +} + +} diff --git a/src/Formats/IndexForNativeFormat.h b/src/Formats/IndexForNativeFormat.h new file mode 100644 index 00000000000..646f539ebd0 --- /dev/null +++ b/src/Formats/IndexForNativeFormat.h @@ -0,0 +1,60 @@ +#pragma once + +#include +#include + +namespace DB +{ + +/** The Native format can contain a separately located index, + * which allows you to understand where what column is located, + * and skip unnecessary columns. + */ + +/** The position of one piece of a single column. */ +struct IndexOfOneColumnForNativeFormat +{ + String name; + String type; + MarkInCompressedFile location; +}; + +/** The index for the data block. */ +struct IndexOfBlockForNativeFormat +{ + using Columns = std::vector; + + size_t num_columns; + size_t num_rows; + Columns columns; + + /// Reads the index for the data block. + void read(ReadBuffer & istr); + + /// Writes the index for the data block. + void write(WriteBuffer & ostr) const; + + /// Returns the index only for the required columns. + IndexOfBlockForNativeFormat extractIndexForColumns(const NameSet & required_columns) const; +}; + +/** The whole index. */ +struct IndexForNativeFormat +{ + using Blocks = std::vector; + Blocks blocks; + + bool empty() const { return blocks.empty(); } + void clear() { blocks.clear(); } + + /// Reads the index. + void read(ReadBuffer & istr); + + /// Writes the index. + void write(WriteBuffer & ostr) const; + + /// Returns the index only for the required columns. + IndexForNativeFormat extractIndexForColumns(const NameSet & required_columns) const; +}; + +} diff --git a/src/Formats/JSONEachRowUtils.cpp b/src/Formats/JSONEachRowUtils.cpp index 8ef05fa584e..b55e9f59cc7 100644 --- a/src/Formats/JSONEachRowUtils.cpp +++ b/src/Formats/JSONEachRowUtils.cpp @@ -1,5 +1,8 @@ #include #include +#include +#include + #include namespace DB @@ -10,7 +13,8 @@ namespace ErrorCodes extern const int LOGICAL_ERROR; } -std::pair fileSegmentationEngineJSONEachRowImpl(ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size) +template +static std::pair fileSegmentationEngineJSONEachRowImpl(ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size, size_t min_rows) { skipWhitespaceIfAny(in); @@ -19,7 +23,7 @@ std::pair fileSegmentationEngineJSONEachRowImpl(ReadBuffer & in, D bool quotes = false; size_t number_of_rows = 0; - while (loadAtPosition(in, memory, pos) && (balance || memory.size() + static_cast(pos - in.position()) < min_chunk_size)) + while (loadAtPosition(in, memory, pos) && (balance || memory.size() + static_cast(pos - in.position()) < min_chunk_size || number_of_rows < min_rows)) { const auto current_object_size = memory.size() + static_cast(pos - in.position()); if (current_object_size > 10 * min_chunk_size) @@ -50,19 +54,19 @@ std::pair fileSegmentationEngineJSONEachRowImpl(ReadBuffer & in, D } else { - pos = find_first_symbols<'{', '}', '\\', '"'>(pos, in.buffer().end()); + pos = find_first_symbols(pos, in.buffer().end()); if (pos > in.buffer().end()) throw Exception("Position in buffer is out of bounds. There must be a bug.", ErrorCodes::LOGICAL_ERROR); else if (pos == in.buffer().end()) continue; - else if (*pos == '{') + else if (*pos == opening_bracket) { ++balance; ++pos; } - else if (*pos == '}') + else if (*pos == closing_bracket) { --balance; ++pos; @@ -88,6 +92,16 @@ std::pair fileSegmentationEngineJSONEachRowImpl(ReadBuffer & in, D return {loadAtPosition(in, memory, pos), number_of_rows}; } +std::pair fileSegmentationEngineJSONEachRow(ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size) +{ + return fileSegmentationEngineJSONEachRowImpl<'{', '}'>(in, memory, min_chunk_size, 1); +} + +std::pair fileSegmentationEngineJSONCompactEachRow(ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size, size_t min_rows) +{ + return fileSegmentationEngineJSONEachRowImpl<'[', ']'>(in, memory, min_chunk_size, min_rows); +} + bool nonTrivialPrefixAndSuffixCheckerJSONEachRowImpl(ReadBuffer & buf) { /// For JSONEachRow we can safely skip whitespace characters @@ -95,4 +109,37 @@ bool nonTrivialPrefixAndSuffixCheckerJSONEachRowImpl(ReadBuffer & buf) return buf.eof() || *buf.position() == '['; } +bool readFieldImpl(ReadBuffer & in, IColumn & column, const DataTypePtr & type, const SerializationPtr & serialization, const String & column_name, const FormatSettings & format_settings, bool yield_strings) +{ + try + { + bool as_nullable = format_settings.null_as_default && !type->isNullable() && !type->isLowCardinalityNullable(); + + if (yield_strings) + { + String str; + readJSONString(str, in); + + ReadBufferFromString buf(str); + + if (as_nullable) + return SerializationNullable::deserializeWholeTextImpl(column, buf, format_settings, serialization); + + serialization->deserializeWholeText(column, buf, format_settings); + return true; + } + + if (as_nullable) + return SerializationNullable::deserializeTextJSONImpl(column, in, format_settings, serialization); + + serialization->deserializeTextJSON(column, in, format_settings); + return true; + } + catch (Exception & e) + { + e.addMessage("(while reading the value of key " + column_name + ")"); + throw; + } +} + } diff --git a/src/Formats/JSONEachRowUtils.h b/src/Formats/JSONEachRowUtils.h index 2d2d4ad5531..4a049aa1abd 100644 --- a/src/Formats/JSONEachRowUtils.h +++ b/src/Formats/JSONEachRowUtils.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -7,8 +8,11 @@ namespace DB { -std::pair fileSegmentationEngineJSONEachRowImpl(ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size); +std::pair fileSegmentationEngineJSONEachRow(ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size); +std::pair fileSegmentationEngineJSONCompactEachRow(ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size, size_t min_rows); bool nonTrivialPrefixAndSuffixCheckerJSONEachRowImpl(ReadBuffer & buf); +bool readFieldImpl(ReadBuffer & in, IColumn & column, const DataTypePtr & type, const SerializationPtr & serialization, const String & column_name, const FormatSettings & format_settings, bool yield_strings); + } diff --git a/src/Formats/NativeReader.cpp b/src/Formats/NativeReader.cpp index 9ef248dc904..e817d23e03d 100644 --- a/src/Formats/NativeReader.cpp +++ b/src/Formats/NativeReader.cpp @@ -221,39 +221,4 @@ void NativeReader::updateAvgValueSizeHints(const Block & block) } } -void IndexForNativeFormat::read(ReadBuffer & istr, const NameSet & required_columns) -{ - while (!istr.eof()) - { - blocks.emplace_back(); - IndexOfBlockForNativeFormat & block = blocks.back(); - - readVarUInt(block.num_columns, istr); - readVarUInt(block.num_rows, istr); - - if (block.num_columns < required_columns.size()) - throw Exception("Index contain less than required columns", ErrorCodes::INCORRECT_INDEX); - - for (size_t i = 0; i < block.num_columns; ++i) - { - IndexOfOneColumnForNativeFormat column_index; - - readBinary(column_index.name, istr); - readBinary(column_index.type, istr); - readBinary(column_index.location.offset_in_compressed_file, istr); - readBinary(column_index.location.offset_in_decompressed_block, istr); - - if (required_columns.count(column_index.name)) - block.columns.push_back(std::move(column_index)); - } - - if (block.columns.size() < required_columns.size()) - throw Exception("Index contain less than required columns", ErrorCodes::INCORRECT_INDEX); - if (block.columns.size() > required_columns.size()) - throw Exception("Index contain duplicate columns", ErrorCodes::INCORRECT_INDEX); - - block.num_columns = block.columns.size(); - } -} - } diff --git a/src/Formats/NativeReader.h b/src/Formats/NativeReader.h index 49c2db7703f..dfc7a749187 100644 --- a/src/Formats/NativeReader.h +++ b/src/Formats/NativeReader.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -9,48 +10,6 @@ namespace DB class CompressedReadBufferFromFile; - -/** The Native format can contain a separately located index, - * which allows you to understand where what column is located, - * and skip unnecessary columns. - */ - -/** The position of one piece of a single column. */ -struct IndexOfOneColumnForNativeFormat -{ - String name; - String type; - MarkInCompressedFile location; -}; - -/** The index for the data block. */ -struct IndexOfBlockForNativeFormat -{ - using Columns = std::vector; - - size_t num_columns; - size_t num_rows; - Columns columns; -}; - -/** The whole index. */ -struct IndexForNativeFormat -{ - using Blocks = std::vector; - Blocks blocks; - - IndexForNativeFormat() {} - - IndexForNativeFormat(ReadBuffer & istr, const NameSet & required_columns) - { - read(istr, required_columns); - } - - /// Read the index, only for the required columns. - void read(ReadBuffer & istr, const NameSet & required_columns); -}; - - /** Deserializes the stream of blocks from the native binary format (with names and column types). * Designed for communication between servers. * diff --git a/src/Formats/NativeWriter.cpp b/src/Formats/NativeWriter.cpp index 9da0c312362..41a9e5dc414 100644 --- a/src/Formats/NativeWriter.cpp +++ b/src/Formats/NativeWriter.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include @@ -22,11 +23,11 @@ namespace ErrorCodes NativeWriter::NativeWriter( WriteBuffer & ostr_, UInt64 client_revision_, const Block & header_, bool remove_low_cardinality_, - WriteBuffer * index_ostr_, size_t initial_size_of_file_) + IndexForNativeFormat * index_, size_t initial_size_of_file_) : ostr(ostr_), client_revision(client_revision_), header(header_), - index_ostr(index_ostr_), initial_size_of_file(initial_size_of_file_), remove_low_cardinality(remove_low_cardinality_) + index(index_), initial_size_of_file(initial_size_of_file_), remove_low_cardinality(remove_low_cardinality_) { - if (index_ostr) + if (index) { ostr_concrete = typeid_cast(&ostr); if (!ostr_concrete) @@ -80,18 +81,20 @@ void NativeWriter::write(const Block & block) /** The index has the same structure as the data stream. * But instead of column values, it contains a mark that points to the location in the data file where this part of the column is located. */ - if (index_ostr) + IndexOfBlockForNativeFormat index_block; + if (index) { - writeVarUInt(columns, *index_ostr); - writeVarUInt(rows, *index_ostr); + index_block.num_columns = columns; + index_block.num_rows = rows; + index_block.columns.resize(columns); } for (size_t i = 0; i < columns; ++i) { /// For the index. - MarkInCompressedFile mark; + MarkInCompressedFile mark{0, 0}; - if (index_ostr) + if (index) { ostr_concrete->next(); /// Finish compressed block. mark.offset_in_compressed_file = initial_size_of_file + ostr_concrete->getCompressedBytes(); @@ -125,15 +128,17 @@ void NativeWriter::write(const Block & block) if (rows) /// Zero items of data is always represented as zero number of bytes. writeData(*column.type, column.column, ostr, 0, 0); - if (index_ostr) + if (index) { - writeStringBinary(column.name, *index_ostr); - writeStringBinary(column.type->getName(), *index_ostr); - - writeBinary(mark.offset_in_compressed_file, *index_ostr); - writeBinary(mark.offset_in_decompressed_block, *index_ostr); + index_block.columns[i].name = column.name; + index_block.columns[i].type = column.type->getName(); + index_block.columns[i].location.offset_in_compressed_file = mark.offset_in_compressed_file; + index_block.columns[i].location.offset_in_decompressed_block = mark.offset_in_decompressed_block; } } + + if (index) + index->blocks.emplace_back(std::move(index_block)); } } diff --git a/src/Formats/NativeWriter.h b/src/Formats/NativeWriter.h index 67fc179b620..010a03ec722 100644 --- a/src/Formats/NativeWriter.h +++ b/src/Formats/NativeWriter.h @@ -9,7 +9,7 @@ namespace DB class WriteBuffer; class CompressedWriteBuffer; - +struct IndexForNativeFormat; /** Serializes the stream of blocks in their native binary format (with names and column types). * Designed for communication between servers. @@ -24,7 +24,7 @@ public: */ NativeWriter( WriteBuffer & ostr_, UInt64 client_revision_, const Block & header_, bool remove_low_cardinality_ = false, - WriteBuffer * index_ostr_ = nullptr, size_t initial_size_of_file_ = 0); + IndexForNativeFormat * index_ = nullptr, size_t initial_size_of_file_ = 0); Block getHeader() const { return header; } void write(const Block & block); @@ -36,7 +36,7 @@ private: WriteBuffer & ostr; UInt64 client_revision; Block header; - WriteBuffer * index_ostr; + IndexForNativeFormat * index = nullptr; size_t initial_size_of_file; /// The initial size of the data file, if `append` done. Used for the index. /// If you need to write index, then `ostr` must be a CompressedWriteBuffer. CompressedWriteBuffer * ostr_concrete = nullptr; diff --git a/src/Formats/ProtobufReader.h b/src/Formats/ProtobufReader.h index 31d6f9a08e0..0df139eeacd 100644 --- a/src/Formats/ProtobufReader.h +++ b/src/Formats/ProtobufReader.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_PROTOBUF # include diff --git a/src/Formats/ProtobufSchemas.cpp b/src/Formats/ProtobufSchemas.cpp index 9c6ed76ef27..a6e63b1c256 100644 --- a/src/Formats/ProtobufSchemas.cpp +++ b/src/Formats/ProtobufSchemas.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_PROTOBUF # include diff --git a/src/Formats/ProtobufSerializer.h b/src/Formats/ProtobufSerializer.h index 86a2f2f36dd..315a138f9cf 100644 --- a/src/Formats/ProtobufSerializer.h +++ b/src/Formats/ProtobufSerializer.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_PROTOBUF # include diff --git a/src/Formats/ProtobufWriter.h b/src/Formats/ProtobufWriter.h index 6af1a237fbd..c564db110cc 100644 --- a/src/Formats/ProtobufWriter.h +++ b/src/Formats/ProtobufWriter.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_PROTOBUF # include diff --git a/src/Formats/registerFormats.cpp b/src/Formats/registerFormats.cpp index acaf6f28492..1aedff5fceb 100644 --- a/src/Formats/registerFormats.cpp +++ b/src/Formats/registerFormats.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #include @@ -15,6 +13,7 @@ void registerFileSegmentationEngineCSV(FormatFactory & factory); void registerFileSegmentationEngineJSONEachRow(FormatFactory & factory); void registerFileSegmentationEngineRegexp(FormatFactory & factory); void registerFileSegmentationEngineJSONAsString(FormatFactory & factory); +void registerFileSegmentationEngineJSONCompactEachRow(FormatFactory & factory); /// Formats for both input/output. @@ -89,6 +88,7 @@ void registerFormats() registerFileSegmentationEngineJSONEachRow(factory); registerFileSegmentationEngineRegexp(factory); registerFileSegmentationEngineJSONAsString(factory); + registerFileSegmentationEngineJSONCompactEachRow(factory); registerInputFormatNative(factory); registerOutputFormatNative(factory); @@ -120,10 +120,8 @@ void registerFormats() registerOutputFormatORC(factory); registerInputFormatParquet(factory); registerOutputFormatParquet(factory); -#if !defined(ARCADIA_BUILD) registerInputFormatAvro(factory); registerOutputFormatAvro(factory); -#endif registerInputFormatArrow(factory); registerOutputFormatArrow(factory); @@ -146,9 +144,7 @@ void registerFormats() registerInputFormatJSONAsString(factory); registerInputFormatLineAsString(factory); -#if !defined(ARCADIA_BUILD) registerInputFormatCapnProto(factory); -#endif registerNonTrivialPrefixAndSuffixCheckerJSONEachRow(factory); registerNonTrivialPrefixAndSuffixCheckerJSONAsString(factory); diff --git a/src/Formats/registerWithNamesAndTypes.cpp b/src/Formats/registerWithNamesAndTypes.cpp new file mode 100644 index 00000000000..cba578b08c7 --- /dev/null +++ b/src/Formats/registerWithNamesAndTypes.cpp @@ -0,0 +1,13 @@ +#include + +namespace DB +{ + +void registerWithNamesAndTypes(const std::string & base_format_name, RegisterWithNamesAndTypesFunc register_func) +{ + register_func(base_format_name, false, false); + register_func(base_format_name + "WithNames", true, false); + register_func(base_format_name + "WithNamesAndTypes", true, true); +} + +} diff --git a/src/Formats/registerWithNamesAndTypes.h b/src/Formats/registerWithNamesAndTypes.h new file mode 100644 index 00000000000..d8e74e3421e --- /dev/null +++ b/src/Formats/registerWithNamesAndTypes.h @@ -0,0 +1,12 @@ +#pragma once + +#include +#include + +namespace DB +{ + +using RegisterWithNamesAndTypesFunc = std::function; +void registerWithNamesAndTypes(const std::string & base_format_name, RegisterWithNamesAndTypesFunc register_func); + +} diff --git a/src/Functions/DivisionUtils.h b/src/Functions/DivisionUtils.h index c53ffa7d59d..2e601888ecc 100644 --- a/src/Functions/DivisionUtils.h +++ b/src/Functions/DivisionUtils.h @@ -6,9 +6,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace DB diff --git a/src/Functions/FunctionBase64Conversion.h b/src/Functions/FunctionBase64Conversion.h index c88acc98825..6b1234f6228 100644 --- a/src/Functions/FunctionBase64Conversion.h +++ b/src/Functions/FunctionBase64Conversion.h @@ -1,7 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_BASE64 # include diff --git a/src/Functions/FunctionBinaryArithmetic.h b/src/Functions/FunctionBinaryArithmetic.h index acb5bc8789a..5d87347d8b5 100644 --- a/src/Functions/FunctionBinaryArithmetic.h +++ b/src/Functions/FunctionBinaryArithmetic.h @@ -39,9 +39,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_EMBEDDED_COMPILER # pragma GCC diagnostic push diff --git a/src/Functions/FunctionIfBase.h b/src/Functions/FunctionIfBase.h index 17d02de2e27..d0e69ca1ebc 100644 --- a/src/Functions/FunctionIfBase.h +++ b/src/Functions/FunctionIfBase.h @@ -3,9 +3,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace DB { diff --git a/src/Functions/FunctionMathBinaryFloat64.h b/src/Functions/FunctionMathBinaryFloat64.h index da6c71fdfbb..badbde280f1 100644 --- a/src/Functions/FunctionMathBinaryFloat64.h +++ b/src/Functions/FunctionMathBinaryFloat64.h @@ -9,9 +9,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" namespace DB { diff --git a/src/Functions/FunctionMathUnary.h b/src/Functions/FunctionMathUnary.h index 85a024d3762..2d39daac366 100644 --- a/src/Functions/FunctionMathUnary.h +++ b/src/Functions/FunctionMathUnary.h @@ -8,9 +8,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" /** FastOps is a fast vector math library from Mikhail Parakhin (former Yandex CTO), * Enabled by default. diff --git a/src/Functions/FunctionSQLJSON.h b/src/Functions/FunctionSQLJSON.h index 4c27f090fb2..aaed980c62a 100644 --- a/src/Functions/FunctionSQLJSON.h +++ b/src/Functions/FunctionSQLJSON.h @@ -20,9 +20,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" namespace DB { diff --git a/src/Functions/FunctionUnaryArithmetic.h b/src/Functions/FunctionUnaryArithmetic.h index 568b0c3cc3e..3207b80af71 100644 --- a/src/Functions/FunctionUnaryArithmetic.h +++ b/src/Functions/FunctionUnaryArithmetic.h @@ -12,9 +12,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_EMBEDDED_COMPILER # pragma GCC diagnostic push diff --git a/src/Functions/FunctionsAES.h b/src/Functions/FunctionsAES.h index 8feb16c86b6..58a7947a135 100644 --- a/src/Functions/FunctionsAES.h +++ b/src/Functions/FunctionsAES.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL #include diff --git a/src/Functions/FunctionsEmbeddedDictionaries.h b/src/Functions/FunctionsEmbeddedDictionaries.h index fc08ffe4976..0f75750354a 100644 --- a/src/Functions/FunctionsEmbeddedDictionaries.h +++ b/src/Functions/FunctionsEmbeddedDictionaries.h @@ -18,9 +18,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace DB diff --git a/src/Functions/FunctionsExternalDictionaries.h b/src/Functions/FunctionsExternalDictionaries.h index 7697d86dc34..7dc47b54bea 100644 --- a/src/Functions/FunctionsExternalDictionaries.h +++ b/src/Functions/FunctionsExternalDictionaries.h @@ -21,7 +21,7 @@ #include #include -#include +#include #include #include diff --git a/src/Functions/FunctionsHashing.cpp b/src/Functions/FunctionsHashing.cpp index ed977472a5b..3f334e9c302 100644 --- a/src/Functions/FunctionsHashing.cpp +++ b/src/Functions/FunctionsHashing.cpp @@ -30,14 +30,12 @@ void registerFunctionsHashing(FunctionFactory & factory) factory.registerFunction(); factory.registerFunction(); factory.registerFunction(); -#if !defined(ARCADIA_BUILD) factory.registerFunction(); factory.registerFunction(); factory.registerFunction(); factory.registerFunction(); factory.registerFunction(); factory.registerFunction(); -#endif #if USE_XXHASH factory.registerFunction(); diff --git a/src/Functions/FunctionsHashing.h b/src/Functions/FunctionsHashing.h index 0e9f54229a5..6b39f2ed5cf 100644 --- a/src/Functions/FunctionsHashing.h +++ b/src/Functions/FunctionsHashing.h @@ -6,10 +6,8 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -# include "config_core.h" -#endif +#include "config_functions.h" +#include "config_core.h" #include #include @@ -268,7 +266,6 @@ struct SipHash128Impl } }; -#if !defined(ARCADIA_BUILD) /** Why we need MurmurHash2? * MurmurHash2 is an outdated hash function, superseded by MurmurHash3 and subsequently by CityHash, xxHash, HighwayHash. * Usually there is no reason to use MurmurHash. @@ -390,7 +387,6 @@ struct MurmurHash3Impl128 MurmurHash3_x64_128(begin, size, 0, out_char_data); } }; -#endif /// http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452 /// Care should be taken to do all calculation in unsigned integers (to avoid undefined behaviour on overflow) @@ -1369,14 +1365,12 @@ using FunctionFarmFingerprint64 = FunctionAnyHash; using FunctionFarmHash64 = FunctionAnyHash; using FunctionMetroHash64 = FunctionAnyHash; -#if !defined(ARCADIA_BUILD) using FunctionMurmurHash2_32 = FunctionAnyHash; using FunctionMurmurHash2_64 = FunctionAnyHash; using FunctionGccMurmurHash = FunctionAnyHash; using FunctionMurmurHash3_32 = FunctionAnyHash; using FunctionMurmurHash3_64 = FunctionAnyHash; using FunctionMurmurHash3_128 = FunctionStringHashFixedString; -#endif using FunctionJavaHash = FunctionAnyHash; using FunctionJavaHashUTF16LE = FunctionAnyHash; diff --git a/src/Functions/FunctionsJSON.cpp b/src/Functions/FunctionsJSON.cpp index e861e99861b..105643ff82b 100644 --- a/src/Functions/FunctionsJSON.cpp +++ b/src/Functions/FunctionsJSON.cpp @@ -43,9 +43,7 @@ #include -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" namespace DB diff --git a/src/Functions/FunctionsStringArray.cpp b/src/Functions/FunctionsStringArray.cpp index 765317093c1..0e73d6a33f5 100644 --- a/src/Functions/FunctionsStringArray.cpp +++ b/src/Functions/FunctionsStringArray.cpp @@ -1,9 +1,31 @@ #include #include - namespace DB { +namespace ErrorCodes +{ + extern const int ILLEGAL_TYPE_OF_ARGUMENT; + extern const int NUMBER_OF_ARGUMENTS_DOESNT_MATCH; +} + +DataTypePtr FunctionArrayStringConcat::getReturnTypeImpl(const DataTypes & arguments) const +{ + if (arguments.size() != 1 && arguments.size() != 2) + throw Exception( + "Number of arguments for function " + getName() + " doesn't match: passed " + toString(arguments.size()) + + ", should be 1 or 2.", + ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); + + const DataTypeArray * array_type = checkAndGetDataType(arguments[0].get()); + if (!array_type) + throw Exception("First argument for function " + getName() + " must be an array.", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); + + if (arguments.size() == 2 && !isString(arguments[1])) + throw Exception("Second argument for function " + getName() + " must be constant string.", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); + + return std::make_shared(); +} void registerFunctionsStringArray(FunctionFactory & factory) { diff --git a/src/Functions/FunctionsStringArray.h b/src/Functions/FunctionsStringArray.h index 181cd896d46..27907626971 100644 --- a/src/Functions/FunctionsStringArray.h +++ b/src/Functions/FunctionsStringArray.h @@ -1,19 +1,22 @@ #pragma once -#include -#include -#include -#include -#include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include #include - +#include +#include +#include +#include namespace DB { @@ -21,7 +24,6 @@ namespace DB namespace ErrorCodes { extern const int ILLEGAL_TYPE_OF_ARGUMENT; - extern const int NUMBER_OF_ARGUMENTS_DOESNT_MATCH; extern const int BAD_ARGUMENTS; extern const int ILLEGAL_COLUMN; } @@ -646,17 +648,19 @@ public: }; -/// Joins an array of strings into one string via a separator. +/// Joins an array of type serializable to string into one string via a separator. class FunctionArrayStringConcat : public IFunction { private: - void executeInternal( + static void executeInternal( const ColumnString::Chars & src_chars, const ColumnString::Offsets & src_string_offsets, const ColumnArray::Offsets & src_array_offsets, - const char * delimiter, const size_t delimiter_size, + const char * delimiter, + const size_t delimiter_size, ColumnString::Chars & dst_chars, - ColumnString::Offsets & dst_string_offsets) const + ColumnString::Offsets & dst_string_offsets, + const char8_t * null_map) { size_t size = src_array_offsets.size(); @@ -674,29 +678,33 @@ private: dst_string_offsets.resize(src_array_offsets.size()); ColumnArray::Offset current_src_array_offset = 0; - ColumnString::Offset current_src_string_offset = 0; ColumnString::Offset current_dst_string_offset = 0; /// Loop through the array of strings. for (size_t i = 0; i < size; ++i) { + bool first_non_null = true; /// Loop through the rows within the array. /// NOTE You can do everything in one copy, if the separator has a size of 1. for (auto next_src_array_offset = src_array_offsets[i]; current_src_array_offset < next_src_array_offset; ++current_src_array_offset) { + if (unlikely(null_map && null_map[current_src_array_offset])) + continue; + + if (!first_non_null) + { + memcpy(&dst_chars[current_dst_string_offset], delimiter, delimiter_size); + current_dst_string_offset += delimiter_size; + } + first_non_null = false; + + const auto current_src_string_offset = current_src_array_offset ? src_string_offsets[current_src_array_offset - 1] : 0; size_t bytes_to_copy = src_string_offsets[current_src_array_offset] - current_src_string_offset - 1; memcpySmallAllowReadWriteOverflow15( &dst_chars[current_dst_string_offset], &src_chars[current_src_string_offset], bytes_to_copy); - current_src_string_offset = src_string_offsets[current_src_array_offset]; current_dst_string_offset += bytes_to_copy; - - if (current_src_array_offset + 1 != next_src_array_offset) - { - memcpy(&dst_chars[current_dst_string_offset], delimiter, delimiter_size); - current_dst_string_offset += delimiter_size; - } } dst_chars[current_dst_string_offset] = 0; @@ -708,6 +716,43 @@ private: dst_chars.resize(dst_string_offsets.back()); } + static void executeInternal( + const ColumnString & col_string, + const ColumnArray & col_arr, + const String & delimiter, + ColumnString & col_res, + const char8_t * null_map = nullptr) + { + executeInternal( + col_string.getChars(), + col_string.getOffsets(), + col_arr.getOffsets(), + delimiter.data(), + delimiter.size(), + col_res.getChars(), + col_res.getOffsets(), + null_map); + } + + static ColumnPtr serializeNestedColumn(const ColumnArray & col_arr, const DataTypePtr & nested_type) + { + if (isString(nested_type)) + { + return col_arr.getDataPtr(); + } + else if (const ColumnNullable * col_nullable = checkAndGetColumn(col_arr.getData()); + col_nullable && isString(col_nullable->getNestedColumn().getDataType())) + { + return col_nullable->getNestedColumnPtr(); + } + else + { + ColumnsWithTypeAndName cols; + cols.emplace_back(col_arr.getDataPtr(), nested_type, "tmp"); + return ConvertImplGenericToString::execute(cols, std::make_shared()); + } + } + public: static constexpr auto name = "arrayStringConcat"; static FunctionPtr create(ContextPtr) { return std::make_shared(); } @@ -721,23 +766,7 @@ public: bool isSuitableForShortCircuitArgumentsExecution(const DataTypesWithConstInfo & /*arguments*/) const override { return true; } size_t getNumberOfArguments() const override { return 0; } - DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override - { - if (arguments.size() != 1 && arguments.size() != 2) - throw Exception("Number of arguments for function " + getName() + " doesn't match: passed " - + toString(arguments.size()) + ", should be 1 or 2.", - ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); - - const DataTypeArray * array_type = checkAndGetDataType(arguments[0].get()); - if (!array_type || !isString(array_type->getNestedType())) - throw Exception("First argument for function " + getName() + " must be array of strings.", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); - - if (arguments.size() == 2 - && !isString(arguments[1])) - throw Exception("Second argument for function " + getName() + " must be constant string.", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); - - return std::make_shared(); - } + DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override; ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t /*input_rows_count*/) const override { @@ -751,33 +780,38 @@ public: delimiter = col_delim->getValue(); } - if (const ColumnConst * col_const_arr = checkAndGetColumnConst(arguments[0].column.get())) + const auto & nested_type = assert_cast(*arguments[0].type).getNestedType(); + if (const ColumnConst * col_const_arr = checkAndGetColumnConst(arguments[0].column.get()); + col_const_arr && isString(nested_type)) { Array src_arr = col_const_arr->getValue(); String dst_str; + bool first_non_null = true; for (size_t i = 0, size = src_arr.size(); i < size; ++i) { - if (i != 0) + if (src_arr[i].isNull()) + continue; + if (!first_non_null) dst_str += delimiter; + first_non_null = false; dst_str += src_arr[i].get(); } return result_type->createColumnConst(col_const_arr->size(), dst_str); } + + ColumnPtr src_column = arguments[0].column->convertToFullColumnIfConst(); + const ColumnArray & col_arr = assert_cast(*src_column.get()); + + ColumnPtr str_subcolumn = serializeNestedColumn(col_arr, nested_type); + const ColumnString & col_string = assert_cast(*str_subcolumn.get()); + + auto col_res = ColumnString::create(); + if (const ColumnNullable * col_nullable = checkAndGetColumn(col_arr.getData())) + executeInternal(col_string, col_arr, delimiter, *col_res, col_nullable->getNullMapData().data()); else - { - const ColumnArray & col_arr = assert_cast(*arguments[0].column); - const ColumnString & col_string = assert_cast(col_arr.getData()); - - auto col_res = ColumnString::create(); - - executeInternal( - col_string.getChars(), col_string.getOffsets(), col_arr.getOffsets(), - delimiter.data(), delimiter.size(), - col_res->getChars(), col_res->getOffsets()); - - return col_res; - } + executeInternal(col_string, col_arr, delimiter, *col_res); + return col_res; } }; diff --git a/src/Functions/GCDLCMImpl.h b/src/Functions/GCDLCMImpl.h index 555a67fd462..f4988e3a585 100644 --- a/src/Functions/GCDLCMImpl.h +++ b/src/Functions/GCDLCMImpl.h @@ -6,9 +6,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" namespace DB diff --git a/src/Functions/IFunction.cpp b/src/Functions/IFunction.cpp index 2c5cd59d05a..12f2f50a5f0 100644 --- a/src/Functions/IFunction.cpp +++ b/src/Functions/IFunction.cpp @@ -16,9 +16,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_EMBEDDED_COMPILER # pragma GCC diagnostic push diff --git a/src/Functions/IFunction.h b/src/Functions/IFunction.h index acedbb0df83..dfa3f00d1cf 100644 --- a/src/Functions/IFunction.h +++ b/src/Functions/IFunction.h @@ -5,9 +5,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #include diff --git a/src/Functions/MatchImpl.h b/src/Functions/MatchImpl.h index d71a5a1ffe3..63a14484fe2 100644 --- a/src/Functions/MatchImpl.h +++ b/src/Functions/MatchImpl.h @@ -6,10 +6,8 @@ #include #include "Regexps.h" -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -# include -#endif +#include "config_functions.h" +#include #if USE_RE2_ST # include @@ -200,7 +198,7 @@ struct MatchImpl } /// We check that the entry does not pass through the boundaries of strings. - if (pos + strstr_pattern.size() < begin + offsets[i]) + if (pos + required_substring.size() < begin + offsets[i]) { /// And if it does not, if necessary, we check the regexp. @@ -344,7 +342,7 @@ struct MatchImpl const UInt8 * next_pos = begin; /// If required substring is larger than string size - it cannot be found. - if (strstr_pattern.size() <= n) + if (required_substring.size() <= n) { Searcher searcher(required_substring.data(), required_substring.size(), end - pos); @@ -360,7 +358,7 @@ struct MatchImpl } next_pos += n; - if (pos + strstr_pattern.size() <= next_pos) + if (pos + required_substring.size() <= next_pos) { /// And if it does not, if necessary, we check the regexp. diff --git a/src/Functions/MultiMatchAllIndicesImpl.h b/src/Functions/MultiMatchAllIndicesImpl.h index 6c652d32786..c2e64671d1f 100644 --- a/src/Functions/MultiMatchAllIndicesImpl.h +++ b/src/Functions/MultiMatchAllIndicesImpl.h @@ -5,10 +5,8 @@ #include #include "Regexps.h" -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -# include -#endif +#include "config_functions.h" +#include #if USE_HYPERSCAN # include diff --git a/src/Functions/MultiMatchAnyImpl.h b/src/Functions/MultiMatchAnyImpl.h index 44a65024864..747c0e5e62c 100644 --- a/src/Functions/MultiMatchAnyImpl.h +++ b/src/Functions/MultiMatchAnyImpl.h @@ -5,10 +5,8 @@ #include #include "Regexps.h" -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -# include -#endif +#include "config_functions.h" +#include #if USE_HYPERSCAN # include diff --git a/src/Functions/RapidJSONParser.h b/src/Functions/RapidJSONParser.h index f864c18ed2b..0e791fe744f 100644 --- a/src/Functions/RapidJSONParser.h +++ b/src/Functions/RapidJSONParser.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_RAPIDJSON # include diff --git a/src/Functions/Regexps.h b/src/Functions/Regexps.h index c18b00088e6..b3477f6f32c 100644 --- a/src/Functions/Regexps.h +++ b/src/Functions/Regexps.h @@ -14,9 +14,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_HYPERSCAN # include diff --git a/src/Functions/ReplaceRegexpImpl.h b/src/Functions/ReplaceRegexpImpl.h index 46ebab7f5fe..4320f47c424 100644 --- a/src/Functions/ReplaceRegexpImpl.h +++ b/src/Functions/ReplaceRegexpImpl.h @@ -5,10 +5,8 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -# include -#endif +#include "config_functions.h" +#include #if USE_RE2_ST # include diff --git a/src/Functions/SimdJSONParser.h b/src/Functions/SimdJSONParser.h index 1be9ab32ab2..be85d74619b 100644 --- a/src/Functions/SimdJSONParser.h +++ b/src/Functions/SimdJSONParser.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_SIMDJSON # include diff --git a/src/Functions/addressToLine.cpp b/src/Functions/addressToLine.cpp index d513a8767dc..6ef1800d913 100644 --- a/src/Functions/addressToLine.cpp +++ b/src/Functions/addressToLine.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/Functions/addressToSymbol.cpp b/src/Functions/addressToSymbol.cpp index 1561e0ee506..0fd25503ec7 100644 --- a/src/Functions/addressToSymbol.cpp +++ b/src/Functions/addressToSymbol.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/Functions/aes_decrypt_mysql.cpp b/src/Functions/aes_decrypt_mysql.cpp index d5d7a6660e4..764fcf06c1a 100644 --- a/src/Functions/aes_decrypt_mysql.cpp +++ b/src/Functions/aes_decrypt_mysql.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL diff --git a/src/Functions/aes_encrypt_mysql.cpp b/src/Functions/aes_encrypt_mysql.cpp index bdf7d8d2cce..1d84824d9d6 100644 --- a/src/Functions/aes_encrypt_mysql.cpp +++ b/src/Functions/aes_encrypt_mysql.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL diff --git a/src/Functions/base64Encode.cpp b/src/Functions/base64Encode.cpp index 0c038eb5fca..1f181a31144 100644 --- a/src/Functions/base64Encode.cpp +++ b/src/Functions/base64Encode.cpp @@ -1,9 +1,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_BASE64 # include diff --git a/src/Functions/convertCharset.cpp b/src/Functions/convertCharset.cpp index 184cf5d1b0e..ccfb28ad7ef 100644 --- a/src/Functions/convertCharset.cpp +++ b/src/Functions/convertCharset.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_ICU # include diff --git a/src/Functions/decrypt.cpp b/src/Functions/decrypt.cpp index a9090a31f0e..1cbda0dba99 100644 --- a/src/Functions/decrypt.cpp +++ b/src/Functions/decrypt.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL diff --git a/src/Functions/demange.cpp b/src/Functions/demange.cpp index 0f50eb5e141..ecf6661d20d 100644 --- a/src/Functions/demange.cpp +++ b/src/Functions/demange.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include diff --git a/src/Functions/divide/divide.cpp b/src/Functions/divide/divide.cpp index 5ab11df2a65..cf2cd354a7d 100644 --- a/src/Functions/divide/divide.cpp +++ b/src/Functions/divide/divide.cpp @@ -1,7 +1,7 @@ #include "divide.h" #include -#if defined(__x86_64__) && !defined(ARCADIA_BUILD) +#if defined(__x86_64__) namespace SSE2 { template @@ -25,7 +25,7 @@ namespace Generic template void divideImpl(const A * __restrict a_pos, B b, ResultType * __restrict c_pos, size_t size) { -#if defined(__x86_64__) && !defined(ARCADIA_BUILD) +#if defined(__x86_64__) if (DB::Cpu::CpuFlagsCache::have_AVX2) AVX2::divideImpl(a_pos, b, c_pos, size); else if (DB::Cpu::CpuFlagsCache::have_SSE2) diff --git a/src/Functions/divide/divideImpl.cpp b/src/Functions/divide/divideImpl.cpp index f4c1a97d3ad..6c151dfefb5 100644 --- a/src/Functions/divide/divideImpl.cpp +++ b/src/Functions/divide/divideImpl.cpp @@ -1,14 +1,6 @@ /// This translation unit should be compiled multiple times /// with different values of NAMESPACE and machine flags (sse2, avx2). -#if !defined(NAMESPACE) - #if defined(ARCADIA_BUILD) - #define NAMESPACE Generic - #else - #error "NAMESPACE macro must be defined" - #endif -#endif - #if defined(__AVX2__) #define REG_SIZE 32 #define LIBDIVIDE_AVX2 diff --git a/src/Functions/encrypt.cpp b/src/Functions/encrypt.cpp index ba8ffa1bc59..807443a2fb8 100644 --- a/src/Functions/encrypt.cpp +++ b/src/Functions/encrypt.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL diff --git a/src/Functions/geoToH3.cpp b/src/Functions/geoToH3.cpp index 6dab079b484..e7da254117b 100644 --- a/src/Functions/geoToH3.cpp +++ b/src/Functions/geoToH3.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/geoToS2.cpp b/src/Functions/geoToS2.cpp index 15e395b68c4..644e4661412 100644 --- a/src/Functions/geoToS2.cpp +++ b/src/Functions/geoToS2.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_S2_GEOMETRY diff --git a/src/Functions/h3EdgeAngle.cpp b/src/Functions/h3EdgeAngle.cpp index 6c29982bab1..6f018e6aa3f 100644 --- a/src/Functions/h3EdgeAngle.cpp +++ b/src/Functions/h3EdgeAngle.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3EdgeLengthM.cpp b/src/Functions/h3EdgeLengthM.cpp index abdc6827122..a50da41620c 100644 --- a/src/Functions/h3EdgeLengthM.cpp +++ b/src/Functions/h3EdgeLengthM.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3GetBaseCell.cpp b/src/Functions/h3GetBaseCell.cpp index a4ef21dae79..de4e6ade291 100644 --- a/src/Functions/h3GetBaseCell.cpp +++ b/src/Functions/h3GetBaseCell.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3GetFaces.cpp b/src/Functions/h3GetFaces.cpp index 4052326495d..5d82c16296c 100644 --- a/src/Functions/h3GetFaces.cpp +++ b/src/Functions/h3GetFaces.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3GetResolution.cpp b/src/Functions/h3GetResolution.cpp index a212eee169e..5715ceae62d 100644 --- a/src/Functions/h3GetResolution.cpp +++ b/src/Functions/h3GetResolution.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3HexAreaM2.cpp b/src/Functions/h3HexAreaM2.cpp index c85670adf35..6bd81b84224 100644 --- a/src/Functions/h3HexAreaM2.cpp +++ b/src/Functions/h3HexAreaM2.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3IndexesAreNeighbors.cpp b/src/Functions/h3IndexesAreNeighbors.cpp index b31fb194bc9..e84bc431054 100644 --- a/src/Functions/h3IndexesAreNeighbors.cpp +++ b/src/Functions/h3IndexesAreNeighbors.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3IsPentagon.cpp b/src/Functions/h3IsPentagon.cpp index da1dee66b53..039fea39f2a 100644 --- a/src/Functions/h3IsPentagon.cpp +++ b/src/Functions/h3IsPentagon.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3IsResClassIII.cpp b/src/Functions/h3IsResClassIII.cpp index 330f147bd2c..f2f7ae445f2 100644 --- a/src/Functions/h3IsResClassIII.cpp +++ b/src/Functions/h3IsResClassIII.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3IsValid.cpp b/src/Functions/h3IsValid.cpp index ff0dfabd777..8f21895db01 100644 --- a/src/Functions/h3IsValid.cpp +++ b/src/Functions/h3IsValid.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3ToChildren.cpp b/src/Functions/h3ToChildren.cpp index 381dce373bc..30a46bd711a 100644 --- a/src/Functions/h3ToChildren.cpp +++ b/src/Functions/h3ToChildren.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3ToGeoBoundary.cpp b/src/Functions/h3ToGeoBoundary.cpp index c55a24acff6..e1e34d1eef3 100644 --- a/src/Functions/h3ToGeoBoundary.cpp +++ b/src/Functions/h3ToGeoBoundary.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3ToParent.cpp b/src/Functions/h3ToParent.cpp index 230f8b4796c..d896253822d 100644 --- a/src/Functions/h3ToParent.cpp +++ b/src/Functions/h3ToParent.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3ToString.cpp b/src/Functions/h3ToString.cpp index f00221e480a..25d82d2d40c 100644 --- a/src/Functions/h3ToString.cpp +++ b/src/Functions/h3ToString.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3kRing.cpp b/src/Functions/h3kRing.cpp index 80227b5e4e0..857282ec0aa 100644 --- a/src/Functions/h3kRing.cpp +++ b/src/Functions/h3kRing.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/h3toGeo.cpp b/src/Functions/h3toGeo.cpp index b50add3e9d4..d92ac2aadbb 100644 --- a/src/Functions/h3toGeo.cpp +++ b/src/Functions/h3toGeo.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/lemmatize.cpp b/src/Functions/lemmatize.cpp index 6d16b032bb5..78f9ee75ed8 100644 --- a/src/Functions/lemmatize.cpp +++ b/src/Functions/lemmatize.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_NLP diff --git a/src/Functions/like.cpp b/src/Functions/like.cpp index 1ac9a8d7dab..bd73aa4d471 100644 --- a/src/Functions/like.cpp +++ b/src/Functions/like.cpp @@ -1,22 +1,10 @@ #include "FunctionsStringSearch.h" #include "FunctionFactory.h" -#include "MatchImpl.h" +#include "like.h" namespace DB { -namespace -{ - -struct NameLike -{ - static constexpr auto name = "like"; -}; - -using LikeImpl = MatchImpl; -using FunctionLike = FunctionsStringSearch; - -} void registerFunctionLike(FunctionFactory & factory) { diff --git a/src/Functions/like.h b/src/Functions/like.h new file mode 100644 index 00000000000..a00891ec64c --- /dev/null +++ b/src/Functions/like.h @@ -0,0 +1,17 @@ +#pragma once + +#include "MatchImpl.h" +#include "FunctionsStringSearch.h" + +namespace DB +{ + +struct NameLike +{ + static constexpr auto name = "like"; +}; + +using LikeImpl = MatchImpl; +using FunctionLike = FunctionsStringSearch; + +} diff --git a/src/Functions/map.cpp b/src/Functions/map.cpp index 5517dced3e0..03a9da404c2 100644 --- a/src/Functions/map.cpp +++ b/src/Functions/map.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -15,6 +16,8 @@ #include #include #include "array/arrayIndex.h" +#include "Functions/like.h" +#include "Functions/FunctionsStringSearch.h" namespace DB @@ -274,6 +277,247 @@ public: } }; +class FunctionMapContainsKeyLike : public IFunction +{ +public: + static constexpr auto name = "mapContainsKeyLike"; + static FunctionPtr create(ContextPtr) { return std::make_shared(); } + String getName() const override { return name; } + bool isSuitableForShortCircuitArgumentsExecution(const DataTypesWithConstInfo & /*info*/) const override { return true; } + + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + { + bool is_const = isColumnConst(*arguments[0].column); + const ColumnMap * col_map = is_const ? checkAndGetColumnConstData(arguments[0].column.get()) + : checkAndGetColumn(arguments[0].column.get()); + const DataTypeMap * map_type = checkAndGetDataType(arguments[0].type.get()); + if (!col_map || !map_type) + throw Exception{"First argument for function " + getName() + " must be a map", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT}; + + auto col_res = ColumnVector::create(); + typename ColumnVector::Container & vec_res = col_res->getData(); + + if (input_rows_count == 0) + return col_res; + + vec_res.resize(input_rows_count); + + const auto & column_array = typeid_cast(col_map->getNestedColumn()); + const auto & column_tuple = typeid_cast(column_array.getData()); + + const ColumnString * column_string = checkAndGetColumn(column_tuple.getColumn(0)); + const ColumnFixedString * column_fixed_string = checkAndGetColumn(column_tuple.getColumn(0)); + + FunctionLike func_like; + + for (size_t row = 0; row < input_rows_count; row++) + { + size_t element_start_row = row != 0 ? column_array.getOffsets()[row-1] : 0; + size_t elem_size = column_array.getOffsets()[row]- element_start_row; + + ColumnPtr sub_map_column; + DataTypePtr data_type; + + //The keys of one row map will be processed as a single ColumnString + if (column_string) + { + sub_map_column = column_string->cut(element_start_row, elem_size); + data_type = std::make_shared(); + } + else + { + sub_map_column = column_fixed_string->cut(element_start_row, elem_size); + data_type = std::make_shared(checkAndGetColumn(sub_map_column.get())->getN()); + } + + size_t col_key_size = sub_map_column->size(); + auto column = is_const? ColumnConst::create(std::move(sub_map_column), std::move(col_key_size)) : std::move(sub_map_column); + + ColumnsWithTypeAndName new_arguments = + { + { + column, + data_type, + "" + }, + arguments[1] + }; + + auto res = func_like.executeImpl(new_arguments, result_type, input_rows_count); + const auto & container = checkAndGetColumn(res.get())->getData(); + + const auto it = std::find_if(container.begin(), container.end(), [](int element){ return element == 1; }); // NOLINT + vec_res[row] = it == container.end() ? 0 : 1; + } + + return col_res; + } + + DataTypePtr getReturnTypeImpl(const ColumnsWithTypeAndName & arguments) const override + { + if (arguments.size() != 2) + throw Exception("Number of arguments for function " + getName() + " doesn't match: passed " + + toString(arguments.size()) + ", should be 2", + ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); + + const DataTypeMap * map_type = checkAndGetDataType(arguments[0].type.get()); + const DataTypeString * pattern_type = checkAndGetDataType(arguments[1].type.get()); + + if (!map_type) + throw Exception{"First argument for function " + getName() + " must be a Map", + ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT}; + if (!pattern_type) + throw Exception{"Second argument for function " + getName() + " must be String", + ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT}; + + if (!isStringOrFixedString(map_type->getKeyType())) + throw Exception{"Key type of map for function " + getName() + " must be `String` or `FixedString`", + ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT}; + + return std::make_shared(); + } + + size_t getNumberOfArguments() const override { return 2; } + + bool useDefaultImplementationForConstants() const override { return true; } +}; + +class FunctionExtractKeyLike : public IFunction +{ +public: + static constexpr auto name = "mapExtractKeyLike"; + static FunctionPtr create(ContextPtr) { return std::make_shared(); } + + String getName() const override + { + return name; + } + + bool isSuitableForShortCircuitArgumentsExecution(const DataTypesWithConstInfo & /*info*/) const override { return true; } + + size_t getNumberOfArguments() const override { return 2; } + + DataTypePtr getReturnTypeImpl(const ColumnsWithTypeAndName & arguments) const override + { + if (arguments.size() != 2) + throw Exception("Number of arguments for function " + getName() + " doesn't match: passed " + + toString(arguments.size()) + ", should be 2", + ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); + + + const DataTypeMap * map_type = checkAndGetDataType(arguments[0].type.get()); + + if (!map_type) + throw Exception{"First argument for function " + getName() + " must be a map", + ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT}; + + + auto key_type = map_type->getKeyType(); + + WhichDataType which(key_type); + + if (!which.isStringOrFixedString()) + throw Exception{"Function " + getName() + "only support the map with String or FixedString key", + ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT}; + + if (!isStringOrFixedString(arguments[1].type)) + throw Exception{"Second argument passed to function " + getName() + " must be String or FixedString", + ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT}; + + return std::make_shared(map_type->getKeyType(), map_type->getValueType()); + } + + bool useDefaultImplementationForConstants() const override { return true; } + + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + { + bool is_const = isColumnConst(*arguments[0].column); + const ColumnMap * col_map = typeid_cast(arguments[0].column.get()); + + //It may not be necessary to check this condition, cause it will be checked in getReturnTypeImpl function + if (!col_map) + return nullptr; + + const DataTypeMap * map_type = checkAndGetDataType(arguments[0].type.get()); + auto key_type = map_type->getKeyType(); + auto value_type = map_type->getValueType(); + + const auto & nested_column = col_map->getNestedColumn(); + const auto & keys_column = col_map->getNestedData().getColumn(0); + const auto & values_column = col_map->getNestedData().getColumn(1); + const ColumnString * keys_string_column = checkAndGetColumn(keys_column); + const ColumnFixedString * keys_fixed_string_column = checkAndGetColumn(keys_column); + + FunctionLike func_like; + + //create result data + MutableColumnPtr keys_data = key_type->createColumn(); + MutableColumnPtr values_data = value_type->createColumn(); + MutableColumnPtr offsets = DataTypeNumber().createColumn(); + + IColumn::Offset current_offset = 0; + + for (size_t row = 0; row < input_rows_count; row++) + { + size_t element_start_row = row != 0 ? nested_column.getOffsets()[row-1] : 0; + size_t element_size = nested_column.getOffsets()[row]- element_start_row; + + ColumnsWithTypeAndName new_arguments; + ColumnPtr sub_map_column; + DataTypePtr data_type; + + if (keys_string_column) + { + sub_map_column = keys_string_column->cut(element_start_row, element_size); + data_type = std::make_shared(); + } + else + { + sub_map_column = keys_fixed_string_column->cut(element_start_row, element_size); + data_type =std::make_shared(checkAndGetColumn(sub_map_column.get())->getN()); + } + + size_t col_key_size = sub_map_column->size(); + auto column = is_const? ColumnConst::create(std::move(sub_map_column), std::move(col_key_size)) : std::move(sub_map_column); + + new_arguments = { + { + column, + data_type, + "" + }, + arguments[1] + }; + + auto res = func_like.executeImpl(new_arguments, result_type, input_rows_count); + const auto & container = checkAndGetColumn(res.get())->getData(); + + for (size_t row_num = 0; row_num < element_size; row_num++) + { + if (container[row_num] == 1) + { + auto key_ref = keys_string_column ? + keys_string_column->getDataAt(element_start_row + row_num) : + keys_fixed_string_column->getDataAt(element_start_row + row_num); + auto value_ref = values_column.getDataAt(element_start_row + row_num); + + keys_data->insertData(key_ref.data, key_ref.size); + values_data->insertData(value_ref.data, value_ref.size); + current_offset += 1; + } + } + + offsets->insert(current_offset); + } + + auto result_nested_column = ColumnArray::create( + ColumnTuple::create(Columns{std::move(keys_data), std::move(values_data)}), + std::move(offsets)); + + return ColumnMap::create(result_nested_column); + } +}; + } void registerFunctionsMap(FunctionFactory & factory) @@ -282,6 +526,8 @@ void registerFunctionsMap(FunctionFactory & factory) factory.registerFunction(); factory.registerFunction(); factory.registerFunction(); + factory.registerFunction(); + factory.registerFunction(); } } diff --git a/src/Functions/normalizeString.cpp b/src/Functions/normalizeString.cpp index 2b3a869e452..2fe6a1159af 100644 --- a/src/Functions/normalizeString.cpp +++ b/src/Functions/normalizeString.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_ICU #include diff --git a/src/Functions/now.cpp b/src/Functions/now.cpp index b244d054cfe..653a39b38d0 100644 --- a/src/Functions/now.cpp +++ b/src/Functions/now.cpp @@ -43,13 +43,13 @@ private: class FunctionBaseNow : public IFunctionBase { public: - explicit FunctionBaseNow(time_t time_, DataTypePtr return_type_) : time_value(time_), return_type(return_type_) {} + explicit FunctionBaseNow(time_t time_, DataTypes argument_types_, DataTypePtr return_type_) + : time_value(time_), argument_types(std::move(argument_types_)), return_type(std::move(return_type_)) {} String getName() const override { return "now"; } const DataTypes & getArgumentTypes() const override { - static const DataTypes argument_types; return argument_types; } @@ -69,6 +69,7 @@ public: private: time_t time_value; + DataTypes argument_types; DataTypePtr return_type; }; @@ -117,8 +118,10 @@ public: } if (arguments.size() == 1) return std::make_unique( - time(nullptr), std::make_shared(extractTimeZoneNameFromFunctionArguments(arguments, 0, 0))); - return std::make_unique(time(nullptr), std::make_shared()); + time(nullptr), DataTypes{arguments.front().type}, + std::make_shared(extractTimeZoneNameFromFunctionArguments(arguments, 0, 0))); + + return std::make_unique(time(nullptr), DataTypes(), std::make_shared()); } }; diff --git a/src/Functions/now64.cpp b/src/Functions/now64.cpp index 4a3f4dbfb22..bd1038b1fc6 100644 --- a/src/Functions/now64.cpp +++ b/src/Functions/now64.cpp @@ -67,13 +67,13 @@ private: class FunctionBaseNow64 : public IFunctionBase { public: - explicit FunctionBaseNow64(Field time_, DataTypePtr return_type_) : time_value(time_), return_type(return_type_) {} + explicit FunctionBaseNow64(Field time_, DataTypes argument_types_, DataTypePtr return_type_) + : time_value(time_), argument_types(std::move(argument_types_)), return_type(std::move(return_type_)) {} String getName() const override { return "now64"; } const DataTypes & getArgumentTypes() const override { - static const DataTypes argument_types; return argument_types; } @@ -93,6 +93,7 @@ public: private: Field time_value; + DataTypes argument_types; DataTypePtr return_type; }; @@ -139,14 +140,19 @@ public: return std::make_shared(scale, timezone_name); } - FunctionBasePtr buildImpl(const ColumnsWithTypeAndName &, const DataTypePtr & result_type) const override + FunctionBasePtr buildImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type) const override { UInt32 scale = DataTypeDateTime64::default_scale; auto res_type = removeNullable(result_type); if (const auto * type = typeid_cast(res_type.get())) scale = type->getScale(); - return std::make_unique(nowSubsecond(scale), result_type); + DataTypes arg_types; + arg_types.reserve(arguments.size()); + for (const auto & arg : arguments) + arg_types.push_back(arg.type); + + return std::make_unique(nowSubsecond(scale), std::move(arg_types), std::move(result_type)); } }; diff --git a/src/Functions/registerFunctions.cpp b/src/Functions/registerFunctions.cpp index 94dfcdb4fda..a76b56fe610 100644 --- a/src/Functions/registerFunctions.cpp +++ b/src/Functions/registerFunctions.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include "config_core.h" #include @@ -73,9 +71,7 @@ void registerFunctions() registerFunctionsArray(factory); registerFunctionsTuple(factory); registerFunctionsMap(factory); -#if !defined(ARCADIA_BUILD) registerFunctionsBitmap(factory); -#endif registerFunctionsBinaryRepr(factory); registerFunctionsCoding(factory); registerFunctionsCodingUUID(factory); diff --git a/src/Functions/registerFunctionsGeo.cpp b/src/Functions/registerFunctionsGeo.cpp index fd55c9cc20a..b24dc4cb9c0 100644 --- a/src/Functions/registerFunctionsGeo.cpp +++ b/src/Functions/registerFunctionsGeo.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" namespace DB { diff --git a/src/Functions/registerFunctionsMiscellaneous.cpp b/src/Functions/registerFunctionsMiscellaneous.cpp index dc062ab148a..ffe195973d3 100644 --- a/src/Functions/registerFunctionsMiscellaneous.cpp +++ b/src/Functions/registerFunctionsMiscellaneous.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace DB { diff --git a/src/Functions/registerFunctionsString.cpp b/src/Functions/registerFunctionsString.cpp index f2439a3373b..79002f0a97d 100644 --- a/src/Functions/registerFunctionsString.cpp +++ b/src/Functions/registerFunctionsString.cpp @@ -1,7 +1,5 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -# include "config_core.h" -#endif +#include "config_functions.h" +#include "config_core.h" namespace DB { diff --git a/src/Functions/s2CapContains.cpp b/src/Functions/s2CapContains.cpp index e3df7f2350e..c3ebbf0d251 100644 --- a/src/Functions/s2CapContains.cpp +++ b/src/Functions/s2CapContains.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_S2_GEOMETRY diff --git a/src/Functions/s2CapUnion.cpp b/src/Functions/s2CapUnion.cpp index 98080729a50..2328db4cb52 100644 --- a/src/Functions/s2CapUnion.cpp +++ b/src/Functions/s2CapUnion.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_S2_GEOMETRY diff --git a/src/Functions/s2CellsIntersect.cpp b/src/Functions/s2CellsIntersect.cpp index 2ceb13c043b..d7801afe0d0 100644 --- a/src/Functions/s2CellsIntersect.cpp +++ b/src/Functions/s2CellsIntersect.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_S2_GEOMETRY diff --git a/src/Functions/s2GetNeighbors.cpp b/src/Functions/s2GetNeighbors.cpp index f4df8c5a53f..99c1395f3cd 100644 --- a/src/Functions/s2GetNeighbors.cpp +++ b/src/Functions/s2GetNeighbors.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_S2_GEOMETRY diff --git a/src/Functions/s2RectAdd.cpp b/src/Functions/s2RectAdd.cpp index 20ca7c3c940..9a6fcd25e5a 100644 --- a/src/Functions/s2RectAdd.cpp +++ b/src/Functions/s2RectAdd.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_S2_GEOMETRY diff --git a/src/Functions/s2RectContains.cpp b/src/Functions/s2RectContains.cpp index b5cf1ffc505..11db27e68ca 100644 --- a/src/Functions/s2RectContains.cpp +++ b/src/Functions/s2RectContains.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_S2_GEOMETRY diff --git a/src/Functions/s2RectIntersection.cpp b/src/Functions/s2RectIntersection.cpp index b2de333752a..a8a4536c9e7 100644 --- a/src/Functions/s2RectIntersection.cpp +++ b/src/Functions/s2RectIntersection.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_S2_GEOMETRY diff --git a/src/Functions/s2RectUnion.cpp b/src/Functions/s2RectUnion.cpp index d22e250f708..f187c068345 100644 --- a/src/Functions/s2RectUnion.cpp +++ b/src/Functions/s2RectUnion.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_S2_GEOMETRY diff --git a/src/Functions/s2ToGeo.cpp b/src/Functions/s2ToGeo.cpp index fe7c9c76d72..032fdbfe323 100644 --- a/src/Functions/s2ToGeo.cpp +++ b/src/Functions/s2ToGeo.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_S2_GEOMETRY diff --git a/src/Functions/s2_fwd.h b/src/Functions/s2_fwd.h index e3f7026e48c..6e0b58ae118 100644 --- a/src/Functions/s2_fwd.h +++ b/src/Functions/s2_fwd.h @@ -4,12 +4,12 @@ #pragma clang diagnostic ignored "-Wambiguous-reversed-operator" #endif -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE +#include +#include +#include +#include +#include +#include #ifdef __clang__ #pragma clang diagnostic pop diff --git a/src/Functions/serverConstants.cpp b/src/Functions/serverConstants.cpp index 900a6dbf2a9..87d5f955e88 100644 --- a/src/Functions/serverConstants.cpp +++ b/src/Functions/serverConstants.cpp @@ -11,9 +11,7 @@ # include #endif -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace DB diff --git a/src/Functions/stem.cpp b/src/Functions/stem.cpp index 950b1760c23..3da4a7fdd07 100644 --- a/src/Functions/stem.cpp +++ b/src/Functions/stem.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_NLP @@ -11,7 +9,7 @@ #include #include -#include // Y_IGNORE +#include namespace DB diff --git a/src/Functions/stringToH3.cpp b/src/Functions/stringToH3.cpp index 1ecdb456632..1cafd1661f1 100644 --- a/src/Functions/stringToH3.cpp +++ b/src/Functions/stringToH3.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_functions.h" -#endif +#include "config_functions.h" #if USE_H3 diff --git a/src/Functions/synonyms.cpp b/src/Functions/synonyms.cpp index 5cb9e064c40..6d879f9d42c 100644 --- a/src/Functions/synonyms.cpp +++ b/src/Functions/synonyms.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_NLP diff --git a/src/IO/AsynchronousReader.h b/src/IO/AsynchronousReader.h index 77b4a2f5b22..e4a81623205 100644 --- a/src/IO/AsynchronousReader.h +++ b/src/IO/AsynchronousReader.h @@ -46,6 +46,7 @@ public: size_t size = 0; char * buf = nullptr; int64_t priority = 0; + size_t ignore = 0; }; /// Less than requested amount of data can be returned. diff --git a/src/IO/BrotliReadBuffer.cpp b/src/IO/BrotliReadBuffer.cpp index 41991ad0516..b66bbf45054 100644 --- a/src/IO/BrotliReadBuffer.cpp +++ b/src/IO/BrotliReadBuffer.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_BROTLI # include diff --git a/src/IO/BrotliWriteBuffer.cpp b/src/IO/BrotliWriteBuffer.cpp index 3d0afa86360..6d815c3abab 100644 --- a/src/IO/BrotliWriteBuffer.cpp +++ b/src/IO/BrotliWriteBuffer.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_BROTLI # include diff --git a/src/IO/Bzip2ReadBuffer.cpp b/src/IO/Bzip2ReadBuffer.cpp index 098e829188f..df9a8d5b369 100644 --- a/src/IO/Bzip2ReadBuffer.cpp +++ b/src/IO/Bzip2ReadBuffer.cpp @@ -1,10 +1,8 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_BZIP2 # include -# include // Y_IGNORE +# include namespace DB { diff --git a/src/IO/Bzip2WriteBuffer.cpp b/src/IO/Bzip2WriteBuffer.cpp index 6e63779d3cf..033a86b0158 100644 --- a/src/IO/Bzip2WriteBuffer.cpp +++ b/src/IO/Bzip2WriteBuffer.cpp @@ -1,10 +1,8 @@ -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_BZIP2 # include -# include // Y_IGNORE +# include #include diff --git a/src/IO/CompressionMethod.cpp b/src/IO/CompressionMethod.cpp index ef4beef6b62..c61d091cd09 100644 --- a/src/IO/CompressionMethod.cpp +++ b/src/IO/CompressionMethod.cpp @@ -15,9 +15,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #include diff --git a/src/IO/FileEncryptionCommon.h b/src/IO/FileEncryptionCommon.h index 91fc80c0b22..28d924e6d81 100644 --- a/src/IO/FileEncryptionCommon.h +++ b/src/IO/FileEncryptionCommon.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_SSL #include diff --git a/src/IO/HTTPCommon.cpp b/src/IO/HTTPCommon.cpp index 4fcd3576d7b..9f53572fcde 100644 --- a/src/IO/HTTPCommon.cpp +++ b/src/IO/HTTPCommon.cpp @@ -9,9 +9,7 @@ #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL # include @@ -120,7 +118,7 @@ namespace session->setProxyHost(proxy_host); session->setProxyPort(proxy_port); -#if !defined(ARCADIA_BUILD) && defined(POCO_CLICKHOUSE_PATCH) +#if defined(POCO_CLICKHOUSE_PATCH) session->setProxyProtocol(proxy_scheme); /// Turn on tunnel mode if proxy scheme is HTTP while endpoint scheme is HTTPS. diff --git a/src/IO/LZMADeflatingWriteBuffer.cpp b/src/IO/LZMADeflatingWriteBuffer.cpp index 29cde872241..69d4065f0e5 100644 --- a/src/IO/LZMADeflatingWriteBuffer.cpp +++ b/src/IO/LZMADeflatingWriteBuffer.cpp @@ -1,8 +1,6 @@ #include #include -#if !defined(ARCADIA_BUILD) - namespace DB { namespace ErrorCodes @@ -146,4 +144,3 @@ void LZMADeflatingWriteBuffer::finishImpl() } } -#endif diff --git a/src/IO/LZMADeflatingWriteBuffer.h b/src/IO/LZMADeflatingWriteBuffer.h index 98eb1732e76..388bb622df9 100644 --- a/src/IO/LZMADeflatingWriteBuffer.h +++ b/src/IO/LZMADeflatingWriteBuffer.h @@ -3,16 +3,12 @@ #include #include -#if !defined(ARCADIA_BUILD) - #include // Y_IGNORE -#endif +#include namespace DB { -#if !defined(ARCADIA_BUILD) - /// Performs compression using lzma library and writes compressed data to out_ WriteBuffer. class LZMADeflatingWriteBuffer : public BufferWithOwnMemory { @@ -39,26 +35,4 @@ private: bool finished = false; }; -#else - -namespace ErrorCodes -{ - extern const int NOT_IMPLEMENTED; -} - -class LZMADeflatingWriteBuffer : public BufferWithOwnMemory -{ -public: - LZMADeflatingWriteBuffer( - std::unique_ptr out_ [[maybe_unused]], - int compression_level [[maybe_unused]], - size_t buf_size [[maybe_unused]] = DBMS_DEFAULT_BUFFER_SIZE, - char * existing_memory [[maybe_unused]] = nullptr, - size_t alignment [[maybe_unused]] = 0) - { - throw Exception("LZMADeflatingWriteBuffer is not implemented for arcadia build", ErrorCodes::NOT_IMPLEMENTED); - } -}; - -#endif } diff --git a/src/IO/LZMAInflatingReadBuffer.cpp b/src/IO/LZMAInflatingReadBuffer.cpp index 6a0a7e5ee31..f2df6bdca6a 100644 --- a/src/IO/LZMAInflatingReadBuffer.cpp +++ b/src/IO/LZMAInflatingReadBuffer.cpp @@ -1,6 +1,5 @@ #include -#if !defined(ARCADIA_BUILD) namespace DB { namespace ErrorCodes @@ -88,4 +87,3 @@ bool LZMAInflatingReadBuffer::nextImpl() return true; } } -#endif diff --git a/src/IO/LZMAInflatingReadBuffer.h b/src/IO/LZMAInflatingReadBuffer.h index 46bd5d83183..18922f64516 100644 --- a/src/IO/LZMAInflatingReadBuffer.h +++ b/src/IO/LZMAInflatingReadBuffer.h @@ -3,14 +3,11 @@ #include #include -#if !defined(ARCADIA_BUILD) - #include // Y_IGNORE -#endif +#include namespace DB { -#if !defined(ARCADIA_BUILD) class LZMAInflatingReadBuffer : public BufferWithOwnMemory { public: @@ -31,25 +28,4 @@ private: bool eof; }; -#else - -namespace ErrorCodes -{ - extern const int NOT_IMPLEMENTED; -} - -class LZMAInflatingReadBuffer : public BufferWithOwnMemory -{ -public: - LZMAInflatingReadBuffer( - std::unique_ptr in_ [[maybe_unused]], - size_t buf_size [[maybe_unused]] = DBMS_DEFAULT_BUFFER_SIZE, - char * existing_memory [[maybe_unused]] = nullptr, - size_t alignment [[maybe_unused]] = 0) - { - throw Exception("LZMADeflatingWriteBuffer is not implemented for arcadia build", ErrorCodes::NOT_IMPLEMENTED); - } -}; - -#endif } diff --git a/src/IO/ReadBuffer.h b/src/IO/ReadBuffer.h index 609065feb7e..be456ea398c 100644 --- a/src/IO/ReadBuffer.h +++ b/src/IO/ReadBuffer.h @@ -202,6 +202,12 @@ public: */ virtual void prefetch() {} + /** + * For reading from remote filesystem, when it matters how much we read. + */ + virtual void setReadUntilPosition(size_t /* position */) {} + virtual void setReadUntilEnd() {} + protected: /// The number of bytes to ignore from the initial position of `working_buffer` /// buffer. Apparently this is an additional out-parameter for nextImpl(), diff --git a/src/IO/ReadBufferFromEncryptedFile.h b/src/IO/ReadBufferFromEncryptedFile.h index 9409c4577d2..66768beb28e 100644 --- a/src/IO/ReadBufferFromEncryptedFile.h +++ b/src/IO/ReadBufferFromEncryptedFile.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_SSL #include diff --git a/src/IO/ReadBufferFromFileDecorator.cpp b/src/IO/ReadBufferFromFileDecorator.cpp index 5810eccbac7..f4a996fc278 100644 --- a/src/IO/ReadBufferFromFileDecorator.cpp +++ b/src/IO/ReadBufferFromFileDecorator.cpp @@ -5,7 +5,13 @@ namespace DB { ReadBufferFromFileDecorator::ReadBufferFromFileDecorator(std::unique_ptr impl_) - : impl(std::move(impl_)) + : ReadBufferFromFileDecorator(std::move(impl_), "") +{ +} + + +ReadBufferFromFileDecorator::ReadBufferFromFileDecorator(std::unique_ptr impl_, const String & file_name_) + : impl(std::move(impl_)), file_name(file_name_) { swap(*impl); } @@ -13,6 +19,8 @@ ReadBufferFromFileDecorator::ReadBufferFromFileDecorator(std::unique_ptr(impl.get())) return buffer->getFileName(); return std::string(); diff --git a/src/IO/ReadBufferFromFileDecorator.h b/src/IO/ReadBufferFromFileDecorator.h index 1122e02bb20..c83ec669203 100644 --- a/src/IO/ReadBufferFromFileDecorator.h +++ b/src/IO/ReadBufferFromFileDecorator.h @@ -11,6 +11,7 @@ class ReadBufferFromFileDecorator : public ReadBufferFromFileBase { public: explicit ReadBufferFromFileDecorator(std::unique_ptr impl_); + ReadBufferFromFileDecorator(std::unique_ptr impl_, const String & file_name_); std::string getFileName() const override; @@ -22,6 +23,7 @@ public: protected: std::unique_ptr impl; + String file_name; }; } diff --git a/src/IO/ReadBufferFromS3.cpp b/src/IO/ReadBufferFromS3.cpp index b1c4cdc3bb9..78d296be60e 100644 --- a/src/IO/ReadBufferFromS3.cpp +++ b/src/IO/ReadBufferFromS3.cpp @@ -2,15 +2,17 @@ #if USE_AWS_S3 -# include -# include -# include +#include +#include +#include -# include -# include -# include +#include +#include -# include +#include +#include + +#include namespace ProfileEvents @@ -27,43 +29,81 @@ namespace ErrorCodes extern const int S3_ERROR; extern const int CANNOT_SEEK_THROUGH_FILE; extern const int SEEK_POSITION_OUT_OF_BOUND; + extern const int LOGICAL_ERROR; } ReadBufferFromS3::ReadBufferFromS3( - std::shared_ptr client_ptr_, const String & bucket_, const String & key_, UInt64 max_single_read_retries_, size_t buffer_size_) + std::shared_ptr client_ptr_, const String & bucket_, const String & key_, + UInt64 max_single_read_retries_, const ReadSettings & settings_, bool use_external_buffer_, size_t read_until_position_) : SeekableReadBuffer(nullptr, 0) , client_ptr(std::move(client_ptr_)) , bucket(bucket_) , key(key_) , max_single_read_retries(max_single_read_retries_) - , buffer_size(buffer_size_) + , read_settings(settings_) + , use_external_buffer(use_external_buffer_) + , read_until_position(read_until_position_) { } bool ReadBufferFromS3::nextImpl() { + if (read_until_position) + { + if (read_until_position == offset) + return false; + + if (read_until_position < offset) + throw Exception(ErrorCodes::LOGICAL_ERROR, "Attempt to read beyond right offset ({} > {})", offset, read_until_position - 1); + } + bool next_result = false; if (impl) { - /// `impl` has been initialized earlier and now we're at the end of the current portion of data. - impl->position() = position(); - assert(!impl->hasPendingData()); - } - else - { - /// `impl` is not initialized and we're about to read the first portion of data. - impl = initialize(); - next_result = impl->hasPendingData(); + if (use_external_buffer) + { + /** + * use_external_buffer -- means we read into the buffer which + * was passed to us from somewhere else. We do not check whether + * previously returned buffer was read or not (no hasPendingData() check is needed), + * because this branch means we are prefetching data, + * each nextImpl() call we can fill a different buffer. + */ + impl->set(internal_buffer.begin(), internal_buffer.size()); + assert(working_buffer.begin() != nullptr); + assert(!internal_buffer.empty()); + } + else + { + /** + * impl was initialized before, pass position() to it to make + * sure there is no pending data which was not read. + */ + impl->position() = position(); + assert(!impl->hasPendingData()); + } } - auto sleep_time_with_backoff_milliseconds = std::chrono::milliseconds(100); + size_t sleep_time_with_backoff_milliseconds = 100; for (size_t attempt = 0; (attempt < max_single_read_retries) && !next_result; ++attempt) { Stopwatch watch; try { + if (!impl) + { + impl = initialize(); + + if (use_external_buffer) + { + impl->set(internal_buffer.begin(), internal_buffer.size()); + assert(working_buffer.begin() != nullptr); + assert(!internal_buffer.empty()); + } + } + /// Try to read a next portion of data. next_result = impl->next(); watch.stop(); @@ -83,13 +123,11 @@ bool ReadBufferFromS3::nextImpl() throw; /// Pause before next attempt. - std::this_thread::sleep_for(sleep_time_with_backoff_milliseconds); + sleepForMilliseconds(sleep_time_with_backoff_milliseconds); sleep_time_with_backoff_milliseconds *= 2; /// Try to reinitialize `impl`. impl.reset(); - impl = initialize(); - next_result = impl->hasPendingData(); } } @@ -127,19 +165,34 @@ off_t ReadBufferFromS3::getPosition() std::unique_ptr ReadBufferFromS3::initialize() { - LOG_TRACE(log, "Read S3 object. Bucket: {}, Key: {}, Offset: {}", bucket, key, offset); - Aws::S3::Model::GetObjectRequest req; req.SetBucket(bucket); req.SetKey(key); - req.SetRange(fmt::format("bytes={}-", offset)); + + /** + * If remote_filesystem_read_method = 'read_threadpool', then for MergeTree family tables + * exact byte ranges to read are always passed here. + */ + if (read_until_position) + { + if (offset >= read_until_position) + throw Exception(ErrorCodes::LOGICAL_ERROR, "Attempt to read beyond right offset ({} > {})", offset, read_until_position - 1); + + req.SetRange(fmt::format("bytes={}-{}", offset, read_until_position - 1)); + LOG_DEBUG(log, "Read S3 object. Bucket: {}, Key: {}, Range: {}-{}", bucket, key, offset, read_until_position - 1); + } + else + { + req.SetRange(fmt::format("bytes={}-", offset)); + LOG_DEBUG(log, "Read S3 object. Bucket: {}, Key: {}, Offset: {}", bucket, key, offset); + } Aws::S3::Model::GetObjectOutcome outcome = client_ptr->GetObject(req); if (outcome.IsSuccess()) { read_result = outcome.GetResultWithOwnership(); - return std::make_unique(read_result.GetBody(), buffer_size); + return std::make_unique(read_result.GetBody(), read_settings.remote_fs_buffer_size); } else throw Exception(outcome.GetError().GetMessage(), ErrorCodes::S3_ERROR); diff --git a/src/IO/ReadBufferFromS3.h b/src/IO/ReadBufferFromS3.h index da8d25c1f6f..d0df5c59eb3 100644 --- a/src/IO/ReadBufferFromS3.h +++ b/src/IO/ReadBufferFromS3.h @@ -1,17 +1,17 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 -# include +#include -# include -# include -# include -# include "SeekableReadBuffer.h" +#include +#include +#include +#include + +#include namespace Aws::S3 { @@ -30,7 +30,6 @@ private: String bucket; String key; UInt64 max_single_read_retries; - size_t buffer_size; off_t offset = 0; Aws::S3::Model::GetObjectResult read_result; std::unique_ptr impl; @@ -43,7 +42,9 @@ public: const String & bucket_, const String & key_, UInt64 max_single_read_retries_, - size_t buffer_size_); + const ReadSettings & settings_, + bool use_external_buffer = false, + size_t read_until_position_ = 0); bool nextImpl() override; @@ -52,6 +53,10 @@ public: private: std::unique_ptr initialize(); + + ReadSettings read_settings; + bool use_external_buffer; + off_t read_until_position = 0; }; } diff --git a/src/IO/ReadHelpers.cpp b/src/IO/ReadHelpers.cpp index 5fe0fda88cd..41dcd9fde6c 100644 --- a/src/IO/ReadHelpers.cpp +++ b/src/IO/ReadHelpers.cpp @@ -768,17 +768,6 @@ ReturnType readDateTextFallback(LocalDate & date, ReadBuffer & buf) return ReturnType(false); }; - auto ignore_delimiter = [&] - { - if (!buf.eof() && !isNumericASCII(*buf.position())) - { - ++buf.position(); - return true; - } - else - return false; - }; - auto append_digit = [&](auto & x) { if (!buf.eof() && isNumericASCII(*buf.position())) @@ -792,27 +781,44 @@ ReturnType readDateTextFallback(LocalDate & date, ReadBuffer & buf) }; UInt16 year = 0; + UInt8 month = 0; + UInt8 day = 0; + if (!append_digit(year) || !append_digit(year) // NOLINT || !append_digit(year) // NOLINT || !append_digit(year)) // NOLINT return error(); - if (!ignore_delimiter()) + if (buf.eof()) return error(); - UInt8 month = 0; - if (!append_digit(month)) - return error(); - append_digit(month); + if (isNumericASCII(*buf.position())) + { + /// YYYYMMDD + if (!append_digit(month) + || !append_digit(month) // NOLINT + || !append_digit(day) + || !append_digit(day)) // NOLINT + return error(); + } + else + { + ++buf.position(); - if (!ignore_delimiter()) - return error(); + if (!append_digit(month)) + return error(); + append_digit(month); - UInt8 day = 0; - if (!append_digit(day)) - return error(); - append_digit(day); + if (!buf.eof() && !isNumericASCII(*buf.position())) + ++buf.position(); + else + return error(); + + if (!append_digit(day)) + return error(); + append_digit(day); + } date = LocalDate(year, month, day); return ReturnType(true); diff --git a/src/IO/ReadHelpers.h b/src/IO/ReadHelpers.h index fda8c213ebf..81973bcd8a4 100644 --- a/src/IO/ReadHelpers.h +++ b/src/IO/ReadHelpers.h @@ -597,35 +597,45 @@ inline ReturnType readDateTextImpl(LocalDate & date, ReadBuffer & buf) /// YYYY-MM-D /// YYYY-M-DD /// YYYY-M-D + /// YYYYMMDD /// The delimiters can be arbitrary characters, like YYYY/MM!DD, but obviously not digits. UInt16 year = (pos[0] - '0') * 1000 + (pos[1] - '0') * 100 + (pos[2] - '0') * 10 + (pos[3] - '0'); + UInt8 month; + UInt8 day; pos += 5; if (isNumericASCII(pos[-1])) - return ReturnType(false); - - UInt8 month = pos[0] - '0'; - if (isNumericASCII(pos[1])) { - month = month * 10 + pos[1] - '0'; + /// YYYYMMDD + month = (pos[-1] - '0') * 10 + (pos[0] - '0'); + day = (pos[1] - '0') * 10 + (pos[2] - '0'); pos += 3; } else - pos += 2; - - if (isNumericASCII(pos[-1])) - return ReturnType(false); - - UInt8 day = pos[0] - '0'; - if (isNumericASCII(pos[1])) { - day = day * 10 + pos[1] - '0'; - pos += 2; + month = pos[0] - '0'; + if (isNumericASCII(pos[1])) + { + month = month * 10 + pos[1] - '0'; + pos += 3; + } + else + pos += 2; + + if (isNumericASCII(pos[-1])) + return ReturnType(false); + + day = pos[0] - '0'; + if (isNumericASCII(pos[1])) + { + day = day * 10 + pos[1] - '0'; + pos += 2; + } + else + pos += 1; } - else - pos += 1; buf.position() = pos; date = LocalDate(year, month, day); diff --git a/src/IO/ReadSettings.h b/src/IO/ReadSettings.h index 379b7bc2216..be328e28118 100644 --- a/src/IO/ReadSettings.h +++ b/src/IO/ReadSettings.h @@ -6,7 +6,7 @@ namespace DB { -enum class ReadMethod +enum class LocalFSReadMethod { /** * Simple synchronous reads with 'read'. @@ -43,12 +43,20 @@ enum class ReadMethod pread_fake_async }; +enum class RemoteFSReadMethod +{ + read, + read_threadpool, +}; + class MMappedFileCache; struct ReadSettings { /// Method to use reading from local filesystem. - ReadMethod local_fs_method = ReadMethod::pread; + LocalFSReadMethod local_fs_method = LocalFSReadMethod::pread; + /// Method to use reading from remote filesystem. + RemoteFSReadMethod remote_fs_method = RemoteFSReadMethod::read; size_t local_fs_buffer_size = DBMS_DEFAULT_BUFFER_SIZE; size_t remote_fs_buffer_size = DBMS_DEFAULT_BUFFER_SIZE; @@ -66,8 +74,14 @@ struct ReadSettings /// For 'pread_threadpool' method. Lower is more priority. size_t priority = 0; - size_t remote_fs_backoff_threshold = 10000; - size_t remote_fs_backoff_max_tries = 4; + size_t remote_fs_read_max_backoff_ms = 10000; + size_t remote_fs_read_backoff_max_tries = 4; + + /// Set to true for MergeTree tables to make sure + /// that last position (offset in compressed file) is always passed. + /// (Otherwise asynchronous reading from remote fs is not efficient). + /// If reading is done without final position set, throw logical_error. + bool must_read_until_position = false; ReadSettings adjustBufferSize(size_t file_size) const { diff --git a/src/IO/ReadWriteBufferFromHTTP.h b/src/IO/ReadWriteBufferFromHTTP.h index a42404cc631..16259e8057e 100644 --- a/src/IO/ReadWriteBufferFromHTTP.h +++ b/src/IO/ReadWriteBufferFromHTTP.h @@ -2,10 +2,12 @@ #include #include +#include #include #include #include #include +#include #include #include #include @@ -18,9 +20,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace DB @@ -101,6 +101,9 @@ namespace detail RemoteHostFilter remote_host_filter; std::function next_callback; + size_t buffer_size; + ReadSettings settings; + std::istream * call(Poco::URI uri_, Poco::Net::HTTPResponse & response) { // With empty path poco will send "POST HTTP/1.1" its bug. @@ -148,6 +151,9 @@ namespace detail } } + private: + bool use_external_buffer; + public: using NextCallback = std::function; using OutStreamCallback = std::function; @@ -159,8 +165,10 @@ namespace detail OutStreamCallback out_stream_callback_ = {}, const Poco::Net::HTTPBasicCredentials & credentials_ = {}, size_t buffer_size_ = DBMS_DEFAULT_BUFFER_SIZE, + const ReadSettings & settings_ = {}, HTTPHeaderEntries http_header_entries_ = {}, - const RemoteHostFilter & remote_host_filter_ = {}) + const RemoteHostFilter & remote_host_filter_ = {}, + bool use_external_buffer_ = false) : ReadBuffer(nullptr, 0) , uri {uri_} , method {!method_.empty() ? method_ : out_stream_callback_ ? Poco::Net::HTTPRequest::HTTP_POST : Poco::Net::HTTPRequest::HTTP_GET} @@ -169,9 +177,17 @@ namespace detail , credentials {credentials_} , http_header_entries {http_header_entries_} , remote_host_filter {remote_host_filter_} + , buffer_size {buffer_size_} + , settings {settings_} + , use_external_buffer {use_external_buffer_} { - Poco::Net::HTTPResponse response; + initialize(); + } + void initialize() + { + + Poco::Net::HTTPResponse response; istr = call(uri, response); while (isRedirect(response.getStatus())) @@ -186,7 +202,17 @@ namespace detail try { - impl = std::make_unique(*istr, buffer_size_); + impl = std::make_unique(*istr, buffer_size); + + if (use_external_buffer) + { + /** + * See comment 30 lines below. + */ + impl->set(internal_buffer.begin(), internal_buffer.size()); + assert(working_buffer.begin() != nullptr); + assert(!internal_buffer.empty()); + } } catch (const Poco::Exception & e) { @@ -202,10 +228,33 @@ namespace detail { if (next_callback) next_callback(count()); - if (!working_buffer.empty()) - impl->position() = position(); + + if (use_external_buffer) + { + /** + * use_external_buffer -- means we read into the buffer which + * was passed to us from somewhere else. We do not check whether + * previously returned buffer was read or not (no hasPendingData() check is needed), + * because this branch means we are prefetching data, + * each nextImpl() call we can fill a different buffer. + */ + impl->set(internal_buffer.begin(), internal_buffer.size()); + assert(working_buffer.begin() != nullptr); + assert(!internal_buffer.empty()); + } + else + { + /** + * impl was initialized before, pass position() to it to make + * sure there is no pending data which was not read. + */ + if (!working_buffer.empty()) + impl->position() = position(); + } + if (!impl->next()) return false; + internal_buffer = impl->buffer(); working_buffer = internal_buffer; return true; @@ -270,10 +319,13 @@ public: const UInt64 max_redirects = 0, const Poco::Net::HTTPBasicCredentials & credentials_ = {}, size_t buffer_size_ = DBMS_DEFAULT_BUFFER_SIZE, + const ReadSettings & settings_ = {}, const HTTPHeaderEntries & http_header_entries_ = {}, - const RemoteHostFilter & remote_host_filter_ = {}) + const RemoteHostFilter & remote_host_filter_ = {}, + bool use_external_buffer_ = false) : Parent(std::make_shared(uri_, timeouts, max_redirects), - uri_, method_, out_stream_callback_, credentials_, buffer_size_, http_header_entries_, remote_host_filter_) + uri_, method_, out_stream_callback_, credentials_, buffer_size_, + settings_, http_header_entries_, remote_host_filter_, use_external_buffer_) { } }; diff --git a/src/IO/S3/PocoHTTPClient.h b/src/IO/S3/PocoHTTPClient.h index 12f5af60ed4..2647e254626 100644 --- a/src/IO/S3/PocoHTTPClient.h +++ b/src/IO/S3/PocoHTTPClient.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 @@ -10,10 +8,10 @@ #include #include #include -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE +#include +#include +#include +#include namespace Aws::Http::Standard { diff --git a/src/IO/S3Common.h b/src/IO/S3Common.h index 12dde929d2c..72774499445 100644 --- a/src/IO/S3Common.h +++ b/src/IO/S3Common.h @@ -1,14 +1,12 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 #include -#include // Y_IGNORE -#include // Y_IGNORE +#include +#include #include #include diff --git a/src/IO/SeekAvoidingReadBuffer.h b/src/IO/SeekAvoidingReadBuffer.h index 5896efc4462..6662675cdfc 100644 --- a/src/IO/SeekAvoidingReadBuffer.h +++ b/src/IO/SeekAvoidingReadBuffer.h @@ -17,6 +17,8 @@ public: off_t seek(off_t off, int whence) override; + void prefetch() override { impl->prefetch(); } + private: UInt64 min_bytes_for_seek; /// Minimum positive seek offset which shall be executed using seek operation. }; diff --git a/src/IO/SeekableReadBuffer.h b/src/IO/SeekableReadBuffer.h index 97620f0c03c..400fb99db16 100644 --- a/src/IO/SeekableReadBuffer.h +++ b/src/IO/SeekableReadBuffer.h @@ -33,4 +33,5 @@ public: virtual off_t getPosition() = 0; }; +using SeekableReadBufferPtr = std::shared_ptr; } diff --git a/src/IO/UseSSL.cpp b/src/IO/UseSSL.cpp index 119a3471c07..9ddeb9ccdb5 100644 --- a/src/IO/UseSSL.cpp +++ b/src/IO/UseSSL.cpp @@ -1,8 +1,6 @@ #include "UseSSL.h" -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL # include diff --git a/src/IO/WriteBufferFromEncryptedFile.h b/src/IO/WriteBufferFromEncryptedFile.h index 8ae72b405d6..9707343ac4d 100644 --- a/src/IO/WriteBufferFromEncryptedFile.h +++ b/src/IO/WriteBufferFromEncryptedFile.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_SSL #include diff --git a/src/IO/WriteBufferFromS3.h b/src/IO/WriteBufferFromS3.h index a8966f7afe1..946ecb45948 100644 --- a/src/IO/WriteBufferFromS3.h +++ b/src/IO/WriteBufferFromS3.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 @@ -14,7 +12,7 @@ # include # include -# include // Y_IGNORE +# include namespace Aws::S3 { diff --git a/src/IO/createReadBufferFromFileBase.cpp b/src/IO/createReadBufferFromFileBase.cpp index f828199a2b4..05de97c5c92 100644 --- a/src/IO/createReadBufferFromFileBase.cpp +++ b/src/IO/createReadBufferFromFileBase.cpp @@ -28,13 +28,15 @@ namespace ErrorCodes std::unique_ptr createReadBufferFromFileBase( const std::string & filename, const ReadSettings & settings, - size_t estimated_size, + std::optional size, int flags, char * existing_memory, size_t alignment) { + size_t estimated_size = size.has_value() ? *size : 0; + if (!existing_memory - && settings.local_fs_method == ReadMethod::mmap + && settings.local_fs_method == LocalFSReadMethod::mmap && settings.mmap_threshold && settings.mmap_cache && estimated_size >= settings.mmap_threshold) @@ -56,21 +58,21 @@ std::unique_ptr createReadBufferFromFileBase( { std::unique_ptr res; - if (settings.local_fs_method == ReadMethod::read) + if (settings.local_fs_method == LocalFSReadMethod::read) { res = std::make_unique(filename, buffer_size, actual_flags, existing_memory, alignment); } - else if (settings.local_fs_method == ReadMethod::pread || settings.local_fs_method == ReadMethod::mmap) + else if (settings.local_fs_method == LocalFSReadMethod::pread || settings.local_fs_method == LocalFSReadMethod::mmap) { res = std::make_unique(filename, buffer_size, actual_flags, existing_memory, alignment); } - else if (settings.local_fs_method == ReadMethod::pread_fake_async) + else if (settings.local_fs_method == LocalFSReadMethod::pread_fake_async) { static AsynchronousReaderPtr reader = std::make_shared(); res = std::make_unique( reader, settings.priority, filename, buffer_size, actual_flags, existing_memory, alignment); } - else if (settings.local_fs_method == ReadMethod::pread_threadpool) + else if (settings.local_fs_method == LocalFSReadMethod::pread_threadpool) { static AsynchronousReaderPtr reader = std::make_shared(16, 1000000); res = std::make_unique( diff --git a/src/IO/createReadBufferFromFileBase.h b/src/IO/createReadBufferFromFileBase.h index 9930453f945..86da469b55d 100644 --- a/src/IO/createReadBufferFromFileBase.h +++ b/src/IO/createReadBufferFromFileBase.h @@ -10,12 +10,13 @@ namespace DB { /** Create an object to read data from a file. - * estimated_size - the number of bytes to read + * + * @param size - the number of bytes to read */ std::unique_ptr createReadBufferFromFileBase( const std::string & filename, const ReadSettings & settings, - size_t estimated_size, + std::optional size = {}, int flags_ = -1, char * existing_memory = nullptr, size_t alignment = 0); diff --git a/src/IO/tests/gtest_file_encryption.cpp b/src/IO/tests/gtest_file_encryption.cpp index 187073c7262..3a114f94ee0 100644 --- a/src/IO/tests/gtest_file_encryption.cpp +++ b/src/IO/tests/gtest_file_encryption.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_SSL #include diff --git a/src/Interpreters/InterpreterCreateQuotaQuery.cpp b/src/Interpreters/Access/InterpreterCreateQuotaQuery.cpp similarity index 95% rename from src/Interpreters/InterpreterCreateQuotaQuery.cpp rename to src/Interpreters/Access/InterpreterCreateQuotaQuery.cpp index b4f61e43186..92b574c0036 100644 --- a/src/Interpreters/InterpreterCreateQuotaQuery.cpp +++ b/src/Interpreters/Access/InterpreterCreateQuotaQuery.cpp @@ -1,10 +1,10 @@ -#include -#include -#include +#include +#include +#include +#include +#include #include #include -#include -#include #include #include #include diff --git a/src/Interpreters/InterpreterCreateQuotaQuery.h b/src/Interpreters/Access/InterpreterCreateQuotaQuery.h similarity index 100% rename from src/Interpreters/InterpreterCreateQuotaQuery.h rename to src/Interpreters/Access/InterpreterCreateQuotaQuery.h diff --git a/src/Interpreters/InterpreterCreateRoleQuery.cpp b/src/Interpreters/Access/InterpreterCreateRoleQuery.cpp similarity index 96% rename from src/Interpreters/InterpreterCreateRoleQuery.cpp rename to src/Interpreters/Access/InterpreterCreateRoleQuery.cpp index b9debc259be..62b44449726 100644 --- a/src/Interpreters/InterpreterCreateRoleQuery.cpp +++ b/src/Interpreters/Access/InterpreterCreateRoleQuery.cpp @@ -1,9 +1,9 @@ -#include -#include -#include -#include +#include +#include #include #include +#include +#include namespace DB diff --git a/src/Interpreters/InterpreterCreateRoleQuery.h b/src/Interpreters/Access/InterpreterCreateRoleQuery.h similarity index 100% rename from src/Interpreters/InterpreterCreateRoleQuery.h rename to src/Interpreters/Access/InterpreterCreateRoleQuery.h diff --git a/src/Interpreters/InterpreterCreateRowPolicyQuery.cpp b/src/Interpreters/Access/InterpreterCreateRowPolicyQuery.cpp similarity index 93% rename from src/Interpreters/InterpreterCreateRowPolicyQuery.cpp rename to src/Interpreters/Access/InterpreterCreateRowPolicyQuery.cpp index 5e4b9b30e66..b07ac0a6a10 100644 --- a/src/Interpreters/InterpreterCreateRowPolicyQuery.cpp +++ b/src/Interpreters/Access/InterpreterCreateRowPolicyQuery.cpp @@ -1,12 +1,12 @@ -#include -#include -#include -#include +#include +#include +#include +#include #include +#include +#include #include #include -#include -#include #include diff --git a/src/Interpreters/InterpreterCreateRowPolicyQuery.h b/src/Interpreters/Access/InterpreterCreateRowPolicyQuery.h similarity index 100% rename from src/Interpreters/InterpreterCreateRowPolicyQuery.h rename to src/Interpreters/Access/InterpreterCreateRowPolicyQuery.h diff --git a/src/Interpreters/InterpreterCreateSettingsProfileQuery.cpp b/src/Interpreters/Access/InterpreterCreateSettingsProfileQuery.cpp similarity index 94% rename from src/Interpreters/InterpreterCreateSettingsProfileQuery.cpp rename to src/Interpreters/Access/InterpreterCreateSettingsProfileQuery.cpp index fb5fb258b10..fa83c6cff93 100644 --- a/src/Interpreters/InterpreterCreateSettingsProfileQuery.cpp +++ b/src/Interpreters/Access/InterpreterCreateSettingsProfileQuery.cpp @@ -1,11 +1,11 @@ -#include -#include -#include -#include -#include +#include +#include +#include #include #include -#include +#include +#include +#include namespace DB diff --git a/src/Interpreters/InterpreterCreateSettingsProfileQuery.h b/src/Interpreters/Access/InterpreterCreateSettingsProfileQuery.h similarity index 100% rename from src/Interpreters/InterpreterCreateSettingsProfileQuery.h rename to src/Interpreters/Access/InterpreterCreateSettingsProfileQuery.h diff --git a/src/Interpreters/InterpreterCreateUserQuery.cpp b/src/Interpreters/Access/InterpreterCreateUserQuery.cpp similarity index 94% rename from src/Interpreters/InterpreterCreateUserQuery.cpp rename to src/Interpreters/Access/InterpreterCreateUserQuery.cpp index 6f963a3b338..721d31bec48 100644 --- a/src/Interpreters/InterpreterCreateUserQuery.cpp +++ b/src/Interpreters/Access/InterpreterCreateUserQuery.cpp @@ -1,14 +1,14 @@ -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include #include #include -#include #include +#include +#include +#include +#include #include @@ -31,8 +31,8 @@ namespace else if (query.names->size() == 1) user.setName(query.names->front()->toString()); - if (query.authentication) - user.authentication = *query.authentication; + if (query.auth_data) + user.auth_data = *query.auth_data; if (override_name && !override_name->host_pattern.empty()) { diff --git a/src/Interpreters/InterpreterCreateUserQuery.h b/src/Interpreters/Access/InterpreterCreateUserQuery.h similarity index 100% rename from src/Interpreters/InterpreterCreateUserQuery.h rename to src/Interpreters/Access/InterpreterCreateUserQuery.h diff --git a/src/Interpreters/InterpreterDropAccessEntityQuery.cpp b/src/Interpreters/Access/InterpreterDropAccessEntityQuery.cpp similarity index 91% rename from src/Interpreters/InterpreterDropAccessEntityQuery.cpp rename to src/Interpreters/Access/InterpreterDropAccessEntityQuery.cpp index a9b8db6d74e..04937aec46a 100644 --- a/src/Interpreters/InterpreterDropAccessEntityQuery.cpp +++ b/src/Interpreters/Access/InterpreterDropAccessEntityQuery.cpp @@ -1,15 +1,15 @@ -#include -#include -#include -#include -#include +#include +#include +#include #include -#include +#include #include #include #include #include #include +#include +#include namespace DB diff --git a/src/Interpreters/InterpreterDropAccessEntityQuery.h b/src/Interpreters/Access/InterpreterDropAccessEntityQuery.h similarity index 100% rename from src/Interpreters/InterpreterDropAccessEntityQuery.h rename to src/Interpreters/Access/InterpreterDropAccessEntityQuery.h diff --git a/src/Interpreters/InterpreterGrantQuery.cpp b/src/Interpreters/Access/InterpreterGrantQuery.cpp similarity index 99% rename from src/Interpreters/InterpreterGrantQuery.cpp rename to src/Interpreters/Access/InterpreterGrantQuery.cpp index 506ab8a3387..f748f9ac02e 100644 --- a/src/Interpreters/InterpreterGrantQuery.cpp +++ b/src/Interpreters/Access/InterpreterGrantQuery.cpp @@ -1,14 +1,14 @@ -#include -#include -#include -#include -#include -#include +#include +#include +#include #include #include +#include #include #include -#include +#include +#include +#include #include #include diff --git a/src/Interpreters/InterpreterGrantQuery.h b/src/Interpreters/Access/InterpreterGrantQuery.h similarity index 100% rename from src/Interpreters/InterpreterGrantQuery.h rename to src/Interpreters/Access/InterpreterGrantQuery.h diff --git a/src/Interpreters/InterpreterSetRoleQuery.cpp b/src/Interpreters/Access/InterpreterSetRoleQuery.cpp similarity index 94% rename from src/Interpreters/InterpreterSetRoleQuery.cpp rename to src/Interpreters/Access/InterpreterSetRoleQuery.cpp index 057ccd447ef..82b100e9d48 100644 --- a/src/Interpreters/InterpreterSetRoleQuery.cpp +++ b/src/Interpreters/Access/InterpreterSetRoleQuery.cpp @@ -1,10 +1,10 @@ -#include -#include -#include -#include +#include +#include +#include #include #include #include +#include namespace DB diff --git a/src/Interpreters/InterpreterSetRoleQuery.h b/src/Interpreters/Access/InterpreterSetRoleQuery.h similarity index 100% rename from src/Interpreters/InterpreterSetRoleQuery.h rename to src/Interpreters/Access/InterpreterSetRoleQuery.h diff --git a/src/Interpreters/InterpreterShowAccessEntitiesQuery.cpp b/src/Interpreters/Access/InterpreterShowAccessEntitiesQuery.cpp similarity index 96% rename from src/Interpreters/InterpreterShowAccessEntitiesQuery.cpp rename to src/Interpreters/Access/InterpreterShowAccessEntitiesQuery.cpp index 41b986e43a2..b0fe28e1abd 100644 --- a/src/Interpreters/InterpreterShowAccessEntitiesQuery.cpp +++ b/src/Interpreters/Access/InterpreterShowAccessEntitiesQuery.cpp @@ -1,10 +1,10 @@ -#include -#include +#include +#include #include -#include #include #include #include +#include namespace DB diff --git a/src/Interpreters/InterpreterShowAccessEntitiesQuery.h b/src/Interpreters/Access/InterpreterShowAccessEntitiesQuery.h similarity index 100% rename from src/Interpreters/InterpreterShowAccessEntitiesQuery.h rename to src/Interpreters/Access/InterpreterShowAccessEntitiesQuery.h diff --git a/src/Interpreters/InterpreterShowAccessQuery.cpp b/src/Interpreters/Access/InterpreterShowAccessQuery.cpp similarity index 91% rename from src/Interpreters/InterpreterShowAccessQuery.cpp rename to src/Interpreters/Access/InterpreterShowAccessQuery.cpp index 86ab409d82b..2ecd51ff2a9 100644 --- a/src/Interpreters/InterpreterShowAccessQuery.cpp +++ b/src/Interpreters/Access/InterpreterShowAccessQuery.cpp @@ -1,13 +1,13 @@ -#include +#include #include #include -#include -#include +#include +#include #include #include #include -#include +#include #include #include #include diff --git a/src/Interpreters/InterpreterShowAccessQuery.h b/src/Interpreters/Access/InterpreterShowAccessQuery.h similarity index 100% rename from src/Interpreters/InterpreterShowAccessQuery.h rename to src/Interpreters/Access/InterpreterShowAccessQuery.h diff --git a/src/Interpreters/InterpreterShowCreateAccessEntityQuery.cpp b/src/Interpreters/Access/InterpreterShowCreateAccessEntityQuery.cpp similarity index 94% rename from src/Interpreters/InterpreterShowCreateAccessEntityQuery.cpp rename to src/Interpreters/Access/InterpreterShowCreateAccessEntityQuery.cpp index 7be7032f48a..b7952324819 100644 --- a/src/Interpreters/InterpreterShowCreateAccessEntityQuery.cpp +++ b/src/Interpreters/Access/InterpreterShowCreateAccessEntityQuery.cpp @@ -1,15 +1,14 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -20,10 +19,11 @@ #include #include #include -#include -#include #include #include +#include +#include +#include #include #include @@ -59,9 +59,9 @@ namespace query->default_roles = user.default_roles.toASTWithNames(*manager); } - if (user.authentication.getType() != Authentication::NO_PASSWORD) + if (user.auth_data.getType() != AuthenticationType::NO_PASSWORD) { - query->authentication = user.authentication; + query->auth_data = user.auth_data; query->show_password = attach_mode; /// We don't show password unless it's an ATTACH statement. } diff --git a/src/Interpreters/InterpreterShowCreateAccessEntityQuery.h b/src/Interpreters/Access/InterpreterShowCreateAccessEntityQuery.h similarity index 100% rename from src/Interpreters/InterpreterShowCreateAccessEntityQuery.h rename to src/Interpreters/Access/InterpreterShowCreateAccessEntityQuery.h diff --git a/src/Interpreters/InterpreterShowGrantsQuery.cpp b/src/Interpreters/Access/InterpreterShowGrantsQuery.cpp similarity index 96% rename from src/Interpreters/InterpreterShowGrantsQuery.cpp rename to src/Interpreters/Access/InterpreterShowGrantsQuery.cpp index 7302e893cdd..930dc0dc5da 100644 --- a/src/Interpreters/InterpreterShowGrantsQuery.cpp +++ b/src/Interpreters/Access/InterpreterShowGrantsQuery.cpp @@ -1,16 +1,16 @@ -#include -#include -#include -#include +#include +#include +#include +#include #include -#include -#include -#include -#include #include -#include #include #include +#include +#include +#include +#include +#include #include #include diff --git a/src/Interpreters/InterpreterShowGrantsQuery.h b/src/Interpreters/Access/InterpreterShowGrantsQuery.h similarity index 100% rename from src/Interpreters/InterpreterShowGrantsQuery.h rename to src/Interpreters/Access/InterpreterShowGrantsQuery.h diff --git a/src/Interpreters/InterpreterShowPrivilegesQuery.cpp b/src/Interpreters/Access/InterpreterShowPrivilegesQuery.cpp similarity index 84% rename from src/Interpreters/InterpreterShowPrivilegesQuery.cpp rename to src/Interpreters/Access/InterpreterShowPrivilegesQuery.cpp index 201c1cfece8..05aa74d7dc4 100644 --- a/src/Interpreters/InterpreterShowPrivilegesQuery.cpp +++ b/src/Interpreters/Access/InterpreterShowPrivilegesQuery.cpp @@ -1,4 +1,4 @@ -#include +#include #include diff --git a/src/Interpreters/InterpreterShowPrivilegesQuery.h b/src/Interpreters/Access/InterpreterShowPrivilegesQuery.h similarity index 100% rename from src/Interpreters/InterpreterShowPrivilegesQuery.h rename to src/Interpreters/Access/InterpreterShowPrivilegesQuery.h diff --git a/src/Interpreters/ActionsDAG.cpp b/src/Interpreters/ActionsDAG.cpp index ea9ee2ce542..d0b360dda82 100644 --- a/src/Interpreters/ActionsDAG.cpp +++ b/src/Interpreters/ActionsDAG.cpp @@ -325,7 +325,7 @@ std::string ActionsDAG::dumpNames() const return out.str(); } -void ActionsDAG::removeUnusedActions(const NameSet & required_names) +void ActionsDAG::removeUnusedActions(const NameSet & required_names, bool allow_remove_inputs, bool allow_constant_folding) { NodeRawConstPtrs required_nodes; required_nodes.reserve(required_names.size()); @@ -349,10 +349,10 @@ void ActionsDAG::removeUnusedActions(const NameSet & required_names) } index.swap(required_nodes); - removeUnusedActions(); + removeUnusedActions(allow_remove_inputs, allow_constant_folding); } -void ActionsDAG::removeUnusedActions(const Names & required_names) +void ActionsDAG::removeUnusedActions(const Names & required_names, bool allow_remove_inputs, bool allow_constant_folding) { NodeRawConstPtrs required_nodes; required_nodes.reserve(required_names.size()); @@ -372,10 +372,10 @@ void ActionsDAG::removeUnusedActions(const Names & required_names) } index.swap(required_nodes); - removeUnusedActions(); + removeUnusedActions(allow_remove_inputs, allow_constant_folding); } -void ActionsDAG::removeUnusedActions(bool allow_remove_inputs) +void ActionsDAG::removeUnusedActions(bool allow_remove_inputs, bool allow_constant_folding) { std::unordered_set visited_nodes; std::stack stack; @@ -406,9 +406,9 @@ void ActionsDAG::removeUnusedActions(bool allow_remove_inputs) auto * node = stack.top(); stack.pop(); - if (!node->children.empty() && node->column && isColumnConst(*node->column)) + /// Constant folding. + if (allow_constant_folding && !node->children.empty() && node->column && isColumnConst(*node->column)) { - /// Constant folding. node->type = ActionsDAG::ActionType::COLUMN; for (const auto & child : node->children) diff --git a/src/Interpreters/ActionsDAG.h b/src/Interpreters/ActionsDAG.h index 8111bcb123c..9a5ad01a252 100644 --- a/src/Interpreters/ActionsDAG.h +++ b/src/Interpreters/ActionsDAG.h @@ -5,9 +5,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" namespace DB { @@ -162,8 +160,8 @@ public: bool isInputProjected() const { return project_input; } bool isOutputProjected() const { return projected_output; } - void removeUnusedActions(const Names & required_names); - void removeUnusedActions(const NameSet & required_names); + void removeUnusedActions(const Names & required_names, bool allow_remove_inputs = true, bool allow_constant_folding = true); + void removeUnusedActions(const NameSet & required_names, bool allow_remove_inputs = true, bool allow_constant_folding = true); NameSet foldActionsByProjection( const NameSet & required_columns, @@ -271,7 +269,7 @@ public: private: Node & addNode(Node node); - void removeUnusedActions(bool allow_remove_inputs = true); + void removeUnusedActions(bool allow_remove_inputs = true, bool allow_constant_folding = true); #if USE_EMBEDDED_COMPILER void compileFunctions(size_t min_count_to_compile_expression, const std::unordered_set & lazy_executed_nodes = {}); diff --git a/src/Interpreters/AsynchronousInsertQueue.cpp b/src/Interpreters/AsynchronousInsertQueue.cpp index cc04c5f013f..d5d2b1a722d 100644 --- a/src/Interpreters/AsynchronousInsertQueue.cpp +++ b/src/Interpreters/AsynchronousInsertQueue.cpp @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include @@ -407,14 +407,20 @@ try } StreamingFormatExecutor executor(header, format, std::move(on_error), std::move(adding_defaults_transform)); - std::unique_ptr buffer; + std::unique_ptr last_buffer; for (const auto & entry : data->entries) { - buffer = std::make_unique(entry->bytes); + auto buffer = std::make_unique(entry->bytes); current_entry = entry; total_rows += executor.execute(*buffer); + + /// Keep buffer, because it still can be used + /// in destructor, while resetting buffer at next iteration. + last_buffer = std::move(buffer); } + format->addBuffer(std::move(last_buffer)); + auto chunk = Chunk(executor.getResultColumns(), total_rows); size_t total_bytes = chunk.bytes(); diff --git a/src/Interpreters/AsynchronousMetrics.cpp b/src/Interpreters/AsynchronousMetrics.cpp index d733da4249e..66b105970af 100644 --- a/src/Interpreters/AsynchronousMetrics.cpp +++ b/src/Interpreters/AsynchronousMetrics.cpp @@ -19,9 +19,7 @@ #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_JEMALLOC # include diff --git a/src/Interpreters/AsynchronousMetrics.h b/src/Interpreters/AsynchronousMetrics.h index 93e77b6bde8..7a5c2d638d7 100644 --- a/src/Interpreters/AsynchronousMetrics.h +++ b/src/Interpreters/AsynchronousMetrics.h @@ -41,9 +41,6 @@ using AsynchronousMetricValues = std::unordered_map> servers_to_start_before_tables{nullptr}; diff --git a/src/Interpreters/ClientInfo.cpp b/src/Interpreters/ClientInfo.cpp index 40e2ea1bc9b..79956aaebed 100644 --- a/src/Interpreters/ClientInfo.cpp +++ b/src/Interpreters/ClientInfo.cpp @@ -7,9 +7,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace DB diff --git a/src/Interpreters/ClientInfo.h b/src/Interpreters/ClientInfo.h index ed00de6e803..d42c34f07e2 100644 --- a/src/Interpreters/ClientInfo.h +++ b/src/Interpreters/ClientInfo.h @@ -55,11 +55,6 @@ public: String current_query_id; Poco::Net::SocketAddress current_address; -#if defined(ARCADIA_BUILD) - /// This field is only used in foreign "Arcadia" build. - String current_password; -#endif - /// When query_kind == INITIAL_QUERY, these values are equal to current. String initial_user; String initial_query_id; @@ -84,6 +79,14 @@ public: UInt64 client_version_patch = 0; unsigned client_tcp_protocol_version = 0; + /// In case of distributed query, client info for query is actually a client info of client. + /// In order to get a version of server-initiator, use connection_ values. + /// Also for tcp only. + UInt64 connection_client_version_major = 0; + UInt64 connection_client_version_minor = 0; + UInt64 connection_client_version_patch = 0; + unsigned connection_tcp_protocol_version = 0; + /// For http HTTPMethod http_method = HTTPMethod::UNKNOWN; String http_user_agent; diff --git a/src/Interpreters/Context.cpp b/src/Interpreters/Context.cpp index 44d0f837413..7f31df9159c 100644 --- a/src/Interpreters/Context.cpp +++ b/src/Interpreters/Context.cpp @@ -130,7 +130,6 @@ namespace ErrorCodes extern const int NO_ELEMENTS_IN_CONFIG; extern const int TABLE_SIZE_EXCEEDS_MAX_DROP_SIZE_LIMIT; extern const int LOGICAL_ERROR; - extern const int NOT_IMPLEMENTED; extern const int INVALID_SETTING_VALUE; extern const int UNKNOWN_READ_METHOD; } @@ -161,8 +160,8 @@ struct ContextSharedPart ConfigurationPtr zookeeper_config; /// Stores zookeeper configs #if USE_NURAFT - mutable std::mutex keeper_storage_dispatcher_mutex; - mutable std::shared_ptr keeper_storage_dispatcher; + mutable std::mutex keeper_dispatcher_mutex; + mutable std::shared_ptr keeper_dispatcher; #endif mutable std::mutex auxiliary_zookeepers_mutex; mutable std::map auxiliary_zookeepers; /// Map for auxiliary ZooKeeper clients. @@ -1901,10 +1900,9 @@ void Context::setSystemZooKeeperLogAfterInitializationIfNeeded() void Context::initializeKeeperDispatcher([[maybe_unused]] bool start_async) const { #if USE_NURAFT - std::lock_guard lock(shared->keeper_storage_dispatcher_mutex); + std::lock_guard lock(shared->keeper_dispatcher_mutex); - - if (shared->keeper_storage_dispatcher) + if (shared->keeper_dispatcher) throw Exception(ErrorCodes::LOGICAL_ERROR, "Trying to initialize Keeper multiple times"); const auto & config = getConfigRef(); @@ -1914,17 +1912,17 @@ void Context::initializeKeeperDispatcher([[maybe_unused]] bool start_async) cons if (start_async) { assert(!is_standalone_app); - LOG_INFO(shared->log, "Connected to ZooKeeper (or Keeper) before internal Keeper start or we don't depend on our Keeper cluster" - ", will wait for Keeper asynchronously"); + LOG_INFO(shared->log, "Connected to ZooKeeper (or Keeper) before internal Keeper start or we don't depend on our Keeper cluster, " + "will wait for Keeper asynchronously"); } else { - LOG_INFO(shared->log, "Cannot connect to ZooKeeper (or Keeper) before internal Keeper start," + LOG_INFO(shared->log, "Cannot connect to ZooKeeper (or Keeper) before internal Keeper start, " "will wait for Keeper synchronously"); } - shared->keeper_storage_dispatcher = std::make_shared(); - shared->keeper_storage_dispatcher->initialize(config, is_standalone_app, start_async); + shared->keeper_dispatcher = std::make_shared(); + shared->keeper_dispatcher->initialize(config, is_standalone_app, start_async); } #endif } @@ -1932,27 +1930,39 @@ void Context::initializeKeeperDispatcher([[maybe_unused]] bool start_async) cons #if USE_NURAFT std::shared_ptr & Context::getKeeperDispatcher() const { - std::lock_guard lock(shared->keeper_storage_dispatcher_mutex); - if (!shared->keeper_storage_dispatcher) + std::lock_guard lock(shared->keeper_dispatcher_mutex); + if (!shared->keeper_dispatcher) throw Exception(ErrorCodes::LOGICAL_ERROR, "Keeper must be initialized before requests"); - return shared->keeper_storage_dispatcher; + return shared->keeper_dispatcher; } #endif void Context::shutdownKeeperDispatcher() const { #if USE_NURAFT - std::lock_guard lock(shared->keeper_storage_dispatcher_mutex); - if (shared->keeper_storage_dispatcher) + std::lock_guard lock(shared->keeper_dispatcher_mutex); + if (shared->keeper_dispatcher) { - shared->keeper_storage_dispatcher->shutdown(); - shared->keeper_storage_dispatcher.reset(); + shared->keeper_dispatcher->shutdown(); + shared->keeper_dispatcher.reset(); } #endif } +void Context::updateKeeperConfiguration([[maybe_unused]] const Poco::Util::AbstractConfiguration & config) +{ +#if USE_NURAFT + std::lock_guard lock(shared->keeper_dispatcher_mutex); + if (!shared->keeper_dispatcher) + return; + + shared->keeper_dispatcher->updateConfiguration(config); +#endif +} + + zkutil::ZooKeeperPtr Context::getAuxiliaryZooKeeper(const String & name) const { std::lock_guard lock(shared->auxiliary_zookeepers_mutex); @@ -1960,6 +1970,9 @@ zkutil::ZooKeeperPtr Context::getAuxiliaryZooKeeper(const String & name) const auto zookeeper = shared->auxiliary_zookeepers.find(name); if (zookeeper == shared->auxiliary_zookeepers.end()) { + if (name.find(':') != std::string::npos || name.find('/') != std::string::npos) + throw Exception(ErrorCodes::BAD_ARGUMENTS, "Invalid auxiliary ZooKeeper name {}: ':' and '/' are not allowed", name); + const auto & config = shared->auxiliary_zookeepers_config ? *shared->auxiliary_zookeepers_config : getConfigRef(); if (!config.has("auxiliary_zookeepers." + name)) throw Exception( @@ -2437,12 +2450,10 @@ void Context::updateStorageConfiguration(const Poco::Util::AbstractConfiguration } } -#if !defined(ARCADIA_BUILD) if (shared->storage_s3_settings) { shared->storage_s3_settings->loadFromConfig("s3", config); } -#endif } @@ -2479,7 +2490,6 @@ const MergeTreeSettings & Context::getReplicatedMergeTreeSettings() const const StorageS3Settings & Context::getStorageS3Settings() const { -#if !defined(ARCADIA_BUILD) auto lock = getLock(); if (!shared->storage_s3_settings) @@ -2489,9 +2499,6 @@ const StorageS3Settings & Context::getStorageS3Settings() const } return *shared->storage_s3_settings; -#else - throw Exception("S3 is unavailable in Arcadia", ErrorCodes::NOT_IMPLEMENTED); -#endif } void Context::checkCanBeDropped(const String & database, const String & table, const size_t & size, const size_t & max_size_to_drop) const @@ -3058,16 +3065,23 @@ ReadSettings Context::getReadSettings() const std::string_view read_method_str = settings.local_filesystem_read_method.value; - if (auto opt_method = magic_enum::enum_cast(read_method_str)) + if (auto opt_method = magic_enum::enum_cast(read_method_str)) res.local_fs_method = *opt_method; else - throw Exception(ErrorCodes::UNKNOWN_READ_METHOD, "Unknown read method '{}'", read_method_str); + throw Exception(ErrorCodes::UNKNOWN_READ_METHOD, "Unknown read method '{}' for local filesystem", read_method_str); + + read_method_str = settings.remote_filesystem_read_method.value; + + if (auto opt_method = magic_enum::enum_cast(read_method_str)) + res.remote_fs_method = *opt_method; + else + throw Exception(ErrorCodes::UNKNOWN_READ_METHOD, "Unknown read method '{}' for remote filesystem", read_method_str); res.local_fs_prefetch = settings.local_filesystem_read_prefetch; res.remote_fs_prefetch = settings.remote_filesystem_read_prefetch; - res.remote_fs_backoff_threshold = settings.remote_fs_read_backoff_threshold; - res.remote_fs_backoff_max_tries = settings.remote_fs_read_backoff_max_tries; + res.remote_fs_read_max_backoff_ms = settings.remote_fs_read_max_backoff_ms; + res.remote_fs_read_backoff_max_tries = settings.remote_fs_read_backoff_max_tries; res.local_fs_buffer_size = settings.max_read_buffer_size; res.direct_io_threshold = settings.min_bytes_to_use_direct_io; diff --git a/src/Interpreters/Context.h b/src/Interpreters/Context.h index 8518275e529..cc6df875f7d 100644 --- a/src/Interpreters/Context.h +++ b/src/Interpreters/Context.h @@ -16,9 +16,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #include #include @@ -678,6 +676,7 @@ public: #endif void initializeKeeperDispatcher(bool start_async) const; void shutdownKeeperDispatcher() const; + void updateKeeperConfiguration(const Poco::Util::AbstractConfiguration & config); /// Set auxiliary zookeepers configuration at server starting or configuration reloading. void reloadAuxiliaryZooKeepersConfigIfChanged(const ConfigurationPtr & config); @@ -799,6 +798,7 @@ public: DisksMap getDisksMap() const; void updateStorageConfiguration(const Poco::Util::AbstractConfiguration & config); + /// Provides storage politics schemes StoragePolicyPtr getStoragePolicy(const String & name) const; diff --git a/src/Interpreters/CrashLog.cpp b/src/Interpreters/CrashLog.cpp index 6bc23d6cf62..1abaec4a17f 100644 --- a/src/Interpreters/CrashLog.cpp +++ b/src/Interpreters/CrashLog.cpp @@ -8,9 +8,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace DB diff --git a/src/Interpreters/DatabaseCatalog.cpp b/src/Interpreters/DatabaseCatalog.cpp index 08cc260b536..205d7052d0c 100644 --- a/src/Interpreters/DatabaseCatalog.cpp +++ b/src/Interpreters/DatabaseCatalog.cpp @@ -19,9 +19,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL # include diff --git a/src/Interpreters/ExpressionActions.h b/src/Interpreters/ExpressionActions.h index c420885eaa2..c942f33b6df 100644 --- a/src/Interpreters/ExpressionActions.h +++ b/src/Interpreters/ExpressionActions.h @@ -7,9 +7,7 @@ #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" namespace DB diff --git a/src/Interpreters/ExpressionAnalyzer.cpp b/src/Interpreters/ExpressionAnalyzer.cpp index a1f7a3c71e5..d40a92972b2 100644 --- a/src/Interpreters/ExpressionAnalyzer.cpp +++ b/src/Interpreters/ExpressionAnalyzer.cpp @@ -96,6 +96,96 @@ bool allowEarlyConstantFolding(const ActionsDAG & actions, const Settings & sett return true; } +bool checkPositionalArguments(ASTPtr & argument, const ASTSelectQuery * select_query, ASTSelectQuery::Expression expression) +{ + auto columns = select_query->select()->children; + + /// In case of expression/function (order by 1+2 and 2*x1, greatest(1, 2)) replace + /// positions only if all literals are numbers, otherwise it is not positional. + bool positional = true; + + /// Case when GROUP BY element is position. + if (const auto * ast_literal = typeid_cast(argument.get())) + { + auto which = ast_literal->value.getType(); + if (which == Field::Types::UInt64) + { + auto pos = ast_literal->value.get(); + if (pos > 0 && pos <= columns.size()) + { + const auto & column = columns[--pos]; + if (typeid_cast(column.get())) + { + argument = column->clone(); + } + else if (typeid_cast(column.get())) + { + std::function throw_if_aggregate_function = [&](ASTPtr node) + { + if (const auto * function = typeid_cast(node.get())) + { + auto is_aggregate_function = AggregateFunctionFactory::instance().isAggregateFunctionName(function->name); + if (is_aggregate_function) + { + throw Exception(ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT, + "Illegal value (aggregate function) for positional argument in {}", + ASTSelectQuery::expressionToString(expression)); + } + else + { + if (function->arguments) + { + for (const auto & arg : function->arguments->children) + throw_if_aggregate_function(arg); + } + } + } + }; + + if (expression == ASTSelectQuery::Expression::GROUP_BY) + throw_if_aggregate_function(column); + + argument = column->clone(); + } + else + { + throw Exception(ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT, + "Illegal value for positional argument in {}", + ASTSelectQuery::expressionToString(expression)); + } + } + else if (pos > columns.size() || !pos) + { + throw Exception(ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT, + "Positional argument out of bounds: {} (exprected in range [1, {}]", + pos, columns.size()); + } + /// Do not throw if pos < 0, because of TreeOptimizer::appendUnusedColumn() + } + else + positional = false; + } + else if (const auto * ast_function = typeid_cast(argument.get())) + { + if (ast_function->arguments) + { + for (auto & arg : ast_function->arguments->children) + positional &= checkPositionalArguments(arg, select_query, expression); + } + } + else + positional = false; + + return positional; +} + +void replaceForPositionalArguments(ASTPtr & argument, const ASTSelectQuery * select_query, ASTSelectQuery::Expression expression) +{ + auto argument_with_replacement = argument->clone(); + if (checkPositionalArguments(argument_with_replacement, select_query, expression)) + argument = argument_with_replacement; +} + } bool sanitizeBlock(Block & block, bool throw_if_cannot_create_column) @@ -164,37 +254,6 @@ ExpressionAnalyzer::ExpressionAnalyzer( analyzeAggregation(temp_actions); } -static ASTPtr checkPositionalArgument(ASTPtr argument, const ASTSelectQuery * select_query, ASTSelectQuery::Expression expression) -{ - auto columns = select_query->select()->children; - - /// Case when GROUP BY element is position. - /// Do not consider case when GROUP BY element is not a literal, but expression, even if all values are constants. - if (const auto * ast_literal = typeid_cast(argument.get())) - { - auto which = ast_literal->value.getType(); - if (which == Field::Types::UInt64) - { - auto pos = ast_literal->value.get(); - if (pos > 0 && pos <= columns.size()) - { - const auto & column = columns[--pos]; - if (const auto * literal_ast = typeid_cast(column.get())) - { - return std::make_shared(literal_ast->name()); - } - else - { - throw Exception(ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT, "Illegal value for positional argument in {}", - ASTSelectQuery::expressionToString(expression)); - } - } - /// Do not throw if out of bounds, see appendUnusedGroupByColumn. - } - } - return nullptr; -} - NamesAndTypesList ExpressionAnalyzer::getColumnsAfterArrayJoin(ActionsDAGPtr & actions, const NamesAndTypesList & src_columns) { const auto * select_query = query->as(); @@ -282,16 +341,14 @@ void ExpressionAnalyzer::analyzeAggregation(ActionsDAGPtr & temp_actions) for (ssize_t i = 0; i < ssize_t(group_asts.size()); ++i) { ssize_t size = group_asts.size(); - getRootActionsNoMakeSet(group_asts[i], true, temp_actions, false); if (getContext()->getSettingsRef().enable_positional_arguments) - { - auto new_argument = checkPositionalArgument(group_asts[i], select_query, ASTSelectQuery::Expression::GROUP_BY); - if (new_argument) - group_asts[i] = new_argument; - } + replaceForPositionalArguments(group_asts[i], select_query, ASTSelectQuery::Expression::GROUP_BY); + + getRootActionsNoMakeSet(group_asts[i], true, temp_actions, false); const auto & column_name = group_asts[i]->getColumnName(); + const auto * node = temp_actions->tryFindInIndex(column_name); if (!node) throw Exception("Unknown identifier (in GROUP BY): " + column_name, ErrorCodes::UNKNOWN_IDENTIFIER); @@ -890,9 +947,10 @@ static std::unique_ptr buildJoinedPlan( * - in the addExternalStorage function, the JOIN (SELECT ...) subquery is replaced with JOIN _data1, * in the subquery_for_set object this subquery is exposed as source and the temporary table _data1 as the `table`. * - this function shows the expression JOIN _data1. + * - JOIN tables will need aliases to correctly resolve USING clause. */ auto interpreter = interpretSubquery( - join_element.table_expression, context, original_right_columns, query_options.copy().setWithAllColumns()); + join_element.table_expression, context, original_right_columns, query_options.copy().setWithAllColumns().ignoreAlias(false)); auto joined_plan = std::make_unique(); interpreter->buildQueryPlan(*joined_plan); { @@ -987,7 +1045,12 @@ ActionsDAGPtr SelectQueryExpressionAnalyzer::appendPrewhere( /// Remove unused source_columns from prewhere actions. auto tmp_actions_dag = std::make_shared(sourceColumns()); getRootActions(select_query->prewhere(), only_types, tmp_actions_dag); - tmp_actions_dag->removeUnusedActions(NameSet{prewhere_column_name}); + /// Constants cannot be removed since they can be used in other parts of the query. + /// And if they are not used anywhere, except PREWHERE, they will be removed on the next step. + tmp_actions_dag->removeUnusedActions( + NameSet{prewhere_column_name}, + /* allow_remove_inputs= */ true, + /* allow_constant_folding= */ false); auto required_columns = tmp_actions_dag->getRequiredColumnsNames(); NameSet required_source_columns(required_columns.begin(), required_columns.end()); @@ -1231,6 +1294,16 @@ ActionsDAGPtr SelectQueryExpressionAnalyzer::appendOrderBy(ExpressionActionsChai ExpressionActionsChain::Step & step = chain.lastStep(aggregated_columns); + for (auto & child : select_query->orderBy()->children) + { + auto * ast = child->as(); + if (!ast || ast->children.empty()) + throw Exception("Bad ORDER BY expression AST", ErrorCodes::UNKNOWN_TYPE_OF_AST_NODE); + + if (getContext()->getSettingsRef().enable_positional_arguments) + replaceForPositionalArguments(ast->children.at(0), select_query, ASTSelectQuery::Expression::ORDER_BY); + } + getRootActions(select_query->orderBy(), only_types, step.actions()); bool with_fill = false; @@ -1239,16 +1312,6 @@ ActionsDAGPtr SelectQueryExpressionAnalyzer::appendOrderBy(ExpressionActionsChai for (auto & child : select_query->orderBy()->children) { auto * ast = child->as(); - if (!ast || ast->children.empty()) - throw Exception("Bad ORDER BY expression AST", ErrorCodes::UNKNOWN_TYPE_OF_AST_NODE); - - if (getContext()->getSettingsRef().enable_positional_arguments) - { - auto new_argument = checkPositionalArgument(ast->children.at(0), select_query, ASTSelectQuery::Expression::ORDER_BY); - if (new_argument) - ast->children[0] = new_argument; - } - ASTPtr order_expression = ast->children.at(0); step.addRequiredOutput(order_expression->getColumnName()); @@ -1302,11 +1365,7 @@ bool SelectQueryExpressionAnalyzer::appendLimitBy(ExpressionActionsChain & chain for (auto & child : children) { if (getContext()->getSettingsRef().enable_positional_arguments) - { - auto new_argument = checkPositionalArgument(child, select_query, ASTSelectQuery::Expression::LIMIT_BY); - if (new_argument) - child = new_argument; - } + replaceForPositionalArguments(child, select_query, ASTSelectQuery::Expression::LIMIT_BY); auto child_name = child->getColumnName(); if (!aggregated_names.count(child_name)) diff --git a/src/Interpreters/ExpressionJIT.cpp b/src/Interpreters/ExpressionJIT.cpp index 571b4ba5e13..90292d17fae 100644 --- a/src/Interpreters/ExpressionJIT.cpp +++ b/src/Interpreters/ExpressionJIT.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_EMBEDDED_COMPILER diff --git a/src/Interpreters/ExternalDictionariesLoader.cpp b/src/Interpreters/ExternalDictionariesLoader.cpp index c09ab8b78e5..e682a98114d 100644 --- a/src/Interpreters/ExternalDictionariesLoader.cpp +++ b/src/Interpreters/ExternalDictionariesLoader.cpp @@ -6,9 +6,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL # include diff --git a/src/Interpreters/InterpreterAlterQuery.cpp b/src/Interpreters/InterpreterAlterQuery.cpp index 90d5da35df8..b620ddf6a1e 100644 --- a/src/Interpreters/InterpreterAlterQuery.cpp +++ b/src/Interpreters/InterpreterAlterQuery.cpp @@ -1,6 +1,6 @@ #include -#include +#include #include #include #include @@ -66,7 +66,10 @@ BlockIO InterpreterAlterQuery::executeToTable(const ASTAlterQuery & alter) DatabasePtr database = DatabaseCatalog::instance().getDatabase(table_id.database_name); if (typeid_cast(database.get()) - && !getContext()->getClientInfo().is_replicated_database_internal) + && !getContext()->getClientInfo().is_replicated_database_internal + && !alter.isAttachAlter() + && !alter.isFetchAlter() + && !alter.isDropPartitionAlter()) { auto guard = DatabaseCatalog::instance().getDDLGuard(table_id.database_name, table_id.table_name); guard->releaseTableLock(); @@ -76,7 +79,8 @@ BlockIO InterpreterAlterQuery::executeToTable(const ASTAlterQuery & alter) StoragePtr table = DatabaseCatalog::instance().getTable(table_id, getContext()); if (table->isStaticStorage()) throw Exception(ErrorCodes::TABLE_IS_READ_ONLY, "Table is read-only"); - auto alter_lock = table->lockForAlter(getContext()->getCurrentQueryId(), getContext()->getSettingsRef().lock_acquire_timeout); + auto table_lock = table->lockForShare(getContext()->getCurrentQueryId(), getContext()->getSettingsRef().lock_acquire_timeout); + auto alter_lock = table->lockForAlter(getContext()->getSettingsRef().lock_acquire_timeout); auto metadata_snapshot = table->getInMemoryMetadataPtr(); /// Add default database to table identifiers that we can encounter in e.g. default expressions, mutation expression, etc. @@ -270,6 +274,7 @@ AccessRightsElements InterpreterAlterQuery::getRequiredAccessForCommand(const AS required_access.emplace_back(AccessType::ALTER_ORDER_BY, database, table); break; } + case ASTAlterCommand::REMOVE_SAMPLE_BY: case ASTAlterCommand::MODIFY_SAMPLE_BY: { required_access.emplace_back(AccessType::ALTER_SAMPLE_BY, database, table); diff --git a/src/Interpreters/InterpreterCheckQuery.cpp b/src/Interpreters/InterpreterCheckQuery.cpp index 9fd318ee4cf..b52b91f47eb 100644 --- a/src/Interpreters/InterpreterCheckQuery.cpp +++ b/src/Interpreters/InterpreterCheckQuery.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include #include diff --git a/src/Interpreters/InterpreterCreateFunctionQuery.cpp b/src/Interpreters/InterpreterCreateFunctionQuery.cpp index fe331985aa4..d39e22f55f0 100644 --- a/src/Interpreters/InterpreterCreateFunctionQuery.cpp +++ b/src/Interpreters/InterpreterCreateFunctionQuery.cpp @@ -1,7 +1,5 @@ #include -#include - #include #include #include @@ -11,6 +9,7 @@ #include #include #include +#include namespace DB @@ -24,45 +23,33 @@ namespace ErrorCodes BlockIO InterpreterCreateFunctionQuery::execute() { - auto current_context = getContext(); - current_context->checkAccess(AccessType::CREATE_FUNCTION); - FunctionNameNormalizer().visit(query_ptr.get()); - auto * create_function_query = query_ptr->as(); + ASTCreateFunctionQuery & create_function_query = query_ptr->as(); - if (!create_function_query) - throw Exception(ErrorCodes::UNSUPPORTED_METHOD, "Expected CREATE FUNCTION query"); + AccessRightsElements access_rights_elements; + access_rights_elements.emplace_back(AccessType::CREATE_FUNCTION); + + if (create_function_query.or_replace) + access_rights_elements.emplace_back(AccessType::DROP_FUNCTION); + + if (!create_function_query.cluster.empty()) + return executeDDLQueryOnCluster(query_ptr, getContext(), access_rights_elements); + + auto current_context = getContext(); + current_context->checkAccess(access_rights_elements); auto & user_defined_function_factory = UserDefinedSQLFunctionFactory::instance(); - auto & function_name = create_function_query->function_name; + auto & function_name = create_function_query.function_name; - bool if_not_exists = create_function_query->if_not_exists; - bool replace = create_function_query->or_replace; + bool if_not_exists = create_function_query.if_not_exists; + bool replace = create_function_query.or_replace; - create_function_query->if_not_exists = false; - create_function_query->or_replace = false; + create_function_query.if_not_exists = false; + create_function_query.or_replace = false; - if (if_not_exists && user_defined_function_factory.tryGet(function_name) != nullptr) - return {}; - - validateFunction(create_function_query->function_core, function_name); - - user_defined_function_factory.registerFunction(function_name, query_ptr, replace); - - if (persist_function) - { - try - { - UserDefinedSQLObjectsLoader::instance().storeObject(current_context, UserDefinedSQLObjectType::Function, function_name, *query_ptr, replace); - } - catch (Exception & exception) - { - user_defined_function_factory.unregisterFunction(function_name); - exception.addMessage(fmt::format("while storing user defined function {} on disk", backQuote(function_name))); - throw; - } - } + validateFunction(create_function_query.function_core, function_name); + user_defined_function_factory.registerFunction(current_context, function_name, query_ptr, replace, if_not_exists, persist_function); return {}; } diff --git a/src/Interpreters/InterpreterCreateQuery.cpp b/src/Interpreters/InterpreterCreateQuery.cpp index 6d38c55bd62..f1db1f771f3 100644 --- a/src/Interpreters/InterpreterCreateQuery.cpp +++ b/src/Interpreters/InterpreterCreateQuery.cpp @@ -41,7 +41,7 @@ #include #include -#include +#include #include #include diff --git a/src/Interpreters/InterpreterCreateQuery.h b/src/Interpreters/InterpreterCreateQuery.h index 89d27a30555..03c4b4ae1b6 100644 --- a/src/Interpreters/InterpreterCreateQuery.h +++ b/src/Interpreters/InterpreterCreateQuery.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include #include diff --git a/src/Interpreters/InterpreterDescribeQuery.cpp b/src/Interpreters/InterpreterDescribeQuery.cpp index 5370aee1096..638c671c3a3 100644 --- a/src/Interpreters/InterpreterDescribeQuery.cpp +++ b/src/Interpreters/InterpreterDescribeQuery.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/Interpreters/InterpreterDropFunctionQuery.cpp b/src/Interpreters/InterpreterDropFunctionQuery.cpp index b788c8f960f..be67ea68cdd 100644 --- a/src/Interpreters/InterpreterDropFunctionQuery.cpp +++ b/src/Interpreters/InterpreterDropFunctionQuery.cpp @@ -1,10 +1,12 @@ +#include + #include #include #include #include #include #include -#include +#include namespace DB @@ -12,19 +14,19 @@ namespace DB BlockIO InterpreterDropFunctionQuery::execute() { - auto current_context = getContext(); - current_context->checkAccess(AccessType::DROP_FUNCTION); - FunctionNameNormalizer().visit(query_ptr.get()); - auto & drop_function_query = query_ptr->as(); + ASTDropFunctionQuery & drop_function_query = query_ptr->as(); - auto & user_defined_functions_factory = UserDefinedSQLFunctionFactory::instance(); + AccessRightsElements access_rights_elements; + access_rights_elements.emplace_back(AccessType::DROP_FUNCTION); - if (drop_function_query.if_exists && !user_defined_functions_factory.has(drop_function_query.function_name)) - return {}; + if (!drop_function_query.cluster.empty()) + return executeDDLQueryOnCluster(query_ptr, getContext(), access_rights_elements); - UserDefinedSQLFunctionFactory::instance().unregisterFunction(drop_function_query.function_name); - UserDefinedSQLObjectsLoader::instance().removeObject(current_context, UserDefinedSQLObjectType::Function, drop_function_query.function_name); + auto current_context = getContext(); + current_context->checkAccess(access_rights_elements); + + UserDefinedSQLFunctionFactory::instance().unregisterFunction(current_context, drop_function_query.function_name, drop_function_query.if_exists); return {}; } diff --git a/src/Interpreters/InterpreterDropQuery.cpp b/src/Interpreters/InterpreterDropQuery.cpp index 5394c1ecaf0..13a376dff8d 100644 --- a/src/Interpreters/InterpreterDropQuery.cpp +++ b/src/Interpreters/InterpreterDropQuery.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include #include @@ -12,9 +12,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL # include diff --git a/src/Interpreters/InterpreterExistsQuery.cpp b/src/Interpreters/InterpreterExistsQuery.cpp index 24c30a8be30..5af51c61b29 100644 --- a/src/Interpreters/InterpreterExistsQuery.cpp +++ b/src/Interpreters/InterpreterExistsQuery.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include namespace DB diff --git a/src/Interpreters/InterpreterExternalDDLQuery.cpp b/src/Interpreters/InterpreterExternalDDLQuery.cpp index e91b95a988d..ac3f18f1741 100644 --- a/src/Interpreters/InterpreterExternalDDLQuery.cpp +++ b/src/Interpreters/InterpreterExternalDDLQuery.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #include #include diff --git a/src/Interpreters/InterpreterFactory.cpp b/src/Interpreters/InterpreterFactory.cpp index fcf5f19aef6..e9ee2b0910a 100644 --- a/src/Interpreters/InterpreterFactory.cpp +++ b/src/Interpreters/InterpreterFactory.cpp @@ -2,17 +2,10 @@ #include #include #include -#include -#include -#include -#include -#include #include -#include #include #include #include -#include #include #include #include @@ -21,12 +14,6 @@ #include #include #include -#include -#include -#include -#include -#include -#include #include #include #include @@ -34,26 +21,33 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include #include #include #include #include #include -#include -#include -#include -#include -#include #include -#include #include #include #include #include #include #include -#include #include #include #include @@ -62,13 +56,7 @@ #include #include #include -#include -#include -#include -#include #include -#include -#include #include #include #include @@ -76,6 +64,20 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include #include diff --git a/src/Interpreters/InterpreterInsertQuery.cpp b/src/Interpreters/InterpreterInsertQuery.cpp index 6a1a8652b23..231eb15b02f 100644 --- a/src/Interpreters/InterpreterInsertQuery.cpp +++ b/src/Interpreters/InterpreterInsertQuery.cpp @@ -1,6 +1,6 @@ #include -#include +#include #include #include #include diff --git a/src/Interpreters/InterpreterKillQueryQuery.cpp b/src/Interpreters/InterpreterKillQueryQuery.cpp index e94eee25dc3..2b949266c17 100644 --- a/src/Interpreters/InterpreterKillQueryQuery.cpp +++ b/src/Interpreters/InterpreterKillQueryQuery.cpp @@ -33,6 +33,7 @@ namespace ErrorCodes { extern const int LOGICAL_ERROR; extern const int ACCESS_DENIED; + extern const int NOT_IMPLEMENTED; } @@ -292,6 +293,71 @@ BlockIO InterpreterKillQueryQuery::execute() break; } + case ASTKillQueryQuery::Type::PartMoveToShard: + { + if (query.sync) + throw Exception(ErrorCodes::NOT_IMPLEMENTED, "SYNC modifier is not supported for this statement."); + + Block moves_block = getSelectResult( + "database, table, task_name, task_uuid, part_name, to_shard, state", + "system.part_moves_between_shards"); + + if (!moves_block) + return res_io; + + const ColumnString & database_col = typeid_cast(*moves_block.getByName("database").column); + const ColumnString & table_col = typeid_cast(*moves_block.getByName("table").column); + const ColumnUUID & task_uuid_col = typeid_cast(*moves_block.getByName("task_uuid").column); + + auto header = moves_block.cloneEmpty(); + header.insert(0, {ColumnString::create(), std::make_shared(), "kill_status"}); + + MutableColumns res_columns = header.cloneEmptyColumns(); + auto table_id = StorageID::createEmpty(); + AccessRightsElements required_access_rights; + auto access = getContext()->getAccess(); + bool access_denied = false; + + for (size_t i = 0; i < moves_block.rows(); ++i) + { + table_id = StorageID{database_col.getDataAt(i).toString(), table_col.getDataAt(i).toString()}; + auto task_uuid = get(task_uuid_col[i]); + + CancellationCode code = CancellationCode::Unknown; + + if (!query.test) + { + auto storage = DatabaseCatalog::instance().tryGetTable(table_id, getContext()); + if (!storage) + code = CancellationCode::NotFound; + else + { + ASTAlterCommand alter_command{}; + alter_command.type = ASTAlterCommand::MOVE_PARTITION; + alter_command.move_destination_type = DataDestinationType::SHARD; + required_access_rights = InterpreterAlterQuery::getRequiredAccessForCommand( + alter_command, table_id.database_name, table_id.table_name); + if (!access->isGranted(required_access_rights)) + { + access_denied = true; + continue; + } + code = storage->killPartMoveToShard(task_uuid); + } + } + + insertResultRow(i, code, moves_block, header, res_columns); + } + + if (res_columns[0]->empty() && access_denied) + throw Exception( + "Not allowed to kill move partition. To execute this query it's necessary to have the grant " + required_access_rights.toString(), + ErrorCodes::ACCESS_DENIED); + + res_io.pipeline = QueryPipeline(Pipe(std::make_shared(header.cloneWithColumns(std::move(res_columns))))); + + break; + } } return res_io; diff --git a/src/Interpreters/InterpreterOptimizeQuery.cpp b/src/Interpreters/InterpreterOptimizeQuery.cpp index 64de5ee0479..a44a49ec020 100644 --- a/src/Interpreters/InterpreterOptimizeQuery.cpp +++ b/src/Interpreters/InterpreterOptimizeQuery.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/Interpreters/InterpreterRenameQuery.cpp b/src/Interpreters/InterpreterRenameQuery.cpp index e3d52487a52..72d7e9b1cba 100644 --- a/src/Interpreters/InterpreterRenameQuery.cpp +++ b/src/Interpreters/InterpreterRenameQuery.cpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/Interpreters/InterpreterSelectQuery.cpp b/src/Interpreters/InterpreterSelectQuery.cpp index 35c8c32c65b..e2233b98d7d 100644 --- a/src/Interpreters/InterpreterSelectQuery.cpp +++ b/src/Interpreters/InterpreterSelectQuery.cpp @@ -10,7 +10,7 @@ #include #include -#include +#include #include #include @@ -43,15 +43,12 @@ #include #include #include -#include #include #include #include -#include +#include #include -#include #include -#include #include #include #include @@ -72,6 +69,7 @@ #include #include +#include #include #include #include @@ -158,6 +156,15 @@ InterpreterSelectQuery::InterpreterSelectQuery( { } +InterpreterSelectQuery::InterpreterSelectQuery( + const ASTPtr & query_ptr_, + ContextPtr context_, + const SelectQueryOptions & options_, + PreparedSets prepared_sets_) + : InterpreterSelectQuery(query_ptr_, context_, std::nullopt, nullptr, options_, {}, {}, std::move(prepared_sets_)) +{ +} + InterpreterSelectQuery::InterpreterSelectQuery( const ASTPtr & query_ptr_, ContextPtr context_, @@ -260,18 +267,21 @@ InterpreterSelectQuery::InterpreterSelectQuery( const StoragePtr & storage_, const SelectQueryOptions & options_, const Names & required_result_column_names, - const StorageMetadataPtr & metadata_snapshot_) + const StorageMetadataPtr & metadata_snapshot_, + PreparedSets prepared_sets_) /// NOTE: the query almost always should be cloned because it will be modified during analysis. : IInterpreterUnionOrSelectQuery(options_.modify_inplace ? query_ptr_ : query_ptr_->clone(), context_, options_) , storage(storage_) , input_pipe(std::move(input_pipe_)) , log(&Poco::Logger::get("InterpreterSelectQuery")) , metadata_snapshot(metadata_snapshot_) + , prepared_sets(std::move(prepared_sets_)) { checkStackSize(); query_info.ignore_projections = options.ignore_projections; query_info.is_projection_query = options.is_projection_query; + query_info.original_query = query_ptr->clone(); initSettings(); const Settings & settings = context->getSettingsRef(); @@ -355,7 +365,6 @@ InterpreterSelectQuery::InterpreterSelectQuery( /// Reuse already built sets for multiple passes of analysis SubqueriesForSets subquery_for_sets; - PreparedSets prepared_sets; auto analyze = [&] (bool try_move_to_prewhere) { @@ -518,7 +527,7 @@ InterpreterSelectQuery::InterpreterSelectQuery( /// Reuse already built sets for multiple passes of analysis subquery_for_sets = std::move(query_analyzer->getSubqueriesForSets()); - prepared_sets = std::move(query_analyzer->getPreparedSets()); + prepared_sets = query_info.sets.empty() ? std::move(query_analyzer->getPreparedSets()) : std::move(query_info.sets); /// Do not try move conditions to PREWHERE for the second time. /// Otherwise, we won't be able to fallback from inefficient PREWHERE to WHERE later. @@ -2080,6 +2089,7 @@ void InterpreterSelectQuery::executeAggregation(QueryPlan & query_plan, const Ac params, final, settings.max_block_size, + settings.aggregation_in_order_max_block_bytes, merge_threads, temporary_data_merge_threads, storage_has_evenly_distributed_read, @@ -2260,35 +2270,20 @@ void InterpreterSelectQuery::executeWindow(QueryPlan & query_plan) // happens in case of `over ()`. if (!w.full_sort_description.empty() && (i == 0 || !sortIsPrefix(w, *windows_sorted[i - 1]))) { - auto partial_sorting = std::make_unique( - query_plan.getCurrentDataStream(), - w.full_sort_description, - 0 /* LIMIT */, - SizeLimits(settings.max_rows_to_sort, settings.max_bytes_to_sort, settings.sort_overflow_mode)); - partial_sorting->setStepDescription("Sort each block for window '" + w.window_name + "'"); - query_plan.addStep(std::move(partial_sorting)); - auto merge_sorting_step = std::make_unique( + auto sorting_step = std::make_unique( query_plan.getCurrentDataStream(), w.full_sort_description, settings.max_block_size, 0 /* LIMIT */, + SizeLimits(settings.max_rows_to_sort, settings.max_bytes_to_sort, settings.sort_overflow_mode), settings.max_bytes_before_remerge_sort, settings.remerge_sort_lowered_memory_bytes_ratio, settings.max_bytes_before_external_sort, context->getTemporaryVolume(), settings.min_free_disk_space_for_temporary_data); - merge_sorting_step->setStepDescription("Merge sorted blocks for window '" + w.window_name + "'"); - query_plan.addStep(std::move(merge_sorting_step)); - - // First MergeSorted, now MergingSorted. - auto merging_sorted = std::make_unique( - query_plan.getCurrentDataStream(), - w.full_sort_description, - settings.max_block_size, - 0 /* LIMIT */); - merging_sorted->setStepDescription("Merge sorted streams for window '" + w.window_name + "'"); - query_plan.addStep(std::move(merging_sorted)); + sorting_step->setStepDescription("Sorting for window '" + w.window_name + "'"); + query_plan.addStep(std::move(sorting_step)); } auto window_step = std::make_unique(query_plan.getCurrentDataStream(), w, w.window_functions); @@ -2303,7 +2298,7 @@ void InterpreterSelectQuery::executeOrderOptimized(QueryPlan & query_plan, Input { const Settings & settings = context->getSettingsRef(); - auto finish_sorting_step = std::make_unique( + auto finish_sorting_step = std::make_unique( query_plan.getCurrentDataStream(), input_sorting_info->order_key_prefix_descr, output_order_descr, @@ -2333,32 +2328,21 @@ void InterpreterSelectQuery::executeOrder(QueryPlan & query_plan, InputOrderInfo const Settings & settings = context->getSettingsRef(); - auto partial_sorting = std::make_unique( - query_plan.getCurrentDataStream(), - output_order_descr, - limit, - SizeLimits(settings.max_rows_to_sort, settings.max_bytes_to_sort, settings.sort_overflow_mode)); - - partial_sorting->setStepDescription("Sort each block for ORDER BY"); - query_plan.addStep(std::move(partial_sorting)); - /// Merge the sorted blocks. - auto merge_sorting_step = std::make_unique( + auto sorting_step = std::make_unique( query_plan.getCurrentDataStream(), output_order_descr, settings.max_block_size, limit, + SizeLimits(settings.max_rows_to_sort, settings.max_bytes_to_sort, settings.sort_overflow_mode), settings.max_bytes_before_remerge_sort, settings.remerge_sort_lowered_memory_bytes_ratio, settings.max_bytes_before_external_sort, context->getTemporaryVolume(), settings.min_free_disk_space_for_temporary_data); - merge_sorting_step->setStepDescription("Merge sorted blocks for ORDER BY"); - query_plan.addStep(std::move(merge_sorting_step)); - - /// If there are several streams, we merge them into one - executeMergeSorted(query_plan, output_order_descr, limit, "for ORDER BY"); + sorting_step->setStepDescription("Sorting for ORDER BY"); + query_plan.addStep(std::move(sorting_step)); } @@ -2376,7 +2360,7 @@ void InterpreterSelectQuery::executeMergeSorted(QueryPlan & query_plan, const So const Settings & settings = context->getSettingsRef(); auto merging_sorted - = std::make_unique(query_plan.getCurrentDataStream(), sort_description, settings.max_block_size, limit); + = std::make_unique(query_plan.getCurrentDataStream(), sort_description, settings.max_block_size, limit); merging_sorted->setStepDescription("Merge sorted streams " + description); query_plan.addStep(std::move(merging_sorted)); @@ -2583,6 +2567,19 @@ void InterpreterSelectQuery::initSettings() auto & query = getSelectQuery(); if (query.settings()) InterpreterSetQuery(query.settings(), context).executeForCurrentContext(); + + auto & client_info = context->getClientInfo(); + auto min_major = DBMS_MIN_MAJOR_VERSION_WITH_CURRENT_AGGREGATION_VARIANT_SELECTION_METHOD; + auto min_minor = DBMS_MIN_MINOR_VERSION_WITH_CURRENT_AGGREGATION_VARIANT_SELECTION_METHOD; + + if (client_info.query_kind == ClientInfo::QueryKind::SECONDARY_QUERY && + std::forward_as_tuple(client_info.connection_client_version_major, client_info.connection_client_version_minor) < std::forward_as_tuple(min_major, min_minor)) + { + /// Disable two-level aggregation due to version incompatibility. + context->setSetting("group_by_two_level_threshold", Field(0)); + context->setSetting("group_by_two_level_threshold_bytes", Field(0)); + + } } } diff --git a/src/Interpreters/InterpreterSelectQuery.h b/src/Interpreters/InterpreterSelectQuery.h index cf24d14b737..4298cbbb794 100644 --- a/src/Interpreters/InterpreterSelectQuery.h +++ b/src/Interpreters/InterpreterSelectQuery.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -66,6 +67,13 @@ public: const StorageMetadataPtr & metadata_snapshot_ = nullptr, const SelectQueryOptions & = {}); + /// Read data not from the table specified in the query, but from the specified `storage_`. + InterpreterSelectQuery( + const ASTPtr & query_ptr_, + ContextPtr context_, + const SelectQueryOptions &, + PreparedSets prepared_sets_); + ~InterpreterSelectQuery() override; /// Execute a query. Get the stream of blocks to read. @@ -83,7 +91,7 @@ public: const SelectQueryInfo & getQueryInfo() const { return query_info; } - const SelectQueryExpressionAnalyzer * getQueryAnalyzer() const { return query_analyzer.get(); } + SelectQueryExpressionAnalyzer * getQueryAnalyzer() const { return query_analyzer.get(); } const ExpressionAnalysisResult & getAnalysisResult() const { return analysis_result; } @@ -104,7 +112,8 @@ private: const StoragePtr & storage_, const SelectQueryOptions &, const Names & required_result_column_names = {}, - const StorageMetadataPtr & metadata_snapshot_ = nullptr); + const StorageMetadataPtr & metadata_snapshot_ = nullptr, + PreparedSets prepared_sets_ = {}); ASTSelectQuery & getSelectQuery() { return query_ptr->as(); } @@ -193,6 +202,9 @@ private: Poco::Logger * log; StorageMetadataPtr metadata_snapshot; + + /// Reuse already built sets for multiple passes of analysis, possibly across interpreters. + PreparedSets prepared_sets; }; } diff --git a/src/Interpreters/InterpreterShowCreateQuery.cpp b/src/Interpreters/InterpreterShowCreateQuery.cpp index 30a417f6fa7..84dbae0fac5 100644 --- a/src/Interpreters/InterpreterShowCreateQuery.cpp +++ b/src/Interpreters/InterpreterShowCreateQuery.cpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/Interpreters/InterpreterSystemQuery.cpp b/src/Interpreters/InterpreterSystemQuery.cpp index 83061de2c10..69bf036ae97 100644 --- a/src/Interpreters/InterpreterSystemQuery.cpp +++ b/src/Interpreters/InterpreterSystemQuery.cpp @@ -31,7 +31,7 @@ #include #include #include -#include +#include #include #include #include @@ -44,9 +44,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" namespace DB { diff --git a/src/Interpreters/InterpreterUseQuery.cpp b/src/Interpreters/InterpreterUseQuery.cpp index 626d2f499c7..d8a5ae57470 100644 --- a/src/Interpreters/InterpreterUseQuery.cpp +++ b/src/Interpreters/InterpreterUseQuery.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include diff --git a/src/Interpreters/InterpreterWatchQuery.cpp b/src/Interpreters/InterpreterWatchQuery.cpp index e5e447562c6..4e30c3d21a4 100644 --- a/src/Interpreters/InterpreterWatchQuery.cpp +++ b/src/Interpreters/InterpreterWatchQuery.cpp @@ -14,7 +14,7 @@ limitations under the License. */ #include #include #include -#include +#include #include diff --git a/src/Interpreters/JIT/CHJIT.h b/src/Interpreters/JIT/CHJIT.h index 0a553be6bb3..58da0fcffcc 100644 --- a/src/Interpreters/JIT/CHJIT.h +++ b/src/Interpreters/JIT/CHJIT.h @@ -1,17 +1,15 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_EMBEDDED_COMPILER #include #include -#include // Y_IGNORE -#include // Y_IGNORE -#include // Y_IGNORE +#include +#include +#include namespace DB { diff --git a/src/Interpreters/JIT/CompileDAG.h b/src/Interpreters/JIT/CompileDAG.h index ee9cc5cc83a..84bfc738cfc 100644 --- a/src/Interpreters/JIT/CompileDAG.h +++ b/src/Interpreters/JIT/CompileDAG.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_EMBEDDED_COMPILER diff --git a/src/Interpreters/JIT/CompiledExpressionCache.cpp b/src/Interpreters/JIT/CompiledExpressionCache.cpp index 98f4eec982d..674e02236f5 100644 --- a/src/Interpreters/JIT/CompiledExpressionCache.cpp +++ b/src/Interpreters/JIT/CompiledExpressionCache.cpp @@ -16,12 +16,12 @@ CompiledExpressionCacheFactory & CompiledExpressionCacheFactory::instance() return factory; } -void CompiledExpressionCacheFactory::init(size_t cache_size) +void CompiledExpressionCacheFactory::init(size_t cache_size_in_bytes, size_t cache_size_in_elements) { if (cache) throw Exception(ErrorCodes::LOGICAL_ERROR, "CompiledExpressionCache was already initialized"); - cache = std::make_unique(cache_size); + cache = std::make_unique(cache_size_in_bytes, cache_size_in_elements); } CompiledExpressionCache * CompiledExpressionCacheFactory::tryGetCache() diff --git a/src/Interpreters/JIT/CompiledExpressionCache.h b/src/Interpreters/JIT/CompiledExpressionCache.h index 5182a77d77a..936b5798280 100644 --- a/src/Interpreters/JIT/CompiledExpressionCache.h +++ b/src/Interpreters/JIT/CompiledExpressionCache.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_EMBEDDED_COMPILER # include @@ -52,7 +50,7 @@ private: public: static CompiledExpressionCacheFactory & instance(); - void init(size_t cache_size); + void init(size_t cache_size_in_bytes, size_t cache_size_in_elements); CompiledExpressionCache * tryGetCache(); }; diff --git a/src/Interpreters/JIT/compileFunction.h b/src/Interpreters/JIT/compileFunction.h index ae91c2a7650..e35ea49291c 100644 --- a/src/Interpreters/JIT/compileFunction.h +++ b/src/Interpreters/JIT/compileFunction.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_EMBEDDED_COMPILER diff --git a/src/Interpreters/Lemmatizers.cpp b/src/Interpreters/Lemmatizers.cpp index 78af43285ef..72f0161b8fd 100644 --- a/src/Interpreters/Lemmatizers.cpp +++ b/src/Interpreters/Lemmatizers.cpp @@ -1,13 +1,10 @@ - -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_NLP #include -#include // Y_IGNORE -#include // Y_IGNORE +#include +#include #include #include diff --git a/src/Interpreters/Lemmatizers.h b/src/Interpreters/Lemmatizers.h index 3712f76387b..936c796bd74 100644 --- a/src/Interpreters/Lemmatizers.h +++ b/src/Interpreters/Lemmatizers.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_NLP diff --git a/src/Interpreters/MutationsInterpreter.cpp b/src/Interpreters/MutationsInterpreter.cpp index bfa8a06c618..471ad67d4e7 100644 --- a/src/Interpreters/MutationsInterpreter.cpp +++ b/src/Interpreters/MutationsInterpreter.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -784,8 +785,12 @@ ASTPtr MutationsInterpreter::prepareInterpreterSelectQuery(std::vector & for (const String & column : stage.output_columns) all_asts->children.push_back(std::make_shared(column)); - auto syntax_result = TreeRewriter(context).analyze(all_asts, all_columns, storage, metadata_snapshot); - if (context->hasQueryContext()) + /// Executing scalar subquery on that stage can lead to deadlock + /// e.g. ALTER referencing the same table in scalar subquery + bool execute_scalar_subqueries = !dry_run; + auto syntax_result = TreeRewriter(context).analyze( + all_asts, all_columns, storage, metadata_snapshot, false, true, execute_scalar_subqueries); + if (execute_scalar_subqueries && context->hasQueryContext()) for (const auto & it : syntax_result->getScalars()) context->getQueryContext()->addScalar(it.first, it.second); diff --git a/src/Interpreters/MySQL/tests/gtest_create_rewritten.cpp b/src/Interpreters/MySQL/tests/gtest_create_rewritten.cpp index 08af123448e..6055d53cf11 100644 --- a/src/Interpreters/MySQL/tests/gtest_create_rewritten.cpp +++ b/src/Interpreters/MySQL/tests/gtest_create_rewritten.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #include diff --git a/src/Interpreters/OptimizeIfWithConstantConditionVisitor.cpp b/src/Interpreters/OptimizeIfWithConstantConditionVisitor.cpp index a9814ce50f5..993c9945039 100644 --- a/src/Interpreters/OptimizeIfWithConstantConditionVisitor.cpp +++ b/src/Interpreters/OptimizeIfWithConstantConditionVisitor.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/Interpreters/Session.cpp b/src/Interpreters/Session.cpp index 865c9551219..ac8187980c3 100644 --- a/src/Interpreters/Session.cpp +++ b/src/Interpreters/Session.cpp @@ -244,7 +244,7 @@ void Session::shutdownNamedSessions() } Session::Session(const ContextPtr & global_context_, ClientInfo::Interface interface_) - : session_id(UUIDHelpers::generateV4()), + : auth_id(UUIDHelpers::generateV4()), global_context(global_context_), log(&Poco::Logger::get(String{magic_enum::enum_name(interface_)} + "-Session")) { @@ -255,7 +255,7 @@ Session::Session(const ContextPtr & global_context_, ClientInfo::Interface inter Session::~Session() { LOG_DEBUG(log, "{} Destroying {} of user {}", - toString(session_id), + toString(auth_id), (named_session ? "named session '" + named_session->key.second + "'" : "unnamed session"), (user_id ? toString(*user_id) : "") ); @@ -267,16 +267,16 @@ Session::~Session() if (notified_session_log_about_login) { if (auto session_log = getSessionLog(); session_log && user) - session_log->addLogOut(session_id, user->getName(), getClientInfo()); + session_log->addLogOut(auth_id, user->getName(), getClientInfo()); } } -Authentication::Type Session::getAuthenticationType(const String & user_name) const +AuthenticationType Session::getAuthenticationType(const String & user_name) const { - return global_context->getAccessControlManager().read(user_name)->authentication.getType(); + return global_context->getAccessControlManager().read(user_name)->auth_data.getType(); } -Authentication::Type Session::getAuthenticationTypeOrLogInFailure(const String & user_name) const +AuthenticationType Session::getAuthenticationTypeOrLogInFailure(const String & user_name) const { try { @@ -285,7 +285,7 @@ Authentication::Type Session::getAuthenticationTypeOrLogInFailure(const String & catch (const Exception & e) { if (auto session_log = getSessionLog()) - session_log->addLoginFailure(session_id, getClientInfo(), user_name, e); + session_log->addLoginFailure(auth_id, getClientInfo(), user_name, e); throw; } @@ -306,30 +306,24 @@ void Session::authenticate(const Credentials & credentials_, const Poco::Net::So address = Poco::Net::SocketAddress{"127.0.0.1", 0}; LOG_DEBUG(log, "{} Authenticating user '{}' from {}", - toString(session_id), credentials_.getUserName(), address.toString()); + toString(auth_id), credentials_.getUserName(), address.toString()); try { user_id = global_context->getAccessControlManager().login(credentials_, address.host()); LOG_DEBUG(log, "{} Authenticated with global context as user {}", - toString(session_id), user_id ? toString(*user_id) : ""); + toString(auth_id), user_id ? toString(*user_id) : ""); } catch (const Exception & e) { - LOG_DEBUG(log, "{} Authentication failed with error: {}", toString(session_id), e.what()); + LOG_DEBUG(log, "{} Authentication failed with error: {}", toString(auth_id), e.what()); if (auto session_log = getSessionLog()) - session_log->addLoginFailure(session_id, *prepared_client_info, credentials_.getUserName(), e); + session_log->addLoginFailure(auth_id, *prepared_client_info, credentials_.getUserName(), e); throw; } prepared_client_info->current_user = credentials_.getUserName(); prepared_client_info->current_address = address; - -#if defined(ARCADIA_BUILD) - /// This is harmful field that is used only in foreign "Arcadia" build. - if (const auto * basic_credentials = dynamic_cast(&credentials_)) - prepared_client_info->current_password = basic_credentials->getPassword(); -#endif } ClientInfo & Session::getClientInfo() @@ -350,7 +344,7 @@ ContextMutablePtr Session::makeSessionContext() throw Exception("Session context must be created before any query context", ErrorCodes::LOGICAL_ERROR); LOG_DEBUG(log, "{} Creating session context with user_id: {}", - toString(session_id), user_id ? toString(*user_id) : ""); + toString(auth_id), user_id ? toString(*user_id) : ""); /// Make a new session context. ContextMutablePtr new_session_context; new_session_context = Context::createCopy(global_context); @@ -380,7 +374,7 @@ ContextMutablePtr Session::makeSessionContext(const String & session_name_, std: throw Exception("Session context must be created before any query context", ErrorCodes::LOGICAL_ERROR); LOG_DEBUG(log, "{} Creating named session context with name: {}, user_id: {}", - toString(session_id), session_name_, user_id ? toString(*user_id) : ""); + toString(auth_id), session_name_, user_id ? toString(*user_id) : ""); /// Make a new session context OR /// if the `session_id` and `user_id` were used before then just get a previously created session context. @@ -439,7 +433,7 @@ ContextMutablePtr Session::makeQueryContextImpl(const ClientInfo * client_info_t query_context->makeQueryContext(); LOG_DEBUG(log, "{} Creating query context from {} context, user_id: {}, parent context user: {}", - toString(session_id), + toString(auth_id), from_session_context ? "session" : "global", user_id ? toString(*user_id) : "", query_context->getUser() ? query_context->getUser()->getName() : ""); @@ -456,9 +450,6 @@ ContextMutablePtr Session::makeQueryContextImpl(const ClientInfo * client_info_t { res_client_info.current_user = prepared_client_info->current_user; res_client_info.current_address = prepared_client_info->current_address; -#if defined(ARCADIA_BUILD) - res_client_info.current_password = prepared_client_info->current_password; -#endif } /// Set parameters of initial query. @@ -487,7 +478,7 @@ ContextMutablePtr Session::makeQueryContextImpl(const ClientInfo * client_info_t if (auto session_log = getSessionLog(); user && user_id && session_log) { session_log->addLoginSuccess( - session_id, + auth_id, named_session ? std::optional(named_session->key.second) : std::nullopt, *query_context); diff --git a/src/Interpreters/Session.h b/src/Interpreters/Session.h index b62327103e9..273ed88b9b5 100644 --- a/src/Interpreters/Session.h +++ b/src/Interpreters/Session.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include @@ -14,7 +14,7 @@ namespace Poco::Net { class SocketAddress; } namespace DB { class Credentials; -class Authentication; +class AuthenticationData; struct NamedSessionData; class NamedSessionsStorage; struct User; @@ -41,10 +41,10 @@ public: Session& operator=(const Session &) = delete; /// Provides information about the authentication type of a specified user. - Authentication::Type getAuthenticationType(const String & user_name) const; + AuthenticationType getAuthenticationType(const String & user_name) const; /// Same as getAuthenticationType, but adds LoginFailure event in case of error. - Authentication::Type getAuthenticationTypeOrLogInFailure(const String & user_name) const; + AuthenticationType getAuthenticationTypeOrLogInFailure(const String & user_name) const; /// Sets the current user, checks the credentials and that the specified address is allowed to connect from. /// The function throws an exception if there is no such user or password is wrong. @@ -77,7 +77,7 @@ private: ContextMutablePtr makeQueryContextImpl(const ClientInfo * client_info_to_copy, ClientInfo * client_info_to_move) const; mutable bool notified_session_log_about_login = false; - const UUID session_id; + const UUID auth_id; const ContextPtr global_context; /// ClientInfo that will be copied to a session context when it's created. diff --git a/src/Interpreters/SessionLog.cpp b/src/Interpreters/SessionLog.cpp index 4967cb867c8..6dac7ace662 100644 --- a/src/Interpreters/SessionLog.cpp +++ b/src/Interpreters/SessionLog.cpp @@ -45,7 +45,7 @@ auto eventTime() return std::make_pair(time_in_seconds(finish_time), time_in_microseconds(finish_time)); } -using AuthType = Authentication::Type; +using AuthType = AuthenticationType; using Interface = ClientInfo::Interface; void fillColumnArray(const Strings & data, IColumn & column) @@ -67,8 +67,8 @@ void fillColumnArray(const Strings & data, IColumn & column) namespace DB { -SessionLogElement::SessionLogElement(const UUID & session_id_, Type type_) - : session_id(session_id_), +SessionLogElement::SessionLogElement(const UUID & auth_id_, Type type_) + : auth_id(auth_id_), type(type_) { std::tie(event_time, event_time_microseconds) = eventTime(); @@ -84,7 +84,7 @@ NamesAndTypesList SessionLogElement::getNamesAndTypes() {"Logout", static_cast(SESSION_LOGOUT)} }); -#define AUTH_TYPE_NAME_AND_VALUE(v) std::make_pair(Authentication::TypeInfo::get(v).raw_name, static_cast(v)) +#define AUTH_TYPE_NAME_AND_VALUE(v) std::make_pair(AuthenticationTypeInfo::get(v).raw_name, static_cast(v)) const auto identified_with_column = std::make_shared( DataTypeEnum8::Values { @@ -109,7 +109,7 @@ NamesAndTypesList SessionLogElement::getNamesAndTypes() const auto lc_string_datatype = std::make_shared(std::make_shared()); - const auto changed_settings_type_column = std::make_shared( + const auto settings_type_column = std::make_shared( std::make_shared( DataTypes({ // setting name @@ -121,8 +121,8 @@ NamesAndTypesList SessionLogElement::getNamesAndTypes() return { {"type", std::move(event_type)}, - {"session_id", std::make_shared()}, - {"session_name", std::make_shared()}, + {"auth_id", std::make_shared()}, + {"session_id", std::make_shared()}, {"event_date", std::make_shared()}, {"event_time", std::make_shared()}, {"event_time_microseconds", std::make_shared(6)}, @@ -132,7 +132,7 @@ NamesAndTypesList SessionLogElement::getNamesAndTypes() {"profiles", std::make_shared(lc_string_datatype)}, {"roles", std::make_shared(lc_string_datatype)}, - {"changed_settings", std::move(changed_settings_type_column)}, + {"settings", std::move(settings_type_column)}, {"client_address", DataTypeFactory::instance().get("IPv6")}, {"client_port", std::make_shared()}, @@ -152,13 +152,13 @@ NamesAndTypesList SessionLogElement::getNamesAndTypes() void SessionLogElement::appendToBlock(MutableColumns & columns) const { assert(type >= SESSION_LOGIN_FAILURE && type <= SESSION_LOGOUT); - assert(user_identified_with >= Authentication::Type::NO_PASSWORD && user_identified_with <= Authentication::Type::MAX_TYPE); + assert(user_identified_with >= AuthenticationType::NO_PASSWORD && user_identified_with <= AuthenticationType::MAX_TYPE); size_t i = 0; columns[i++]->insert(type); + columns[i++]->insert(auth_id); columns[i++]->insert(session_id); - columns[i++]->insert(session_name); columns[i++]->insert(static_cast(DateLUT::instance().toDayNum(event_time).toUnderType())); columns[i++]->insert(event_time); columns[i++]->insert(event_time_microseconds); @@ -170,21 +170,21 @@ void SessionLogElement::appendToBlock(MutableColumns & columns) const fillColumnArray(roles, *columns[i++]); { - auto & changed_settings_array_col = assert_cast(*columns[i++]); - auto & changed_settings_tuple_col = assert_cast(changed_settings_array_col.getData()); - auto & names_col = *changed_settings_tuple_col.getColumnPtr(0)->assumeMutable(); - auto & values_col = assert_cast(*changed_settings_tuple_col.getColumnPtr(1)->assumeMutable()); + auto & settings_array_col = assert_cast(*columns[i++]); + auto & settings_tuple_col = assert_cast(settings_array_col.getData()); + auto & names_col = *settings_tuple_col.getColumnPtr(0)->assumeMutable(); + auto & values_col = assert_cast(*settings_tuple_col.getColumnPtr(1)->assumeMutable()); size_t items_added = 0; - for (const auto & kv : changed_settings) + for (const auto & kv : settings) { names_col.insert(kv.first); values_col.insert(kv.second); ++items_added; } - auto & offsets = changed_settings_array_col.getOffsets(); - offsets.push_back(changed_settings_tuple_col.size()); + auto & offsets = settings_array_col.getOffsets(); + offsets.push_back(settings_tuple_col.size()); } columns[i++]->insertData(IPv6ToBinary(client_info.current_address.host()).data(), 16); @@ -202,24 +202,24 @@ void SessionLogElement::appendToBlock(MutableColumns & columns) const columns[i++]->insertData(auth_failure_reason.data(), auth_failure_reason.length()); } -void SessionLog::addLoginSuccess(const UUID & session_id, std::optional session_name, const Context & login_context) +void SessionLog::addLoginSuccess(const UUID & auth_id, std::optional session_id, const Context & login_context) { const auto access = login_context.getAccess(); const auto & settings = login_context.getSettingsRef(); const auto & client_info = login_context.getClientInfo(); - DB::SessionLogElement log_entry(session_id, SESSION_LOGIN_SUCCESS); + DB::SessionLogElement log_entry(auth_id, SESSION_LOGIN_SUCCESS); log_entry.client_info = client_info; { const auto user = access->getUser(); log_entry.user = user->getName(); - log_entry.user_identified_with = user->authentication.getType(); - log_entry.external_auth_server = user->authentication.getLDAPServerName(); + log_entry.user_identified_with = user->auth_data.getType(); + log_entry.external_auth_server = user->auth_data.getLDAPServerName(); } - if (session_name) - log_entry.session_name = *session_name; + if (session_id) + log_entry.session_id = *session_id; if (const auto roles_info = access->getRolesInfo()) log_entry.roles = roles_info->getCurrentRolesNames(); @@ -228,30 +228,30 @@ void SessionLog::addLoginSuccess(const UUID & session_id, std::optional log_entry.profiles = profile_info->getProfileNames(); for (const auto & s : settings.allChanged()) - log_entry.changed_settings.emplace_back(s.getName(), s.getValueString()); + log_entry.settings.emplace_back(s.getName(), s.getValueString()); add(log_entry); } void SessionLog::addLoginFailure( - const UUID & session_id, + const UUID & auth_id, const ClientInfo & info, const String & user, const Exception & reason) { - SessionLogElement log_entry(session_id, SESSION_LOGIN_FAILURE); + SessionLogElement log_entry(auth_id, SESSION_LOGIN_FAILURE); log_entry.user = user; log_entry.auth_failure_reason = reason.message(); log_entry.client_info = info; - log_entry.user_identified_with = Authentication::Type::NO_PASSWORD; + log_entry.user_identified_with = AuthenticationType::NO_PASSWORD; add(log_entry); } -void SessionLog::addLogOut(const UUID & session_id, const String & user, const ClientInfo & client_info) +void SessionLog::addLogOut(const UUID & auth_id, const String & user, const ClientInfo & client_info) { - auto log_entry = SessionLogElement(session_id, SESSION_LOGOUT); + auto log_entry = SessionLogElement(auth_id, SESSION_LOGOUT); log_entry.user = user; log_entry.client_info = client_info; diff --git a/src/Interpreters/SessionLog.h b/src/Interpreters/SessionLog.h index fddabf45e4e..93766d685e0 100644 --- a/src/Interpreters/SessionLog.h +++ b/src/Interpreters/SessionLog.h @@ -2,7 +2,7 @@ #include #include -#include +#include namespace DB { @@ -27,26 +27,26 @@ struct SessionLogElement using Type = SessionLogElementType; SessionLogElement() = default; - SessionLogElement(const UUID & session_id_, Type type_); + SessionLogElement(const UUID & auth_id_, Type type_); SessionLogElement(const SessionLogElement &) = default; SessionLogElement & operator=(const SessionLogElement &) = default; SessionLogElement(SessionLogElement &&) = default; SessionLogElement & operator=(SessionLogElement &&) = default; - UUID session_id; + UUID auth_id; Type type = SESSION_LOGIN_FAILURE; - String session_name; + String session_id; time_t event_time{}; Decimal64 event_time_microseconds{}; String user; - Authentication::Type user_identified_with = Authentication::Type::NO_PASSWORD; + AuthenticationType user_identified_with = AuthenticationType::NO_PASSWORD; String external_auth_server; Strings roles; Strings profiles; - std::vector> changed_settings; + std::vector> settings; ClientInfo client_info; String auth_failure_reason; @@ -66,9 +66,9 @@ class SessionLog : public SystemLog using SystemLog::SystemLog; public: - void addLoginSuccess(const UUID & session_id, std::optional session_name, const Context & login_context); - void addLoginFailure(const UUID & session_id, const ClientInfo & info, const String & user, const Exception & reason); - void addLogOut(const UUID & session_id, const String & user, const ClientInfo & client_info); + void addLoginSuccess(const UUID & auth_id, std::optional session_id, const Context & login_context); + void addLoginFailure(const UUID & auth_id, const ClientInfo & info, const String & user, const Exception & reason); + void addLogOut(const UUID & auth_id, const String & user, const ClientInfo & client_info); }; } diff --git a/src/Interpreters/SynonymsExtensions.cpp b/src/Interpreters/SynonymsExtensions.cpp index 6147fa14674..ddc90d04e02 100644 --- a/src/Interpreters/SynonymsExtensions.cpp +++ b/src/Interpreters/SynonymsExtensions.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_NLP @@ -11,7 +9,7 @@ #include #include -#include // Y_IGNORE +#include namespace DB { diff --git a/src/Interpreters/SynonymsExtensions.h b/src/Interpreters/SynonymsExtensions.h index d1f3548ce64..c4a70b28c60 100644 --- a/src/Interpreters/SynonymsExtensions.h +++ b/src/Interpreters/SynonymsExtensions.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_NLP diff --git a/src/Interpreters/TreeOptimizer.cpp b/src/Interpreters/TreeOptimizer.cpp index 8fb72f74c65..e811299b327 100644 --- a/src/Interpreters/TreeOptimizer.cpp +++ b/src/Interpreters/TreeOptimizer.cpp @@ -67,26 +67,17 @@ const std::unordered_set possibly_injective_function_names * Instead, leave `GROUP BY const`. * Next, see deleting the constants in the analyzeAggregation method. */ -void appendUnusedGroupByColumn(ASTSelectQuery * select_query, const NameSet & source_columns) +void appendUnusedGroupByColumn(ASTSelectQuery * select_query) { /// You must insert a constant that is not the name of the column in the table. Such a case is rare, but it happens. - /// Also start unused_column integer from source_columns.size() + 1, because lower numbers ([1, source_columns.size()]) + /// Also start unused_column integer must not intersect with ([1, source_columns.size()]) /// might be in positional GROUP BY. - UInt64 unused_column = source_columns.size() + 1; - String unused_column_name = toString(unused_column); - - while (source_columns.count(unused_column_name)) - { - ++unused_column; - unused_column_name = toString(unused_column); - } - select_query->setExpression(ASTSelectQuery::Expression::GROUP_BY, std::make_shared()); - select_query->groupBy()->children.emplace_back(std::make_shared(UInt64(unused_column))); + select_query->groupBy()->children.emplace_back(std::make_shared(Int64(-1))); } /// Eliminates injective function calls and constant expressions from group by statement. -void optimizeGroupBy(ASTSelectQuery * select_query, const NameSet & source_columns, ContextPtr context) +void optimizeGroupBy(ASTSelectQuery * select_query, ContextPtr context) { const FunctionFactory & function_factory = FunctionFactory::instance(); @@ -191,7 +182,7 @@ void optimizeGroupBy(ASTSelectQuery * select_query, const NameSet & source_colum } if (group_exprs.empty()) - appendUnusedGroupByColumn(select_query, source_columns); + appendUnusedGroupByColumn(select_query); } struct GroupByKeysInfo @@ -710,7 +701,7 @@ void TreeOptimizer::apply(ASTPtr & query, TreeRewriterResult & result, optimizeAggregationFunctions(query); /// GROUP BY injective function elimination. - optimizeGroupBy(select_query, result.source_columns_set, context); + optimizeGroupBy(select_query, context); /// GROUP BY functions of other keys elimination. if (settings.optimize_group_by_function_keys) diff --git a/src/Interpreters/TreeRewriter.cpp b/src/Interpreters/TreeRewriter.cpp index 9bcddb6b982..e0968b7fce4 100644 --- a/src/Interpreters/TreeRewriter.cpp +++ b/src/Interpreters/TreeRewriter.cpp @@ -1100,7 +1100,8 @@ TreeRewriterResultPtr TreeRewriter::analyze( ConstStoragePtr storage, const StorageMetadataPtr & metadata_snapshot, bool allow_aggregations, - bool allow_self_aliases) const + bool allow_self_aliases, + bool execute_scalar_subqueries) const { if (query->as()) throw Exception("Not select analyze for select asts.", ErrorCodes::LOGICAL_ERROR); @@ -1112,7 +1113,7 @@ TreeRewriterResultPtr TreeRewriter::analyze( normalize(query, result.aliases, result.source_columns_set, false, settings, allow_self_aliases); /// Executing scalar subqueries. Column defaults could be a scalar subquery. - executeScalarSubqueries(query, getContext(), 0, result.scalars, false); + executeScalarSubqueries(query, getContext(), 0, result.scalars, !execute_scalar_subqueries); if (settings.legacy_column_name_of_tuple_literal) markTupleLiteralsAsLegacy(query); diff --git a/src/Interpreters/TreeRewriter.h b/src/Interpreters/TreeRewriter.h index 98201f35216..52c62cc4cec 100644 --- a/src/Interpreters/TreeRewriter.h +++ b/src/Interpreters/TreeRewriter.h @@ -110,7 +110,8 @@ public: ConstStoragePtr storage = {}, const StorageMetadataPtr & metadata_snapshot = {}, bool allow_aggregations = false, - bool allow_self_aliases = true) const; + bool allow_self_aliases = true, + bool execute_scalar_subqueries = true) const; /// Analyze and rewrite select query TreeRewriterResultPtr analyzeSelect( diff --git a/src/Interpreters/UserDefinedExecutableFunctionFactory.cpp b/src/Interpreters/UserDefinedExecutableFunctionFactory.cpp index cfa1171a84b..4cb3e034b01 100644 --- a/src/Interpreters/UserDefinedExecutableFunctionFactory.cpp +++ b/src/Interpreters/UserDefinedExecutableFunctionFactory.cpp @@ -206,6 +206,15 @@ FunctionOverloadResolverPtr UserDefinedExecutableFunctionFactory::tryGet(const S return nullptr; } +bool UserDefinedExecutableFunctionFactory::has(const String & function_name, ContextPtr context) +{ + const auto & loader = context->getExternalUserDefinedExecutableFunctionsLoader(); + auto load_result = loader.getLoadResult(function_name); + + bool result = load_result.object != nullptr; + return result; +} + std::vector UserDefinedExecutableFunctionFactory::getRegisteredNames(ContextPtr context) { const auto & loader = context->getExternalUserDefinedExecutableFunctionsLoader(); diff --git a/src/Interpreters/UserDefinedExecutableFunctionFactory.h b/src/Interpreters/UserDefinedExecutableFunctionFactory.h index 0afeeecbca7..989db4c481b 100644 --- a/src/Interpreters/UserDefinedExecutableFunctionFactory.h +++ b/src/Interpreters/UserDefinedExecutableFunctionFactory.h @@ -24,6 +24,8 @@ public: static FunctionOverloadResolverPtr tryGet(const String & function_name, ContextPtr context); + static bool has(const String & function_name, ContextPtr context); + static std::vector getRegisteredNames(ContextPtr context); }; diff --git a/src/Interpreters/UserDefinedSQLFunctionFactory.cpp b/src/Interpreters/UserDefinedSQLFunctionFactory.cpp index f036741ca21..afe51de99a4 100644 --- a/src/Interpreters/UserDefinedSQLFunctionFactory.cpp +++ b/src/Interpreters/UserDefinedSQLFunctionFactory.cpp @@ -1,7 +1,13 @@ #include "UserDefinedSQLFunctionFactory.h" +#include + #include #include +#include +#include +#include + namespace DB { @@ -10,7 +16,7 @@ namespace ErrorCodes { extern const int FUNCTION_ALREADY_EXISTS; extern const int UNKNOWN_FUNCTION; - extern const int CANNOT_DROP_SYSTEM_FUNCTION; + extern const int CANNOT_DROP_FUNCTION; } UserDefinedSQLFunctionFactory & UserDefinedSQLFunctionFactory::instance() @@ -19,13 +25,31 @@ UserDefinedSQLFunctionFactory & UserDefinedSQLFunctionFactory::instance() return result; } -void UserDefinedSQLFunctionFactory::registerFunction(const String & function_name, ASTPtr create_function_query, bool replace) +void UserDefinedSQLFunctionFactory::registerFunction(ContextPtr context, const String & function_name, ASTPtr create_function_query, bool replace, bool if_not_exists, bool persist) { if (FunctionFactory::instance().hasNameOrAlias(function_name)) + { + if (if_not_exists) + return; + throw Exception(ErrorCodes::FUNCTION_ALREADY_EXISTS, "The function '{}' already exists", function_name); + } if (AggregateFunctionFactory::instance().hasNameOrAlias(function_name)) + { + if (if_not_exists) + return; + throw Exception(ErrorCodes::FUNCTION_ALREADY_EXISTS, "The aggregate function '{}' already exists", function_name); + } + + if (UserDefinedExecutableFunctionFactory::instance().has(function_name, context)) + { + if (if_not_exists) + return; + + throw Exception(ErrorCodes::CANNOT_DROP_FUNCTION, "User defined executable function '{}'", function_name); + } std::lock_guard lock(mutex); @@ -33,28 +57,63 @@ void UserDefinedSQLFunctionFactory::registerFunction(const String & function_nam if (!inserted) { + if (if_not_exists) + return; + if (replace) - it->second = std::move(create_function_query); + it->second = create_function_query; else throw Exception(ErrorCodes::FUNCTION_ALREADY_EXISTS, "The function name '{}' is not unique", function_name); } + + if (persist) + { + try + { + UserDefinedSQLObjectsLoader::instance().storeObject(context, UserDefinedSQLObjectType::Function, function_name, *create_function_query, replace); + } + catch (Exception & exception) + { + function_name_to_create_query.erase(it); + exception.addMessage(fmt::format("while storing user defined function {} on disk", backQuote(function_name))); + throw; + } + } } -void UserDefinedSQLFunctionFactory::unregisterFunction(const String & function_name) +void UserDefinedSQLFunctionFactory::unregisterFunction(ContextPtr context, const String & function_name, bool if_exists) { if (FunctionFactory::instance().hasNameOrAlias(function_name) || AggregateFunctionFactory::instance().hasNameOrAlias(function_name)) - throw Exception(ErrorCodes::CANNOT_DROP_SYSTEM_FUNCTION, "Cannot drop system function '{}'", function_name); + throw Exception(ErrorCodes::CANNOT_DROP_FUNCTION, "Cannot drop system function '{}'", function_name); + + if (UserDefinedExecutableFunctionFactory::instance().has(function_name, context)) + throw Exception(ErrorCodes::CANNOT_DROP_FUNCTION, "Cannot drop user defined executable function '{}'", function_name); std::lock_guard lock(mutex); auto it = function_name_to_create_query.find(function_name); if (it == function_name_to_create_query.end()) + { + if (if_exists) + return; + throw Exception(ErrorCodes::UNKNOWN_FUNCTION, "The function name '{}' is not registered", function_name); + } + + try + { + UserDefinedSQLObjectsLoader::instance().removeObject(context, UserDefinedSQLObjectType::Function, function_name); + } + catch (Exception & exception) + { + exception.addMessage(fmt::format("while removing user defined function {} from disk", backQuote(function_name))); + throw; + } function_name_to_create_query.erase(it); } diff --git a/src/Interpreters/UserDefinedSQLFunctionFactory.h b/src/Interpreters/UserDefinedSQLFunctionFactory.h index 6487b951705..63bf5d73c15 100644 --- a/src/Interpreters/UserDefinedSQLFunctionFactory.h +++ b/src/Interpreters/UserDefinedSQLFunctionFactory.h @@ -6,6 +6,8 @@ #include #include +#include + namespace DB { @@ -17,13 +19,17 @@ public: static UserDefinedSQLFunctionFactory & instance(); /** Register function for function_name in factory for specified create_function_query. - * If replace = true and function with function_name already exists replace it with create_function_query. - * Otherwise throws exception. + * If function exists and if_not_exists = false and replace = false throws exception. + * If replace = true and sql user defined function with function_name already exists replace it with create_function_query. + * If persist = true persist function on disk. */ - void registerFunction(const String & function_name, ASTPtr create_function_query, bool replace); + void registerFunction(ContextPtr context, const String & function_name, ASTPtr create_function_query, bool replace, bool if_not_exists, bool persist); - /// Unregister function for function_name - void unregisterFunction(const String & function_name); + /** Unregister function for function_name. + * If if_exists = true then do not throw exception if function is not registered. + * If if_exists = false then throw exception if function is not registered. + */ + void unregisterFunction(ContextPtr context, const String & function_name, bool if_exists); /// Get function create query for function_name. If no function registered with function_name throws exception. ASTPtr get(const String & function_name) const; diff --git a/src/Interpreters/UserDefinedSQLFunctionVisitor.cpp b/src/Interpreters/UserDefinedSQLFunctionVisitor.cpp index 8df6932b153..d9ac53097ab 100644 --- a/src/Interpreters/UserDefinedSQLFunctionVisitor.cpp +++ b/src/Interpreters/UserDefinedSQLFunctionVisitor.cpp @@ -18,7 +18,7 @@ namespace ErrorCodes extern const int UNSUPPORTED_METHOD; } -void UserDefinedSQLFunctionMatcher::visit(ASTPtr & ast, Data &) +void UserDefinedSQLFunctionMatcher::visit(ASTPtr & ast, Data & data) { auto * function = ast->as(); if (!function) @@ -27,7 +27,10 @@ void UserDefinedSQLFunctionMatcher::visit(ASTPtr & ast, Data &) auto result = tryToReplaceFunction(*function); if (result) + { ast = result; + visit(ast, data); + } } bool UserDefinedSQLFunctionMatcher::needChildVisit(const ASTPtr &, const ASTPtr &) diff --git a/src/Interpreters/examples/jit_example.cpp b/src/Interpreters/examples/jit_example.cpp index 3fa2a901eac..d4613b7fad7 100644 --- a/src/Interpreters/examples/jit_example.cpp +++ b/src/Interpreters/examples/jit_example.cpp @@ -1,8 +1,6 @@ #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_EMBEDDED_COMPILER diff --git a/src/Interpreters/executeDDLQueryOnCluster.cpp b/src/Interpreters/executeDDLQueryOnCluster.cpp index c3b8cc5c677..46ec6f776ee 100644 --- a/src/Interpreters/executeDDLQueryOnCluster.cpp +++ b/src/Interpreters/executeDDLQueryOnCluster.cpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/Interpreters/executeQuery.cpp b/src/Interpreters/executeQuery.cpp index 95fb8d38454..f401f708ab1 100644 --- a/src/Interpreters/executeQuery.cpp +++ b/src/Interpreters/executeQuery.cpp @@ -393,10 +393,8 @@ static std::tuple executeQueryImpl( client_info.initial_query_start_time_microseconds = time_in_microseconds(current_time); } -#if !defined(ARCADIA_BUILD) assert(internal || CurrentThread::get().getQueryContext()); assert(internal || CurrentThread::get().getQueryContext()->getCurrentQueryId() == CurrentThread::getQueryId()); -#endif const Settings & settings = context->getSettingsRef(); diff --git a/src/Interpreters/fuzzers/CMakeLists.txt b/src/Interpreters/fuzzers/CMakeLists.txt index dfe892b5249..f8d4cf224db 100644 --- a/src/Interpreters/fuzzers/CMakeLists.txt +++ b/src/Interpreters/fuzzers/CMakeLists.txt @@ -7,4 +7,3 @@ target_link_libraries(execute_query_fuzzer PRIVATE clickhouse_dictionaries clickhouse_dictionaries_embedded ${LIB_FUZZING_ENGINE}) - diff --git a/src/Parsers/ASTAlterQuery.cpp b/src/Parsers/ASTAlterQuery.cpp index 53d53bf5ae1..50c56c9aeff 100644 --- a/src/Parsers/ASTAlterQuery.cpp +++ b/src/Parsers/ASTAlterQuery.cpp @@ -157,6 +157,10 @@ void ASTAlterCommand::formatImpl(const FormatSettings & settings, FormatState & settings.ostr << (settings.hilite ? hilite_keyword : "") << "MODIFY SAMPLE BY " << (settings.hilite ? hilite_none : ""); sample_by->formatImpl(settings, state, frame); } + else if (type == ASTAlterCommand::REMOVE_SAMPLE_BY) + { + settings.ostr << (settings.hilite ? hilite_keyword : "") << "REMOVE SAMPLE BY" << (settings.hilite ? hilite_none : ""); + } else if (type == ASTAlterCommand::ADD_INDEX) { settings.ostr << (settings.hilite ? hilite_keyword : "") << "ADD INDEX " << (if_not_exists ? "IF NOT EXISTS " : "") @@ -462,6 +466,22 @@ bool ASTAlterQuery::isFreezeAlter() const || isOneCommandTypeOnly(ASTAlterCommand::UNFREEZE_PARTITION) || isOneCommandTypeOnly(ASTAlterCommand::UNFREEZE_ALL); } +bool ASTAlterQuery::isAttachAlter() const +{ + return isOneCommandTypeOnly(ASTAlterCommand::ATTACH_PARTITION); +} + +bool ASTAlterQuery::isFetchAlter() const +{ + return isOneCommandTypeOnly(ASTAlterCommand::FETCH_PARTITION); +} + +bool ASTAlterQuery::isDropPartitionAlter() const +{ + return isOneCommandTypeOnly(ASTAlterCommand::DROP_PARTITION) || isOneCommandTypeOnly(ASTAlterCommand::DROP_DETACHED_PARTITION); +} + + /** Get the text that identifies this element. */ String ASTAlterQuery::getID(char delim) const { diff --git a/src/Parsers/ASTAlterQuery.h b/src/Parsers/ASTAlterQuery.h index 9b40586e09f..b0980c20f5e 100644 --- a/src/Parsers/ASTAlterQuery.h +++ b/src/Parsers/ASTAlterQuery.h @@ -41,6 +41,7 @@ public: RESET_SETTING, MODIFY_QUERY, REMOVE_TTL, + REMOVE_SAMPLE_BY, ADD_INDEX, DROP_INDEX, @@ -230,6 +231,12 @@ public: bool isFreezeAlter() const; + bool isAttachAlter() const; + + bool isFetchAlter() const; + + bool isDropPartitionAlter() const; + String getID(char) const override; ASTPtr clone() const override; diff --git a/src/Parsers/ASTCreateFunctionQuery.cpp b/src/Parsers/ASTCreateFunctionQuery.cpp index 4e1e7de660d..9209b1f1869 100644 --- a/src/Parsers/ASTCreateFunctionQuery.cpp +++ b/src/Parsers/ASTCreateFunctionQuery.cpp @@ -1,6 +1,9 @@ #include #include #include +#include +#include + namespace DB { @@ -25,6 +28,9 @@ void ASTCreateFunctionQuery::formatImpl(const IAST::FormatSettings & settings, I settings.ostr << (settings.hilite ? hilite_none : ""); settings.ostr << (settings.hilite ? hilite_identifier : "") << backQuoteIfNeed(function_name) << (settings.hilite ? hilite_none : ""); + + formatOnCluster(settings); + settings.ostr << (settings.hilite ? hilite_keyword : "") << " AS " << (settings.hilite ? hilite_none : ""); function_core->formatImpl(settings, state, frame); } diff --git a/src/Parsers/ASTCreateFunctionQuery.h b/src/Parsers/ASTCreateFunctionQuery.h index a58fe64c435..fccc1837135 100644 --- a/src/Parsers/ASTCreateFunctionQuery.h +++ b/src/Parsers/ASTCreateFunctionQuery.h @@ -1,12 +1,13 @@ #pragma once -#include -#include +#include +#include + namespace DB { -class ASTCreateFunctionQuery : public IAST +class ASTCreateFunctionQuery : public IAST, public ASTQueryWithOnCluster { public: String function_name; @@ -20,6 +21,8 @@ public: ASTPtr clone() const override; void formatImpl(const FormatSettings & s, FormatState & state, FormatStateStacked frame) const override; + + ASTPtr getRewrittenASTWithoutOnCluster(const std::string &) const override { return removeOnCluster(clone()); } }; } diff --git a/src/Parsers/ASTDropFunctionQuery.cpp b/src/Parsers/ASTDropFunctionQuery.cpp index 47665aa52f9..3409d699042 100644 --- a/src/Parsers/ASTDropFunctionQuery.cpp +++ b/src/Parsers/ASTDropFunctionQuery.cpp @@ -19,6 +19,7 @@ void ASTDropFunctionQuery::formatImpl(const IAST::FormatSettings & settings, IAS settings.ostr << (settings.hilite ? hilite_none : ""); settings.ostr << (settings.hilite ? hilite_identifier : "") << backQuoteIfNeed(function_name) << (settings.hilite ? hilite_none : ""); + formatOnCluster(settings); } } diff --git a/src/Parsers/ASTDropFunctionQuery.h b/src/Parsers/ASTDropFunctionQuery.h index a9d70a3016f..c9f673578a9 100644 --- a/src/Parsers/ASTDropFunctionQuery.h +++ b/src/Parsers/ASTDropFunctionQuery.h @@ -1,11 +1,13 @@ #pragma once -#include "IAST.h" +#include +#include + namespace DB { -class ASTDropFunctionQuery : public IAST +class ASTDropFunctionQuery : public IAST, public ASTQueryWithOnCluster { public: String function_name; @@ -17,6 +19,8 @@ public: ASTPtr clone() const override; void formatImpl(const FormatSettings & s, FormatState & state, FormatStateStacked frame) const override; + + ASTPtr getRewrittenASTWithoutOnCluster(const std::string &) const override { return removeOnCluster(clone()); } }; } diff --git a/src/Parsers/ASTFunction.cpp b/src/Parsers/ASTFunction.cpp index 3c78c4060d6..ef1ede28e33 100644 --- a/src/Parsers/ASTFunction.cpp +++ b/src/Parsers/ASTFunction.cpp @@ -1,3 +1,5 @@ +#include + #include #include @@ -16,6 +18,8 @@ #include #include +using namespace std::literals; + namespace DB { @@ -294,8 +298,12 @@ void ASTFunction::formatImplWithoutAlias(const FormatSettings & settings, Format continue; } + if (frame.need_parens) + settings.ostr << '('; arguments->formatImpl(settings, state, nested_need_parens); settings.ostr << (settings.hilite ? hilite_operator : "") << func[1] << (settings.hilite ? hilite_none : ""); + if (frame.need_parens) + settings.ostr << ')'; written = true; @@ -335,7 +343,7 @@ void ASTFunction::formatImplWithoutAlias(const FormatSettings & settings, Format for (const char ** func = operators; *func; func += 2) { - if (0 == strcmp(name.c_str(), func[0])) + if (name == std::string_view(func[0])) { if (frame.need_parens) settings.ostr << '('; @@ -372,7 +380,7 @@ void ASTFunction::formatImplWithoutAlias(const FormatSettings & settings, Format } } - if (!written && 0 == strcmp(name.c_str(), "arrayElement")) + if (!written && name == "arrayElement"sv) { if (frame.need_parens) settings.ostr << '('; @@ -387,7 +395,7 @@ void ASTFunction::formatImplWithoutAlias(const FormatSettings & settings, Format settings.ostr << ')'; } - if (!written && 0 == strcmp(name.c_str(), "tupleElement")) + if (!written && name == "tupleElement"sv) { // fuzzer sometimes may insert tupleElement() created from ASTLiteral: // @@ -438,8 +446,9 @@ void ASTFunction::formatImplWithoutAlias(const FormatSettings & settings, Format } } - if (!written && 0 == strcmp(name.c_str(), "lambda")) + if (!written && name == "lambda"sv) { + /// Special case: zero elements tuple in lhs of lambda is printed as (). /// Special case: one-element tuple in lhs of lambda is printed as its element. if (frame.need_parens) @@ -449,9 +458,12 @@ void ASTFunction::formatImplWithoutAlias(const FormatSettings & settings, Format if (first_arg_func && first_arg_func->name == "tuple" && first_arg_func->arguments - && first_arg_func->arguments->children.size() == 1) + && (first_arg_func->arguments->children.size() == 1 || first_arg_func->arguments->children.empty())) { - first_arg_func->arguments->children[0]->formatImpl(settings, state, nested_need_parens); + if (first_arg_func->arguments->children.size() == 1) + first_arg_func->arguments->children[0]->formatImpl(settings, state, nested_need_parens); + else + settings.ostr << "()"; } else arguments->children[0]->formatImpl(settings, state, nested_need_parens); @@ -475,7 +487,7 @@ void ASTFunction::formatImplWithoutAlias(const FormatSettings & settings, Format for (const char ** func = operators; *func; func += 2) { - if (0 == strcmp(name.c_str(), func[0])) + if (name == std::string_view(func[0])) { if (frame.need_parens) settings.ostr << '('; @@ -492,7 +504,7 @@ void ASTFunction::formatImplWithoutAlias(const FormatSettings & settings, Format } } - if (!written && 0 == strcmp(name.c_str(), "array")) + if (!written && name == "array"sv) { settings.ostr << (settings.hilite ? hilite_operator : "") << '[' << (settings.hilite ? hilite_none : ""); for (size_t i = 0; i < arguments->children.size(); ++i) @@ -505,7 +517,7 @@ void ASTFunction::formatImplWithoutAlias(const FormatSettings & settings, Format written = true; } - if (!written && arguments->children.size() >= 2 && 0 == strcmp(name.c_str(), "tuple")) + if (!written && arguments->children.size() >= 2 && name == "tuple"sv) { settings.ostr << (settings.hilite ? hilite_operator : "") << '(' << (settings.hilite ? hilite_none : ""); for (size_t i = 0; i < arguments->children.size(); ++i) @@ -518,7 +530,7 @@ void ASTFunction::formatImplWithoutAlias(const FormatSettings & settings, Format written = true; } - if (!written && 0 == strcmp(name.c_str(), "map")) + if (!written && name == "map"sv) { settings.ostr << (settings.hilite ? hilite_operator : "") << "map(" << (settings.hilite ? hilite_none : ""); for (size_t i = 0; i < arguments->children.size(); ++i) diff --git a/src/Parsers/ASTFunctionHelpers.h b/src/Parsers/ASTHelpers.h similarity index 73% rename from src/Parsers/ASTFunctionHelpers.h rename to src/Parsers/ASTHelpers.h index 76da2dd1501..086b361bf85 100644 --- a/src/Parsers/ASTFunctionHelpers.h +++ b/src/Parsers/ASTHelpers.h @@ -6,11 +6,12 @@ namespace DB { -static bool isFunctionCast(const ASTFunction * function) +static inline bool isFunctionCast(const ASTFunction * function) { if (function) return function->name == "CAST" || function->name == "_CAST"; return false; } + } diff --git a/src/Parsers/ASTKillQueryQuery.cpp b/src/Parsers/ASTKillQueryQuery.cpp index 72bdd7d6b0b..71c3011dd2c 100644 --- a/src/Parsers/ASTKillQueryQuery.cpp +++ b/src/Parsers/ASTKillQueryQuery.cpp @@ -11,8 +11,20 @@ String ASTKillQueryQuery::getID(char delim) const void ASTKillQueryQuery::formatQueryImpl(const FormatSettings & settings, FormatState & state, FormatStateStacked frame) const { - settings.ostr << (settings.hilite ? hilite_keyword : "") << "KILL " - << (type == Type::Query ? "QUERY" : "MUTATION"); + settings.ostr << (settings.hilite ? hilite_keyword : "") << "KILL "; + + switch (type) + { + case Type::Query: + settings.ostr << "QUERY"; + break; + case Type::Mutation: + settings.ostr << "MUTATION"; + break; + case Type::PartMoveToShard: + settings.ostr << "PART_MOVE_TO_SHARD"; + break; + } formatOnCluster(settings); diff --git a/src/Parsers/ASTKillQueryQuery.h b/src/Parsers/ASTKillQueryQuery.h index c1b3956962f..6ff12bcba93 100644 --- a/src/Parsers/ASTKillQueryQuery.h +++ b/src/Parsers/ASTKillQueryQuery.h @@ -13,6 +13,7 @@ public: { Query, /// KILL QUERY Mutation, /// KILL MUTATION + PartMoveToShard, /// KILL PART_MOVE_TO_SHARD }; Type type = Type::Query; diff --git a/src/Parsers/ASTSystemQuery.h b/src/Parsers/ASTSystemQuery.h index 9e0c46af730..419c22dd0d5 100644 --- a/src/Parsers/ASTSystemQuery.h +++ b/src/Parsers/ASTSystemQuery.h @@ -3,9 +3,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" namespace DB diff --git a/src/Parsers/ASTCreateQuotaQuery.cpp b/src/Parsers/Access/ASTCreateQuotaQuery.cpp similarity index 98% rename from src/Parsers/ASTCreateQuotaQuery.cpp rename to src/Parsers/Access/ASTCreateQuotaQuery.cpp index 135b25c5bdb..4e4c84f9e93 100644 --- a/src/Parsers/ASTCreateQuotaQuery.cpp +++ b/src/Parsers/Access/ASTCreateQuotaQuery.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include #include diff --git a/src/Parsers/ASTCreateQuotaQuery.h b/src/Parsers/Access/ASTCreateQuotaQuery.h similarity index 100% rename from src/Parsers/ASTCreateQuotaQuery.h rename to src/Parsers/Access/ASTCreateQuotaQuery.h diff --git a/src/Parsers/ASTCreateRoleQuery.cpp b/src/Parsers/Access/ASTCreateRoleQuery.cpp similarity index 95% rename from src/Parsers/ASTCreateRoleQuery.cpp rename to src/Parsers/Access/ASTCreateRoleQuery.cpp index 73b523a5bfe..29e78d710cf 100644 --- a/src/Parsers/ASTCreateRoleQuery.cpp +++ b/src/Parsers/Access/ASTCreateRoleQuery.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include diff --git a/src/Parsers/ASTCreateRoleQuery.h b/src/Parsers/Access/ASTCreateRoleQuery.h similarity index 100% rename from src/Parsers/ASTCreateRoleQuery.h rename to src/Parsers/Access/ASTCreateRoleQuery.h diff --git a/src/Parsers/ASTCreateRowPolicyQuery.cpp b/src/Parsers/Access/ASTCreateRowPolicyQuery.cpp similarity index 97% rename from src/Parsers/ASTCreateRowPolicyQuery.cpp rename to src/Parsers/Access/ASTCreateRowPolicyQuery.cpp index 6aac008e0be..0267379d6e5 100644 --- a/src/Parsers/ASTCreateRowPolicyQuery.cpp +++ b/src/Parsers/Access/ASTCreateRowPolicyQuery.cpp @@ -1,11 +1,11 @@ -#include -#include -#include +#include +#include +#include #include #include +#include #include #include -#include namespace DB diff --git a/src/Parsers/ASTCreateRowPolicyQuery.h b/src/Parsers/Access/ASTCreateRowPolicyQuery.h similarity index 100% rename from src/Parsers/ASTCreateRowPolicyQuery.h rename to src/Parsers/Access/ASTCreateRowPolicyQuery.h diff --git a/src/Parsers/ASTCreateSettingsProfileQuery.cpp b/src/Parsers/Access/ASTCreateSettingsProfileQuery.cpp similarity index 94% rename from src/Parsers/ASTCreateSettingsProfileQuery.cpp rename to src/Parsers/Access/ASTCreateSettingsProfileQuery.cpp index e99c40ca681..d9385e6be7b 100644 --- a/src/Parsers/ASTCreateSettingsProfileQuery.cpp +++ b/src/Parsers/Access/ASTCreateSettingsProfileQuery.cpp @@ -1,6 +1,6 @@ -#include -#include -#include +#include +#include +#include #include #include diff --git a/src/Parsers/ASTCreateSettingsProfileQuery.h b/src/Parsers/Access/ASTCreateSettingsProfileQuery.h similarity index 100% rename from src/Parsers/ASTCreateSettingsProfileQuery.h rename to src/Parsers/Access/ASTCreateSettingsProfileQuery.h diff --git a/src/Parsers/ASTCreateUserQuery.cpp b/src/Parsers/Access/ASTCreateUserQuery.cpp similarity index 83% rename from src/Parsers/ASTCreateUserQuery.cpp rename to src/Parsers/Access/ASTCreateUserQuery.cpp index 594d21f2a4b..116deef43d9 100644 --- a/src/Parsers/ASTCreateUserQuery.cpp +++ b/src/Parsers/Access/ASTCreateUserQuery.cpp @@ -1,7 +1,7 @@ -#include -#include -#include -#include +#include +#include +#include +#include #include #include @@ -23,67 +23,67 @@ namespace } - void formatAuthentication(const Authentication & authentication, bool show_password, const IAST::FormatSettings & settings) + void formatAuthenticationData(const AuthenticationData & auth_data, bool show_password, const IAST::FormatSettings & settings) { - auto authentication_type = authentication.getType(); - if (authentication_type == Authentication::NO_PASSWORD) + auto auth_type = auth_data.getType(); + if (auth_type == AuthenticationType::NO_PASSWORD) { settings.ostr << (settings.hilite ? IAST::hilite_keyword : "") << " NOT IDENTIFIED" << (settings.hilite ? IAST::hilite_none : ""); return; } - String authentication_type_name = Authentication::TypeInfo::get(authentication_type).name; + String auth_type_name = AuthenticationTypeInfo::get(auth_type).name; String by_keyword = "BY"; std::optional by_value; if ( show_password || - authentication_type == Authentication::LDAP || - authentication_type == Authentication::KERBEROS + auth_type == AuthenticationType::LDAP || + auth_type == AuthenticationType::KERBEROS ) { - switch (authentication_type) + switch (auth_type) { - case Authentication::PLAINTEXT_PASSWORD: + case AuthenticationType::PLAINTEXT_PASSWORD: { - by_value = authentication.getPassword(); + by_value = auth_data.getPassword(); break; } - case Authentication::SHA256_PASSWORD: + case AuthenticationType::SHA256_PASSWORD: { - authentication_type_name = "sha256_hash"; - by_value = authentication.getPasswordHashHex(); + auth_type_name = "sha256_hash"; + by_value = auth_data.getPasswordHashHex(); break; } - case Authentication::DOUBLE_SHA1_PASSWORD: + case AuthenticationType::DOUBLE_SHA1_PASSWORD: { - authentication_type_name = "double_sha1_hash"; - by_value = authentication.getPasswordHashHex(); + auth_type_name = "double_sha1_hash"; + by_value = auth_data.getPasswordHashHex(); break; } - case Authentication::LDAP: + case AuthenticationType::LDAP: { by_keyword = "SERVER"; - by_value = authentication.getLDAPServerName(); + by_value = auth_data.getLDAPServerName(); break; } - case Authentication::KERBEROS: + case AuthenticationType::KERBEROS: { by_keyword = "REALM"; - const auto & realm = authentication.getKerberosRealm(); + const auto & realm = auth_data.getKerberosRealm(); if (!realm.empty()) by_value = realm; break; } - case Authentication::NO_PASSWORD: [[fallthrough]]; - case Authentication::MAX_TYPE: - throw Exception("AST: Unexpected authentication type " + toString(authentication_type), ErrorCodes::LOGICAL_ERROR); + case AuthenticationType::NO_PASSWORD: [[fallthrough]]; + case AuthenticationType::MAX_TYPE: + throw Exception("AST: Unexpected authentication type " + toString(auth_type), ErrorCodes::LOGICAL_ERROR); } } - settings.ostr << (settings.hilite ? IAST::hilite_keyword : "") << " IDENTIFIED WITH " << authentication_type_name + settings.ostr << (settings.hilite ? IAST::hilite_keyword : "") << " IDENTIFIED WITH " << auth_type_name << (settings.hilite ? IAST::hilite_none : ""); if (by_value) @@ -258,8 +258,8 @@ void ASTCreateUserQuery::formatImpl(const FormatSettings & format, FormatState & if (!new_name.empty()) formatRenameTo(new_name, format); - if (authentication) - formatAuthentication(*authentication, show_password, format); + if (auth_data) + formatAuthenticationData(*auth_data, show_password, format); if (hosts) formatHosts(nullptr, *hosts, format); diff --git a/src/Parsers/ASTCreateUserQuery.h b/src/Parsers/Access/ASTCreateUserQuery.h similarity index 95% rename from src/Parsers/ASTCreateUserQuery.h rename to src/Parsers/Access/ASTCreateUserQuery.h index 9e80abcb6dd..92db71e8581 100644 --- a/src/Parsers/ASTCreateUserQuery.h +++ b/src/Parsers/Access/ASTCreateUserQuery.h @@ -3,8 +3,8 @@ #include #include #include -#include -#include +#include +#include namespace DB @@ -44,7 +44,7 @@ public: std::shared_ptr names; String new_name; - std::optional authentication; + std::optional auth_data; bool show_password = true; /// formatImpl() will show the password or hash. std::optional hosts; diff --git a/src/Parsers/ASTDropAccessEntityQuery.cpp b/src/Parsers/Access/ASTDropAccessEntityQuery.cpp similarity index 93% rename from src/Parsers/ASTDropAccessEntityQuery.cpp rename to src/Parsers/Access/ASTDropAccessEntityQuery.cpp index 6c19c9f8af3..19064ad9109 100644 --- a/src/Parsers/ASTDropAccessEntityQuery.cpp +++ b/src/Parsers/Access/ASTDropAccessEntityQuery.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include diff --git a/src/Parsers/ASTDropAccessEntityQuery.h b/src/Parsers/Access/ASTDropAccessEntityQuery.h similarity index 100% rename from src/Parsers/ASTDropAccessEntityQuery.h rename to src/Parsers/Access/ASTDropAccessEntityQuery.h diff --git a/src/Parsers/ASTGrantQuery.cpp b/src/Parsers/Access/ASTGrantQuery.cpp similarity index 98% rename from src/Parsers/ASTGrantQuery.cpp rename to src/Parsers/Access/ASTGrantQuery.cpp index e2ac7658c0f..99dc119087c 100644 --- a/src/Parsers/ASTGrantQuery.cpp +++ b/src/Parsers/Access/ASTGrantQuery.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include diff --git a/src/Parsers/ASTGrantQuery.h b/src/Parsers/Access/ASTGrantQuery.h similarity index 97% rename from src/Parsers/ASTGrantQuery.h rename to src/Parsers/Access/ASTGrantQuery.h index b0fb64cb33e..f8ea9b478fe 100644 --- a/src/Parsers/ASTGrantQuery.h +++ b/src/Parsers/Access/ASTGrantQuery.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include diff --git a/src/Parsers/ASTRolesOrUsersSet.cpp b/src/Parsers/Access/ASTRolesOrUsersSet.cpp similarity index 98% rename from src/Parsers/ASTRolesOrUsersSet.cpp rename to src/Parsers/Access/ASTRolesOrUsersSet.cpp index fc5385e4a58..dc7626b90d6 100644 --- a/src/Parsers/ASTRolesOrUsersSet.cpp +++ b/src/Parsers/Access/ASTRolesOrUsersSet.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/src/Parsers/ASTRolesOrUsersSet.h b/src/Parsers/Access/ASTRolesOrUsersSet.h similarity index 100% rename from src/Parsers/ASTRolesOrUsersSet.h rename to src/Parsers/Access/ASTRolesOrUsersSet.h diff --git a/src/Parsers/ASTRowPolicyName.cpp b/src/Parsers/Access/ASTRowPolicyName.cpp similarity index 98% rename from src/Parsers/ASTRowPolicyName.cpp rename to src/Parsers/Access/ASTRowPolicyName.cpp index 0b69c1a46b3..c8b8107af20 100644 --- a/src/Parsers/ASTRowPolicyName.cpp +++ b/src/Parsers/Access/ASTRowPolicyName.cpp @@ -1,4 +1,4 @@ -#include +#include #include diff --git a/src/Parsers/ASTRowPolicyName.h b/src/Parsers/Access/ASTRowPolicyName.h similarity index 100% rename from src/Parsers/ASTRowPolicyName.h rename to src/Parsers/Access/ASTRowPolicyName.h diff --git a/src/Parsers/ASTSetRoleQuery.cpp b/src/Parsers/Access/ASTSetRoleQuery.cpp similarity index 91% rename from src/Parsers/ASTSetRoleQuery.cpp rename to src/Parsers/Access/ASTSetRoleQuery.cpp index e59e103b774..c886da1c8b5 100644 --- a/src/Parsers/ASTSetRoleQuery.cpp +++ b/src/Parsers/Access/ASTSetRoleQuery.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include diff --git a/src/Parsers/ASTSetRoleQuery.h b/src/Parsers/Access/ASTSetRoleQuery.h similarity index 100% rename from src/Parsers/ASTSetRoleQuery.h rename to src/Parsers/Access/ASTSetRoleQuery.h diff --git a/src/Parsers/ASTSettingsProfileElement.cpp b/src/Parsers/Access/ASTSettingsProfileElement.cpp similarity index 98% rename from src/Parsers/ASTSettingsProfileElement.cpp rename to src/Parsers/Access/ASTSettingsProfileElement.cpp index 8f35c154a79..23dba8a926f 100644 --- a/src/Parsers/ASTSettingsProfileElement.cpp +++ b/src/Parsers/Access/ASTSettingsProfileElement.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include diff --git a/src/Parsers/ASTSettingsProfileElement.h b/src/Parsers/Access/ASTSettingsProfileElement.h similarity index 100% rename from src/Parsers/ASTSettingsProfileElement.h rename to src/Parsers/Access/ASTSettingsProfileElement.h diff --git a/src/Parsers/ASTShowAccessEntitiesQuery.cpp b/src/Parsers/Access/ASTShowAccessEntitiesQuery.cpp similarity index 96% rename from src/Parsers/ASTShowAccessEntitiesQuery.cpp rename to src/Parsers/Access/ASTShowAccessEntitiesQuery.cpp index 6dd53fd5cde..e2dfe031f53 100644 --- a/src/Parsers/ASTShowAccessEntitiesQuery.cpp +++ b/src/Parsers/Access/ASTShowAccessEntitiesQuery.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/src/Parsers/ASTShowAccessEntitiesQuery.h b/src/Parsers/Access/ASTShowAccessEntitiesQuery.h similarity index 100% rename from src/Parsers/ASTShowAccessEntitiesQuery.h rename to src/Parsers/Access/ASTShowAccessEntitiesQuery.h diff --git a/src/Parsers/ASTShowAccessQuery.h b/src/Parsers/Access/ASTShowAccessQuery.h similarity index 100% rename from src/Parsers/ASTShowAccessQuery.h rename to src/Parsers/Access/ASTShowAccessQuery.h diff --git a/src/Parsers/ASTShowCreateAccessEntityQuery.cpp b/src/Parsers/Access/ASTShowCreateAccessEntityQuery.cpp similarity index 96% rename from src/Parsers/ASTShowCreateAccessEntityQuery.cpp rename to src/Parsers/Access/ASTShowCreateAccessEntityQuery.cpp index 5ff51a47002..db252db968d 100644 --- a/src/Parsers/ASTShowCreateAccessEntityQuery.cpp +++ b/src/Parsers/Access/ASTShowCreateAccessEntityQuery.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include diff --git a/src/Parsers/ASTShowCreateAccessEntityQuery.h b/src/Parsers/Access/ASTShowCreateAccessEntityQuery.h similarity index 100% rename from src/Parsers/ASTShowCreateAccessEntityQuery.h rename to src/Parsers/Access/ASTShowCreateAccessEntityQuery.h diff --git a/src/Parsers/ASTShowGrantsQuery.cpp b/src/Parsers/Access/ASTShowGrantsQuery.cpp similarity index 90% rename from src/Parsers/ASTShowGrantsQuery.cpp rename to src/Parsers/Access/ASTShowGrantsQuery.cpp index 4011cfc522c..5d54cf45dc1 100644 --- a/src/Parsers/ASTShowGrantsQuery.cpp +++ b/src/Parsers/Access/ASTShowGrantsQuery.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include diff --git a/src/Parsers/ASTShowGrantsQuery.h b/src/Parsers/Access/ASTShowGrantsQuery.h similarity index 100% rename from src/Parsers/ASTShowGrantsQuery.h rename to src/Parsers/Access/ASTShowGrantsQuery.h diff --git a/src/Parsers/ASTShowPrivilegesQuery.h b/src/Parsers/Access/ASTShowPrivilegesQuery.h similarity index 100% rename from src/Parsers/ASTShowPrivilegesQuery.h rename to src/Parsers/Access/ASTShowPrivilegesQuery.h diff --git a/src/Parsers/ASTUserNameWithHost.cpp b/src/Parsers/Access/ASTUserNameWithHost.cpp similarity index 97% rename from src/Parsers/ASTUserNameWithHost.cpp rename to src/Parsers/Access/ASTUserNameWithHost.cpp index b99ea5ab8d4..af84399ae45 100644 --- a/src/Parsers/ASTUserNameWithHost.cpp +++ b/src/Parsers/Access/ASTUserNameWithHost.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/src/Parsers/ASTUserNameWithHost.h b/src/Parsers/Access/ASTUserNameWithHost.h similarity index 100% rename from src/Parsers/ASTUserNameWithHost.h rename to src/Parsers/Access/ASTUserNameWithHost.h diff --git a/src/Parsers/ParserCreateQuotaQuery.cpp b/src/Parsers/Access/ParserCreateQuotaQuery.cpp similarity index 98% rename from src/Parsers/ParserCreateQuotaQuery.cpp rename to src/Parsers/Access/ParserCreateQuotaQuery.cpp index 682b345b937..0c6e1224cce 100644 --- a/src/Parsers/ParserCreateQuotaQuery.cpp +++ b/src/Parsers/Access/ParserCreateQuotaQuery.cpp @@ -1,14 +1,14 @@ -#include -#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include #include -#include -#include -#include -#include -#include -#include #include #include #include diff --git a/src/Parsers/ParserCreateQuotaQuery.h b/src/Parsers/Access/ParserCreateQuotaQuery.h similarity index 100% rename from src/Parsers/ParserCreateQuotaQuery.h rename to src/Parsers/Access/ParserCreateQuotaQuery.h diff --git a/src/Parsers/ParserCreateRoleQuery.cpp b/src/Parsers/Access/ParserCreateRoleQuery.cpp similarity index 93% rename from src/Parsers/ParserCreateRoleQuery.cpp rename to src/Parsers/Access/ParserCreateRoleQuery.cpp index 5863136750f..314075cb7c0 100644 --- a/src/Parsers/ParserCreateRoleQuery.cpp +++ b/src/Parsers/Access/ParserCreateRoleQuery.cpp @@ -1,11 +1,11 @@ -#include -#include +#include +#include +#include +#include +#include +#include #include #include -#include -#include -#include -#include #include diff --git a/src/Parsers/ParserCreateRoleQuery.h b/src/Parsers/Access/ParserCreateRoleQuery.h similarity index 100% rename from src/Parsers/ParserCreateRoleQuery.h rename to src/Parsers/Access/ParserCreateRoleQuery.h diff --git a/src/Parsers/ParserCreateRowPolicyQuery.cpp b/src/Parsers/Access/ParserCreateRowPolicyQuery.cpp similarity index 96% rename from src/Parsers/ParserCreateRowPolicyQuery.cpp rename to src/Parsers/Access/ParserCreateRowPolicyQuery.cpp index d4d3db3f846..f6a33ec84a3 100644 --- a/src/Parsers/ParserCreateRowPolicyQuery.cpp +++ b/src/Parsers/Access/ParserCreateRowPolicyQuery.cpp @@ -1,15 +1,15 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include +#include +#include +#include #include #include diff --git a/src/Parsers/ParserCreateRowPolicyQuery.h b/src/Parsers/Access/ParserCreateRowPolicyQuery.h similarity index 100% rename from src/Parsers/ParserCreateRowPolicyQuery.h rename to src/Parsers/Access/ParserCreateRowPolicyQuery.h diff --git a/src/Parsers/ParserCreateSettingsProfileQuery.cpp b/src/Parsers/Access/ParserCreateSettingsProfileQuery.cpp similarity index 93% rename from src/Parsers/ParserCreateSettingsProfileQuery.cpp rename to src/Parsers/Access/ParserCreateSettingsProfileQuery.cpp index 2d1e6824b50..8b5f2df2dd2 100644 --- a/src/Parsers/ParserCreateSettingsProfileQuery.cpp +++ b/src/Parsers/Access/ParserCreateSettingsProfileQuery.cpp @@ -1,12 +1,12 @@ -#include -#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include -#include -#include -#include -#include #include #include diff --git a/src/Parsers/ParserCreateSettingsProfileQuery.h b/src/Parsers/Access/ParserCreateSettingsProfileQuery.h similarity index 100% rename from src/Parsers/ParserCreateSettingsProfileQuery.h rename to src/Parsers/Access/ParserCreateSettingsProfileQuery.h diff --git a/src/Parsers/ParserCreateUserQuery.cpp b/src/Parsers/Access/ParserCreateUserQuery.cpp similarity index 88% rename from src/Parsers/ParserCreateUserQuery.cpp rename to src/Parsers/Access/ParserCreateUserQuery.cpp index 7cada4b8ee8..8dcbfb46692 100644 --- a/src/Parsers/ParserCreateUserQuery.cpp +++ b/src/Parsers/Access/ParserCreateUserQuery.cpp @@ -1,18 +1,18 @@ -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include #include #include -#include -#include -#include -#include -#include -#include -#include #include +#include #include #include #include @@ -34,20 +34,20 @@ namespace } - bool parseAuthentication(IParserBase::Pos & pos, Expected & expected, Authentication & authentication) + bool parseAuthenticationData(IParserBase::Pos & pos, Expected & expected, AuthenticationData & auth_data) { return IParserBase::wrapParseImpl(pos, [&] { if (ParserKeyword{"NOT IDENTIFIED"}.ignore(pos, expected)) { - authentication = Authentication{Authentication::NO_PASSWORD}; + auth_data = AuthenticationData{AuthenticationType::NO_PASSWORD}; return true; } if (!ParserKeyword{"IDENTIFIED"}.ignore(pos, expected)) return false; - std::optional type; + std::optional type; bool expect_password = false; bool expect_hash = false; bool expect_ldap_server_name = false; @@ -55,17 +55,17 @@ namespace if (ParserKeyword{"WITH"}.ignore(pos, expected)) { - for (auto check_type : collections::range(Authentication::MAX_TYPE)) + for (auto check_type : collections::range(AuthenticationType::MAX_TYPE)) { - if (ParserKeyword{Authentication::TypeInfo::get(check_type).raw_name}.ignore(pos, expected)) + if (ParserKeyword{AuthenticationTypeInfo::get(check_type).raw_name}.ignore(pos, expected)) { type = check_type; - if (check_type == Authentication::LDAP) + if (check_type == AuthenticationType::LDAP) expect_ldap_server_name = true; - else if (check_type == Authentication::KERBEROS) + else if (check_type == AuthenticationType::KERBEROS) expect_kerberos_realm = true; - else if (check_type != Authentication::NO_PASSWORD) + else if (check_type != AuthenticationType::NO_PASSWORD) expect_password = true; break; @@ -76,12 +76,12 @@ namespace { if (ParserKeyword{"SHA256_HASH"}.ignore(pos, expected)) { - type = Authentication::SHA256_PASSWORD; + type = AuthenticationType::SHA256_PASSWORD; expect_hash = true; } else if (ParserKeyword{"DOUBLE_SHA1_HASH"}.ignore(pos, expected)) { - type = Authentication::DOUBLE_SHA1_PASSWORD; + type = AuthenticationType::DOUBLE_SHA1_PASSWORD; expect_hash = true; } else @@ -91,7 +91,7 @@ namespace if (!type) { - type = Authentication::SHA256_PASSWORD; + type = AuthenticationType::SHA256_PASSWORD; expect_password = true; } @@ -124,15 +124,15 @@ namespace } } - authentication = Authentication{*type}; + auth_data = AuthenticationData{*type}; if (expect_password) - authentication.setPassword(value); + auth_data.setPassword(value); else if (expect_hash) - authentication.setPasswordHashHex(value); + auth_data.setPasswordHashHex(value); else if (expect_ldap_server_name) - authentication.setLDAPServerName(value); + auth_data.setLDAPServerName(value); else if (expect_kerberos_realm) - authentication.setKerberosRealm(value); + auth_data.setKerberosRealm(value); return true; }); @@ -360,7 +360,7 @@ bool ParserCreateUserQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expec auto names_ref = names->names; String new_name; - std::optional authentication; + std::optional auth_data; std::optional hosts; std::optional add_hosts; std::optional remove_hosts; @@ -372,12 +372,12 @@ bool ParserCreateUserQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expec while (true) { - if (!authentication) + if (!auth_data) { - Authentication new_authentication; - if (parseAuthentication(pos, expected, new_authentication)) + AuthenticationData new_auth_data; + if (parseAuthenticationData(pos, expected, new_auth_data)) { - authentication = std::move(new_authentication); + auth_data = std::move(new_auth_data); continue; } } @@ -460,7 +460,7 @@ bool ParserCreateUserQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expec query->cluster = std::move(cluster); query->names = std::move(names); query->new_name = std::move(new_name); - query->authentication = std::move(authentication); + query->auth_data = std::move(auth_data); query->hosts = std::move(hosts); query->add_hosts = std::move(add_hosts); query->remove_hosts = std::move(remove_hosts); diff --git a/src/Parsers/ParserCreateUserQuery.h b/src/Parsers/Access/ParserCreateUserQuery.h similarity index 100% rename from src/Parsers/ParserCreateUserQuery.h rename to src/Parsers/Access/ParserCreateUserQuery.h diff --git a/src/Parsers/ParserDropAccessEntityQuery.cpp b/src/Parsers/Access/ParserDropAccessEntityQuery.cpp similarity index 91% rename from src/Parsers/ParserDropAccessEntityQuery.cpp rename to src/Parsers/Access/ParserDropAccessEntityQuery.cpp index 14ef35e232c..d91cd8280a7 100644 --- a/src/Parsers/ParserDropAccessEntityQuery.cpp +++ b/src/Parsers/Access/ParserDropAccessEntityQuery.cpp @@ -1,10 +1,10 @@ -#include -#include +#include +#include +#include +#include +#include #include -#include -#include #include -#include #include diff --git a/src/Parsers/ParserDropAccessEntityQuery.h b/src/Parsers/Access/ParserDropAccessEntityQuery.h similarity index 100% rename from src/Parsers/ParserDropAccessEntityQuery.h rename to src/Parsers/Access/ParserDropAccessEntityQuery.h diff --git a/src/Parsers/ParserGrantQuery.cpp b/src/Parsers/Access/ParserGrantQuery.cpp similarity index 98% rename from src/Parsers/ParserGrantQuery.cpp rename to src/Parsers/Access/ParserGrantQuery.cpp index 85a6c9c71d4..8dd3e171237 100644 --- a/src/Parsers/ParserGrantQuery.cpp +++ b/src/Parsers/Access/ParserGrantQuery.cpp @@ -1,11 +1,11 @@ -#include -#include -#include +#include +#include +#include +#include #include #include #include #include -#include #include #include #include diff --git a/src/Parsers/ParserGrantQuery.h b/src/Parsers/Access/ParserGrantQuery.h similarity index 100% rename from src/Parsers/ParserGrantQuery.h rename to src/Parsers/Access/ParserGrantQuery.h diff --git a/src/Parsers/ParserRolesOrUsersSet.cpp b/src/Parsers/Access/ParserRolesOrUsersSet.cpp similarity index 96% rename from src/Parsers/ParserRolesOrUsersSet.cpp rename to src/Parsers/Access/ParserRolesOrUsersSet.cpp index 41e9ee6501d..6f426d89bb3 100644 --- a/src/Parsers/ParserRolesOrUsersSet.cpp +++ b/src/Parsers/Access/ParserRolesOrUsersSet.cpp @@ -1,9 +1,9 @@ -#include +#include +#include +#include +#include #include #include -#include -#include -#include #include #include diff --git a/src/Parsers/ParserRolesOrUsersSet.h b/src/Parsers/Access/ParserRolesOrUsersSet.h similarity index 100% rename from src/Parsers/ParserRolesOrUsersSet.h rename to src/Parsers/Access/ParserRolesOrUsersSet.h diff --git a/src/Parsers/ParserRowPolicyName.cpp b/src/Parsers/Access/ParserRowPolicyName.cpp similarity index 98% rename from src/Parsers/ParserRowPolicyName.cpp rename to src/Parsers/Access/ParserRowPolicyName.cpp index a3e12009c9a..aa159532754 100644 --- a/src/Parsers/ParserRowPolicyName.cpp +++ b/src/Parsers/Access/ParserRowPolicyName.cpp @@ -1,10 +1,10 @@ -#include -#include -#include -#include +#include +#include #include #include #include +#include +#include #include diff --git a/src/Parsers/ParserRowPolicyName.h b/src/Parsers/Access/ParserRowPolicyName.h similarity index 100% rename from src/Parsers/ParserRowPolicyName.h rename to src/Parsers/Access/ParserRowPolicyName.h diff --git a/src/Parsers/ParserSetRoleQuery.cpp b/src/Parsers/Access/ParserSetRoleQuery.cpp similarity index 92% rename from src/Parsers/ParserSetRoleQuery.cpp rename to src/Parsers/Access/ParserSetRoleQuery.cpp index 678474af040..50ccc67a372 100644 --- a/src/Parsers/ParserSetRoleQuery.cpp +++ b/src/Parsers/Access/ParserSetRoleQuery.cpp @@ -1,8 +1,8 @@ -#include -#include +#include +#include +#include +#include #include -#include -#include namespace DB diff --git a/src/Parsers/ParserSetRoleQuery.h b/src/Parsers/Access/ParserSetRoleQuery.h similarity index 100% rename from src/Parsers/ParserSetRoleQuery.h rename to src/Parsers/Access/ParserSetRoleQuery.h diff --git a/src/Parsers/ParserSettingsProfileElement.cpp b/src/Parsers/Access/ParserSettingsProfileElement.cpp similarity index 98% rename from src/Parsers/ParserSettingsProfileElement.cpp rename to src/Parsers/Access/ParserSettingsProfileElement.cpp index d7d982efe23..2c58bd0e623 100644 --- a/src/Parsers/ParserSettingsProfileElement.cpp +++ b/src/Parsers/Access/ParserSettingsProfileElement.cpp @@ -1,10 +1,10 @@ -#include +#include +#include +#include +#include #include #include #include -#include -#include -#include #include #include diff --git a/src/Parsers/ParserSettingsProfileElement.h b/src/Parsers/Access/ParserSettingsProfileElement.h similarity index 100% rename from src/Parsers/ParserSettingsProfileElement.h rename to src/Parsers/Access/ParserSettingsProfileElement.h diff --git a/src/Parsers/ParserShowAccessEntitiesQuery.cpp b/src/Parsers/Access/ParserShowAccessEntitiesQuery.cpp similarity index 96% rename from src/Parsers/ParserShowAccessEntitiesQuery.cpp rename to src/Parsers/Access/ParserShowAccessEntitiesQuery.cpp index 96a275902fb..b1329735b64 100644 --- a/src/Parsers/ParserShowAccessEntitiesQuery.cpp +++ b/src/Parsers/Access/ParserShowAccessEntitiesQuery.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include #include diff --git a/src/Parsers/ParserShowAccessEntitiesQuery.h b/src/Parsers/Access/ParserShowAccessEntitiesQuery.h similarity index 100% rename from src/Parsers/ParserShowAccessEntitiesQuery.h rename to src/Parsers/Access/ParserShowAccessEntitiesQuery.h diff --git a/src/Parsers/ParserShowAccessQuery.h b/src/Parsers/Access/ParserShowAccessQuery.h similarity index 92% rename from src/Parsers/ParserShowAccessQuery.h rename to src/Parsers/Access/ParserShowAccessQuery.h index b6483aa3d43..da0d6ff449f 100644 --- a/src/Parsers/ParserShowAccessQuery.h +++ b/src/Parsers/Access/ParserShowAccessQuery.h @@ -1,9 +1,9 @@ #pragma once #include +#include #include #include -#include namespace DB diff --git a/src/Parsers/ParserShowCreateAccessEntityQuery.cpp b/src/Parsers/Access/ParserShowCreateAccessEntityQuery.cpp similarity index 95% rename from src/Parsers/ParserShowCreateAccessEntityQuery.cpp rename to src/Parsers/Access/ParserShowCreateAccessEntityQuery.cpp index 86ee64ab778..2df04513361 100644 --- a/src/Parsers/ParserShowCreateAccessEntityQuery.cpp +++ b/src/Parsers/Access/ParserShowCreateAccessEntityQuery.cpp @@ -1,10 +1,10 @@ -#include -#include +#include +#include +#include +#include +#include #include #include -#include -#include -#include #include #include #include diff --git a/src/Parsers/ParserShowCreateAccessEntityQuery.h b/src/Parsers/Access/ParserShowCreateAccessEntityQuery.h similarity index 100% rename from src/Parsers/ParserShowCreateAccessEntityQuery.h rename to src/Parsers/Access/ParserShowCreateAccessEntityQuery.h diff --git a/src/Parsers/ParserShowGrantsQuery.cpp b/src/Parsers/Access/ParserShowGrantsQuery.cpp similarity index 79% rename from src/Parsers/ParserShowGrantsQuery.cpp rename to src/Parsers/Access/ParserShowGrantsQuery.cpp index bd9e4012771..02d85d2f90b 100644 --- a/src/Parsers/ParserShowGrantsQuery.cpp +++ b/src/Parsers/Access/ParserShowGrantsQuery.cpp @@ -1,9 +1,9 @@ -#include -#include -#include -#include +#include +#include +#include +#include +#include #include -#include namespace DB diff --git a/src/Parsers/ParserShowGrantsQuery.h b/src/Parsers/Access/ParserShowGrantsQuery.h similarity index 100% rename from src/Parsers/ParserShowGrantsQuery.h rename to src/Parsers/Access/ParserShowGrantsQuery.h diff --git a/src/Parsers/ParserShowPrivilegesQuery.cpp b/src/Parsers/Access/ParserShowPrivilegesQuery.cpp similarity index 76% rename from src/Parsers/ParserShowPrivilegesQuery.cpp rename to src/Parsers/Access/ParserShowPrivilegesQuery.cpp index 56b4327dccf..a120d4ed7c2 100644 --- a/src/Parsers/ParserShowPrivilegesQuery.cpp +++ b/src/Parsers/Access/ParserShowPrivilegesQuery.cpp @@ -1,6 +1,6 @@ -#include +#include +#include #include -#include namespace DB diff --git a/src/Parsers/ParserShowPrivilegesQuery.h b/src/Parsers/Access/ParserShowPrivilegesQuery.h similarity index 100% rename from src/Parsers/ParserShowPrivilegesQuery.h rename to src/Parsers/Access/ParserShowPrivilegesQuery.h diff --git a/src/Parsers/ParserUserNameWithHost.cpp b/src/Parsers/Access/ParserUserNameWithHost.cpp similarity index 95% rename from src/Parsers/ParserUserNameWithHost.cpp rename to src/Parsers/Access/ParserUserNameWithHost.cpp index 9cb4bb6fc97..c9c655fecc4 100644 --- a/src/Parsers/ParserUserNameWithHost.cpp +++ b/src/Parsers/Access/ParserUserNameWithHost.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include #include diff --git a/src/Parsers/ParserUserNameWithHost.h b/src/Parsers/Access/ParserUserNameWithHost.h similarity index 100% rename from src/Parsers/ParserUserNameWithHost.h rename to src/Parsers/Access/ParserUserNameWithHost.h diff --git a/src/Parsers/parseUserName.cpp b/src/Parsers/Access/parseUserName.cpp similarity index 88% rename from src/Parsers/parseUserName.cpp rename to src/Parsers/Access/parseUserName.cpp index 1f25f51ef22..fb20d4d1e6c 100644 --- a/src/Parsers/parseUserName.cpp +++ b/src/Parsers/Access/parseUserName.cpp @@ -1,6 +1,6 @@ -#include -#include -#include +#include +#include +#include #include diff --git a/src/Parsers/parseUserName.h b/src/Parsers/Access/parseUserName.h similarity index 100% rename from src/Parsers/parseUserName.h rename to src/Parsers/Access/parseUserName.h diff --git a/src/Parsers/CMakeLists.txt b/src/Parsers/CMakeLists.txt index a20dd3567a9..d945e63589a 100644 --- a/src/Parsers/CMakeLists.txt +++ b/src/Parsers/CMakeLists.txt @@ -1,8 +1,10 @@ include("${ClickHouse_SOURCE_DIR}/cmake/dbms_glob_sources.cmake") + add_headers_and_sources(clickhouse_parsers .) +add_headers_and_sources(clickhouse_parsers ./Access) add_headers_and_sources(clickhouse_parsers ./MySQL) add_library(clickhouse_parsers ${clickhouse_parsers_headers} ${clickhouse_parsers_sources}) -target_link_libraries(clickhouse_parsers PUBLIC clickhouse_common_io) +target_link_libraries(clickhouse_parsers PUBLIC clickhouse_common_io clickhouse_common_access) if (USE_DEBUG_HELPERS) set (INCLUDE_DEBUG_HELPERS "-I\"${ClickHouse_SOURCE_DIR}/base\" -include \"${ClickHouse_SOURCE_DIR}/src/Parsers/iostream_debug_helpers.h\"") diff --git a/src/Parsers/ExpressionListParsers.cpp b/src/Parsers/ExpressionListParsers.cpp index 3aa5c82884b..b6e80d83777 100644 --- a/src/Parsers/ExpressionListParsers.cpp +++ b/src/Parsers/ExpressionListParsers.cpp @@ -1,3 +1,5 @@ +#include + #include #include @@ -12,6 +14,8 @@ #include #include +using namespace std::literals; + namespace DB { @@ -345,7 +349,7 @@ bool ParserLeftAssociativeBinaryOperatorList::parseImpl(Pos & pos, ASTPtr & node /** special exception for the access operator to the element of the array `x[y]`, which * contains the infix part '[' and the suffix ''] '(specified as' [') */ - if (0 == strcmp(it[0], "[")) + if (it[0] == "["sv) { if (pos->type != TokenType::ClosingSquareBracket) return false; diff --git a/src/Parsers/ParserAlterQuery.cpp b/src/Parsers/ParserAlterQuery.cpp index 2eade2079da..1ea64d94fe7 100644 --- a/src/Parsers/ParserAlterQuery.cpp +++ b/src/Parsers/ParserAlterQuery.cpp @@ -104,6 +104,7 @@ bool ParserAlterCommand::parseImpl(Pos & pos, ASTPtr & node, Expected & expected ParserKeyword s_ttl("TTL"); ParserKeyword s_remove_ttl("REMOVE TTL"); + ParserKeyword s_remove_sample_by("REMOVE SAMPLE BY"); ParserCompoundIdentifier parser_name; ParserStringLiteral parser_string_literal; @@ -669,6 +670,10 @@ bool ParserAlterCommand::parseImpl(Pos & pos, ASTPtr & node, Expected & expected command->type = ASTAlterCommand::MODIFY_SAMPLE_BY; } + else if (s_remove_sample_by.ignore(pos, expected)) + { + command->type = ASTAlterCommand::REMOVE_SAMPLE_BY; + } else if (s_delete.ignore(pos, expected)) { if (s_in_partition.ignore(pos, expected)) diff --git a/src/Parsers/ParserCreateFunctionQuery.cpp b/src/Parsers/ParserCreateFunctionQuery.cpp index 5d84b6bc2dc..55e6e2df1d2 100644 --- a/src/Parsers/ParserCreateFunctionQuery.cpp +++ b/src/Parsers/ParserCreateFunctionQuery.cpp @@ -17,6 +17,7 @@ bool ParserCreateFunctionQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Exp ParserKeyword s_function("FUNCTION"); ParserKeyword s_or_replace("OR REPLACE"); ParserKeyword s_if_not_exists("IF NOT EXISTS"); + ParserKeyword s_on("ON"); ParserIdentifier function_name_p; ParserKeyword s_as("AS"); ParserLambdaExpression lambda_p; @@ -24,6 +25,7 @@ bool ParserCreateFunctionQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Exp ASTPtr function_name; ASTPtr function_core; + String cluster_str; bool or_replace = false; bool if_not_exists = false; @@ -42,6 +44,12 @@ bool ParserCreateFunctionQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Exp if (!function_name_p.parse(pos, function_name, expected)) return false; + if (s_on.ignore(pos, expected)) + { + if (!ASTQueryWithOnCluster::parse(pos, cluster_str, expected)) + return false; + } + if (!s_as.ignore(pos, expected)) return false; @@ -55,6 +63,7 @@ bool ParserCreateFunctionQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Exp create_function_query->function_core = function_core; create_function_query->or_replace = or_replace; create_function_query->if_not_exists = if_not_exists; + create_function_query->cluster = std::move(cluster_str); return true; } diff --git a/src/Parsers/ParserDropFunctionQuery.cpp b/src/Parsers/ParserDropFunctionQuery.cpp index d8c86646410..3f35124f9ab 100644 --- a/src/Parsers/ParserDropFunctionQuery.cpp +++ b/src/Parsers/ParserDropFunctionQuery.cpp @@ -12,8 +12,10 @@ bool ParserDropFunctionQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Expec ParserKeyword s_drop("DROP"); ParserKeyword s_function("FUNCTION"); ParserKeyword s_if_exists("IF EXISTS"); - + ParserKeyword s_on("ON"); ParserIdentifier function_name_p; + + String cluster_str; bool if_exists = false; ASTPtr function_name; @@ -30,8 +32,16 @@ bool ParserDropFunctionQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Expec if (!function_name_p.parse(pos, function_name, expected)) return false; + if (s_on.ignore(pos, expected)) + { + if (!ASTQueryWithOnCluster::parse(pos, cluster_str, expected)) + return false; + } + auto drop_function_query = std::make_shared(); drop_function_query->if_exists = if_exists; + drop_function_query->cluster = std::move(cluster_str); + node = drop_function_query; drop_function_query->function_name = function_name->as().name(); diff --git a/src/Parsers/ParserExternalDDLQuery.cpp b/src/Parsers/ParserExternalDDLQuery.cpp index b6ada39a800..c64c50cd99f 100644 --- a/src/Parsers/ParserExternalDDLQuery.cpp +++ b/src/Parsers/ParserExternalDDLQuery.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #include #include diff --git a/src/Parsers/ParserInsertQuery.cpp b/src/Parsers/ParserInsertQuery.cpp index 6ac6d3b50b9..1bc552af384 100644 --- a/src/Parsers/ParserInsertQuery.cpp +++ b/src/Parsers/ParserInsertQuery.cpp @@ -131,18 +131,22 @@ bool ParserInsertQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) } Pos before_values = pos; + String format_str; /// VALUES or FROM INFILE or FORMAT or SELECT if (!infile && s_values.ignore(pos, expected)) { /// If VALUES is defined in query, everything except setting will be parsed as data data = pos->begin; + format_str = "Values"; } else if (s_format.ignore(pos, expected)) { /// If FORMAT is defined, read format name if (!name_p.parse(pos, format, expected)) return false; + + tryGetIdentifierNameInto(format, format_str); } else if (s_select.ignore(pos, expected) || s_with.ignore(pos,expected)) { @@ -155,6 +159,8 @@ bool ParserInsertQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) /// FORMAT section is expected if we have input() in SELECT part if (s_format.ignore(pos, expected) && !name_p.parse(pos, format, expected)) return false; + + tryGetIdentifierNameInto(format, format_str); } else if (s_watch.ignore(pos, expected)) { @@ -242,9 +248,8 @@ bool ParserInsertQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) tryGetIdentifierNameInto(table, query->table_id.table_name); } - tryGetIdentifierNameInto(format, query->format); - query->columns = columns; + query->format = std::move(format_str); query->select = select; query->watch = watch; query->settings_ast = settings_ast; diff --git a/src/Parsers/ParserKillQueryQuery.cpp b/src/Parsers/ParserKillQueryQuery.cpp index a195a778ed2..bc895406c9f 100644 --- a/src/Parsers/ParserKillQueryQuery.cpp +++ b/src/Parsers/ParserKillQueryQuery.cpp @@ -17,6 +17,7 @@ bool ParserKillQueryQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expect ParserKeyword p_kill{"KILL"}; ParserKeyword p_query{"QUERY"}; ParserKeyword p_mutation{"MUTATION"}; + ParserKeyword p_part_move_to_shard{"PART_MOVE_TO_SHARD"}; ParserKeyword p_on{"ON"}; ParserKeyword p_test{"TEST"}; ParserKeyword p_sync{"SYNC"}; @@ -31,6 +32,8 @@ bool ParserKillQueryQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expect query->type = ASTKillQueryQuery::Type::Query; else if (p_mutation.ignore(pos, expected)) query->type = ASTKillQueryQuery::Type::Mutation; + else if (p_part_move_to_shard.ignore(pos, expected)) + query->type = ASTKillQueryQuery::Type::PartMoveToShard; else return false; diff --git a/src/Parsers/ParserQuery.cpp b/src/Parsers/ParserQuery.cpp index 345013b6475..7677efd9415 100644 --- a/src/Parsers/ParserQuery.cpp +++ b/src/Parsers/ParserQuery.cpp @@ -2,26 +2,27 @@ #include #include #include -#include -#include -#include -#include -#include -#include #include #include -#include #include #include #include #include #include #include -#include #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include + namespace DB { diff --git a/src/Parsers/ParserQueryWithOutput.cpp b/src/Parsers/ParserQueryWithOutput.cpp index 4309063a736..f1e007948f9 100644 --- a/src/Parsers/ParserQueryWithOutput.cpp +++ b/src/Parsers/ParserQueryWithOutput.cpp @@ -13,16 +13,16 @@ #include #include #include -#include -#include -#include -#include -#include #include #include #include #include #include +#include +#include +#include +#include +#include #include "Common/Exception.h" diff --git a/src/Parsers/fuzzers/codegen_fuzzer/CMakeLists.txt b/src/Parsers/fuzzers/codegen_fuzzer/CMakeLists.txt index 6f6b0d07661..d5e6c944852 100644 --- a/src/Parsers/fuzzers/codegen_fuzzer/CMakeLists.txt +++ b/src/Parsers/fuzzers/codegen_fuzzer/CMakeLists.txt @@ -45,4 +45,4 @@ set_source_files_properties("${PROTO_SRCS}" "out.cpp" PROPERTIES COMPILE_FLAGS " target_include_directories(codegen_select_fuzzer BEFORE PRIVATE "${Protobuf_INCLUDE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}") target_include_directories(codegen_select_fuzzer BEFORE PRIVATE "${LibProtobufMutator_SOURCE_DIR}") target_include_directories(codegen_select_fuzzer BEFORE PRIVATE "${LibProtobufMutator_SOURCE_DIR}/src") -target_link_libraries(codegen_select_fuzzer PRIVATE protobuf-mutator dbms ${LIB_FUZZING_ENGINE}) +target_link_libraries(codegen_select_fuzzer PRIVATE protobuf-mutator ${Protobuf_LIBRARY} ${Protobuf_PROTOC_LIBRARY} dbms ${LIB_FUZZING_ENGINE}) diff --git a/src/Processors/Chunk.h b/src/Processors/Chunk.h index bb8266d6e27..011d719d094 100644 --- a/src/Processors/Chunk.h +++ b/src/Processors/Chunk.h @@ -82,6 +82,7 @@ public: MutableColumns cloneEmptyColumns() const; const ChunkInfoPtr & getChunkInfo() const { return chunk_info; } + bool hasChunkInfo() const { return chunk_info != nullptr; } void setChunkInfo(ChunkInfoPtr chunk_info_) { chunk_info = std::move(chunk_info_); } UInt64 getNumRows() const { return num_rows; } diff --git a/src/Processors/Formats/IInputFormat.h b/src/Processors/Formats/IInputFormat.h index f133161c3ec..99d25d87b73 100644 --- a/src/Processors/Formats/IInputFormat.h +++ b/src/Processors/Formats/IInputFormat.h @@ -16,16 +16,11 @@ struct ColumnMapping using OptionalIndexes = std::vector>; OptionalIndexes column_indexes_for_input_fields; - /// Tracks which columns we have read in a single read() call. - /// For columns that are never read, it is initialized to false when we - /// read the file header, and never changed afterwards. - /// For other columns, it is updated on each read() call. - std::vector read_columns; + /// The list of column indexes that are not presented in input data. + std::vector not_presented_columns; - - /// Whether we have any columns that are not read from file at all, - /// and must be always initialized with defaults. - bool have_always_default_columns{false}; + /// The list of column names in input data. Needed for better exception messages. + std::vector names_of_columns; }; using ColumnMappingPtr = std::shared_ptr; @@ -55,6 +50,8 @@ public: */ virtual void resetParser(); + virtual void setReadBuffer(ReadBuffer & in_); + virtual const BlockMissingValues & getMissingValues() const { static const BlockMissingValues none; @@ -70,7 +67,6 @@ public: void setCurrentUnitNumber(size_t current_unit_number_) { current_unit_number = current_unit_number_; } void addBuffer(std::unique_ptr buffer) { owned_buffers.emplace_back(std::move(buffer)); } - void setReadBuffer(ReadBuffer & in_); protected: ColumnMappingPtr column_mapping{}; diff --git a/src/Processors/Formats/Impl/ArrowBlockInputFormat.h b/src/Processors/Formats/Impl/ArrowBlockInputFormat.h index 705c47c9b17..1136937e65b 100644 --- a/src/Processors/Formats/Impl/ArrowBlockInputFormat.h +++ b/src/Processors/Formats/Impl/ArrowBlockInputFormat.h @@ -1,7 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_ARROW diff --git a/src/Processors/Formats/Impl/ArrowBlockOutputFormat.h b/src/Processors/Formats/Impl/ArrowBlockOutputFormat.h index 44d46e97d2a..154292d838f 100644 --- a/src/Processors/Formats/Impl/ArrowBlockOutputFormat.h +++ b/src/Processors/Formats/Impl/ArrowBlockOutputFormat.h @@ -1,7 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_ARROW diff --git a/src/Processors/Formats/Impl/ArrowBufferedStreams.h b/src/Processors/Formats/Impl/ArrowBufferedStreams.h index a49936f326c..a91274e5ad1 100644 --- a/src/Processors/Formats/Impl/ArrowBufferedStreams.h +++ b/src/Processors/Formats/Impl/ArrowBufferedStreams.h @@ -1,7 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_ARROW || USE_ORC || USE_PARQUET diff --git a/src/Processors/Formats/Impl/ArrowColumnToCHColumn.h b/src/Processors/Formats/Impl/ArrowColumnToCHColumn.h index abce6759250..5c495901517 100644 --- a/src/Processors/Formats/Impl/ArrowColumnToCHColumn.h +++ b/src/Processors/Formats/Impl/ArrowColumnToCHColumn.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_ARROW || USE_ORC || USE_PARQUET diff --git a/src/Processors/Formats/Impl/BinaryRowInputFormat.cpp b/src/Processors/Formats/Impl/BinaryRowInputFormat.cpp index c122b9eea1a..0506c539c0f 100644 --- a/src/Processors/Formats/Impl/BinaryRowInputFormat.cpp +++ b/src/Processors/Formats/Impl/BinaryRowInputFormat.cpp @@ -2,79 +2,96 @@ #include #include #include +#include +#include namespace DB { -BinaryRowInputFormat::BinaryRowInputFormat(ReadBuffer & in_, Block header, Params params_, bool with_names_, bool with_types_) - : IRowInputFormat(std::move(header), in_, params_), with_names(with_names_), with_types(with_types_) +namespace ErrorCodes +{ + extern const int CANNOT_SKIP_UNKNOWN_FIELD; +} + +BinaryRowInputFormat::BinaryRowInputFormat(ReadBuffer & in_, Block header, Params params_, bool with_names_, bool with_types_, const FormatSettings & format_settings_) + : RowInputFormatWithNamesAndTypes(std::move(header), in_, std::move(params_), with_names_, with_types_, format_settings_) { } - -bool BinaryRowInputFormat::readRow(MutableColumns & columns, RowReadExtension &) +std::vector BinaryRowInputFormat::readHeaderRow() { - if (in->eof()) - return false; + std::vector fields; + String field; + for (size_t i = 0; i < read_columns; ++i) + { + readStringBinary(field, *in); + fields.push_back(field); + } + return fields; +} - size_t num_columns = columns.size(); - for (size_t i = 0; i < num_columns; ++i) - serializations[i]->deserializeBinary(*columns[i], *in); +std::vector BinaryRowInputFormat::readNames() +{ + readVarUInt(read_columns, *in); + return readHeaderRow(); +} +std::vector BinaryRowInputFormat::readTypes() +{ + auto types = readHeaderRow(); + for (const auto & type_name : types) + read_data_types.push_back(DataTypeFactory::instance().get(type_name)); + return types; +} + +bool BinaryRowInputFormat::readField(IColumn & column, const DataTypePtr & /*type*/, const SerializationPtr & serialization, bool /*is_last_file_column*/, const String & /*column_name*/) +{ + serialization->deserializeBinary(column, *in); return true; } - -void BinaryRowInputFormat::readPrefix() +void BinaryRowInputFormat::skipHeaderRow() { - /// NOTE: The header is completely ignored. This can be easily improved. - - UInt64 columns = 0; String tmp; - - if (with_names || with_types) - { - readVarUInt(columns, *in); - } - - if (with_names) - { - for (size_t i = 0; i < columns; ++i) - { - readStringBinary(tmp, *in); - } - } - - if (with_types) - { - for (size_t i = 0; i < columns; ++i) - { - readStringBinary(tmp, *in); - } - } + for (size_t i = 0; i < read_columns; ++i) + readStringBinary(tmp, *in); } +void BinaryRowInputFormat::skipNames() +{ + readVarUInt(read_columns, *in); + skipHeaderRow(); +} + +void BinaryRowInputFormat::skipTypes() +{ + skipHeaderRow(); +} + +void BinaryRowInputFormat::skipField(size_t file_column) +{ + if (file_column >= read_data_types.size()) + throw Exception(ErrorCodes::CANNOT_SKIP_UNKNOWN_FIELD, "Cannot skip unknown field in RowBinaryWithNames format, because it's type is unknown"); + Field field; + read_data_types[file_column]->getDefaultSerialization()->deserializeBinary(field, *in); +} void registerInputFormatRowBinary(FormatFactory & factory) { - factory.registerInputFormat("RowBinary", []( - ReadBuffer & buf, - const Block & sample, - const IRowInputFormat::Params & params, - const FormatSettings &) + auto register_func = [&](const String & format_name, bool with_names, bool with_types) { - return std::make_shared(buf, sample, params, false, false); - }); + factory.registerInputFormat(format_name, [with_names, with_types]( + ReadBuffer & buf, + const Block & sample, + const IRowInputFormat::Params & params, + const FormatSettings & settings) + { + return std::make_shared(buf, sample, params, with_names, with_types, settings); + }); + }; - factory.registerInputFormat("RowBinaryWithNamesAndTypes", []( - ReadBuffer & buf, - const Block & sample, - const IRowInputFormat::Params & params, - const FormatSettings &) - { - return std::make_shared(buf, sample, params, true, true); - }); + registerWithNamesAndTypes("RowBinary", register_func); } } diff --git a/src/Processors/Formats/Impl/BinaryRowInputFormat.h b/src/Processors/Formats/Impl/BinaryRowInputFormat.h index e96a516c1a7..61d6df77522 100644 --- a/src/Processors/Formats/Impl/BinaryRowInputFormat.h +++ b/src/Processors/Formats/Impl/BinaryRowInputFormat.h @@ -2,6 +2,7 @@ #include #include +#include namespace DB @@ -12,19 +13,33 @@ class ReadBuffer; /** A stream for inputting data in a binary line-by-line format. */ -class BinaryRowInputFormat : public IRowInputFormat +class BinaryRowInputFormat : public RowInputFormatWithNamesAndTypes { public: - BinaryRowInputFormat(ReadBuffer & in_, Block header, Params params_, bool with_names_, bool with_types_); - - bool readRow(MutableColumns & columns, RowReadExtension &) override; - void readPrefix() override; + BinaryRowInputFormat(ReadBuffer & in_, Block header, Params params_, bool with_names_, bool with_types_, const FormatSettings & format_settings_); String getName() const override { return "BinaryRowInputFormat"; } + /// RowInputFormatWithNamesAndTypes implements logic with DiagnosticInfo, but + /// in this format we cannot provide any DiagnosticInfo, because here we have + /// just binary data. + std::string getDiagnosticInfo() override { return {}; } + private: - bool with_names; - bool with_types; + bool readField(IColumn & column, const DataTypePtr & type, const SerializationPtr & serialization, bool is_last_file_column, const String & column_name) override; + void skipField(size_t file_column) override; + + void skipNames() override; + void skipTypes() override; + void skipHeaderRow(); + + std::vector readNames() override; + std::vector readTypes() override; + std::vector readHeaderRow(); + + /// Data types read from input data. + DataTypes read_data_types; + UInt64 read_columns = 0; }; } diff --git a/src/Processors/Formats/Impl/BinaryRowOutputFormat.cpp b/src/Processors/Formats/Impl/BinaryRowOutputFormat.cpp index dbaee68453e..02c4aee5e4e 100644 --- a/src/Processors/Formats/Impl/BinaryRowOutputFormat.cpp +++ b/src/Processors/Formats/Impl/BinaryRowOutputFormat.cpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace DB @@ -49,23 +50,19 @@ void BinaryRowOutputFormat::writeField(const IColumn & column, const ISerializat void registerOutputFormatRowBinary(FormatFactory & factory) { - factory.registerOutputFormat("RowBinary", []( - WriteBuffer & buf, - const Block & sample, - const RowOutputFormatParams & params, - const FormatSettings &) + auto register_func = [&](const String & format_name, bool with_names, bool with_types) { - return std::make_shared(buf, sample, false, false, params); - }); + factory.registerOutputFormat(format_name, [with_names, with_types]( + WriteBuffer & buf, + const Block & sample, + const RowOutputFormatParams & params, + const FormatSettings &) + { + return std::make_shared(buf, sample, with_names, with_types, params); + }); + }; - factory.registerOutputFormat("RowBinaryWithNamesAndTypes", []( - WriteBuffer & buf, - const Block & sample, - const RowOutputFormatParams & params, - const FormatSettings &) - { - return std::make_shared(buf, sample, true, true, params); - }); + registerWithNamesAndTypes("RowBinary", register_func); } } diff --git a/src/Processors/Formats/Impl/CHColumnToArrowColumn.cpp b/src/Processors/Formats/Impl/CHColumnToArrowColumn.cpp index 8734f9c7279..014715ba9ee 100644 --- a/src/Processors/Formats/Impl/CHColumnToArrowColumn.cpp +++ b/src/Processors/Formats/Impl/CHColumnToArrowColumn.cpp @@ -468,13 +468,11 @@ namespace DB fillArrowArrayWithDecimalColumnData(column, null_bytemap, array_builder, format_name, start, end); return true; } -#if !defined(ARCADIA_BUILD) if constexpr (std::is_same_v>) { fillArrowArrayWithDecimalColumnData(column, null_bytemap, array_builder, format_name, start, end); return true; } -#endif return false; }; diff --git a/src/Processors/Formats/Impl/CHColumnToArrowColumn.h b/src/Processors/Formats/Impl/CHColumnToArrowColumn.h index c0885d3778c..1fb2a8af65e 100644 --- a/src/Processors/Formats/Impl/CHColumnToArrowColumn.h +++ b/src/Processors/Formats/Impl/CHColumnToArrowColumn.h @@ -1,8 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif - +#include "config_formats.h" #if USE_ARROW || USE_PARQUET diff --git a/src/Processors/Formats/Impl/CSVRowInputFormat.cpp b/src/Processors/Formats/Impl/CSVRowInputFormat.cpp index 4beb260b64a..9de2b908b1e 100644 --- a/src/Processors/Formats/Impl/CSVRowInputFormat.cpp +++ b/src/Processors/Formats/Impl/CSVRowInputFormat.cpp @@ -3,12 +3,12 @@ #include #include -#include +#include #include +#include #include #include - namespace DB { @@ -19,62 +19,21 @@ namespace ErrorCodes extern const int LOGICAL_ERROR; } - -CSVRowInputFormat::CSVRowInputFormat(const Block & header_, ReadBuffer & in_, const Params & params_, - bool with_names_, const FormatSettings & format_settings_) - : RowInputFormatWithDiagnosticInfo(header_, in_, params_) - , with_names(with_names_) - , format_settings(format_settings_) +CSVRowInputFormat::CSVRowInputFormat( + const Block & header_, + ReadBuffer & in_, + const Params & params_, + bool with_names_, + bool with_types_, + const FormatSettings & format_settings_) + : RowInputFormatWithNamesAndTypes(header_, in_, params_, with_names_, with_types_, format_settings_) { - const String bad_delimiters = " \t\"'.UL"; if (bad_delimiters.find(format_settings.csv.delimiter) != String::npos) - throw Exception(String("CSV format may not work correctly with delimiter '") + format_settings.csv.delimiter + - "'. Try use CustomSeparated format instead.", ErrorCodes::BAD_ARGUMENTS); - - const auto & sample = getPort().getHeader(); - size_t num_columns = sample.columns(); - - data_types.resize(num_columns); - column_indexes_by_names.reserve(num_columns); - - for (size_t i = 0; i < num_columns; ++i) - { - const auto & column_info = sample.getByPosition(i); - - data_types[i] = column_info.type; - column_indexes_by_names.emplace(column_info.name, i); - } -} - - -/// Map an input file column to a table column, based on its name. -void CSVRowInputFormat::addInputColumn(const String & column_name) -{ - const auto column_it = column_indexes_by_names.find(column_name); - if (column_it == column_indexes_by_names.end()) - { - if (format_settings.skip_unknown_fields) - { - column_mapping->column_indexes_for_input_fields.push_back(std::nullopt); - return; - } - throw Exception( - "Unknown field found in CSV header: '" + column_name + "' " + - "at position " + std::to_string(column_mapping->column_indexes_for_input_fields.size()) + - "\nSet the 'input_format_skip_unknown_fields' parameter explicitly to ignore and proceed", - ErrorCodes::INCORRECT_DATA - ); - } - - const auto column_index = column_it->second; - - if (column_mapping->read_columns[column_index]) - throw Exception("Duplicate field found while parsing CSV header: " + column_name, ErrorCodes::INCORRECT_DATA); - - column_mapping->read_columns[column_index] = true; - column_mapping->column_indexes_for_input_fields.emplace_back(column_index); + String("CSV format may not work correctly with delimiter '") + format_settings.csv.delimiter + + "'. Try use CustomSeparated format instead.", + ErrorCodes::BAD_ARGUMENTS); } static void skipEndOfLine(ReadBuffer & in) @@ -100,29 +59,6 @@ static void skipEndOfLine(ReadBuffer & in) throw Exception("Expected end of line", ErrorCodes::INCORRECT_DATA); } - -static void skipDelimiter(ReadBuffer & in, const char delimiter, bool is_last_column) -{ - if (is_last_column) - { - if (in.eof()) - return; - - /// we support the extra delimiter at the end of the line - if (*in.position() == delimiter) - { - ++in.position(); - if (in.eof()) - return; - } - - skipEndOfLine(in); - } - else - assertChar(delimiter, in); -} - - /// Skip `whitespace` symbols allowed in CSV. static inline void skipWhitespacesAndTabs(ReadBuffer & in) { @@ -132,255 +68,138 @@ static inline void skipWhitespacesAndTabs(ReadBuffer & in) ++in.position(); } - -static void skipRow(ReadBuffer & in, const FormatSettings::CSV & settings, size_t num_columns) +void CSVRowInputFormat::skipFieldDelimiter() { - String tmp; - for (size_t i = 0; i < num_columns; ++i) - { - skipWhitespacesAndTabs(in); - readCSVString(tmp, in, settings); - skipWhitespacesAndTabs(in); - - skipDelimiter(in, settings.delimiter, i + 1 == num_columns); - } + skipWhitespacesAndTabs(*in); + assertChar(format_settings.csv.delimiter, *in); } -void CSVRowInputFormat::setupAllColumnsByTableSchema() +String CSVRowInputFormat::readFieldIntoString() { - const auto & header = getPort().getHeader(); - column_mapping->read_columns.assign(header.columns(), true); - column_mapping->column_indexes_for_input_fields.resize(header.columns()); - - for (size_t i = 0; i < column_mapping->column_indexes_for_input_fields.size(); ++i) - column_mapping->column_indexes_for_input_fields[i] = i; + skipWhitespacesAndTabs(*in); + String field; + readCSVString(field, *in, format_settings.csv); + return field; } - -void CSVRowInputFormat::readPrefix() +void CSVRowInputFormat::skipField() { - /// In this format, we assume, that if first string field contain BOM as value, it will be written in quotes, - /// so BOM at beginning of stream cannot be confused with BOM in first string value, and it is safe to skip it. - skipBOMIfExists(*in); - - size_t num_columns = data_types.size(); - const auto & header = getPort().getHeader(); - - /// This is a bit of abstraction leakage, but we have almost the same code in other places. - /// Thus, we check if this InputFormat is working with the "real" beginning of the data in case of parallel parsing. - if (with_names && getCurrentUnitNumber() == 0) - { - /// This CSV file has a header row with column names. Depending on the - /// settings, use it or skip it. - if (format_settings.with_names_use_header) - { - /// Look at the file header to see which columns we have there. - /// The missing columns are filled with defaults. - column_mapping->read_columns.assign(header.columns(), false); - do - { - String column_name; - skipWhitespacesAndTabs(*in); - readCSVString(column_name, *in, format_settings.csv); - skipWhitespacesAndTabs(*in); - - addInputColumn(column_name); - } - while (checkChar(format_settings.csv.delimiter, *in)); - - skipDelimiter(*in, format_settings.csv.delimiter, true); - - for (auto read_column : column_mapping->read_columns) - { - if (!read_column) - { - column_mapping->have_always_default_columns = true; - break; - } - } - - return; - } - else - { - skipRow(*in, format_settings.csv, num_columns); - setupAllColumnsByTableSchema(); - } - } - else if (!column_mapping->is_set) - setupAllColumnsByTableSchema(); + readFieldIntoString(); } - -bool CSVRowInputFormat::readRow(MutableColumns & columns, RowReadExtension & ext) +void CSVRowInputFormat::skipRowEndDelimiter() { + skipWhitespacesAndTabs(*in); + if (in->eof()) - return false; + return; - updateDiagnosticInfo(); + /// we support the extra delimiter at the end of the line + if (*in->position() == format_settings.csv.delimiter) + ++in->position(); - /// Track whether we have to fill any columns in this row with default - /// values. If not, we return an empty column mask to the caller, so that - /// it doesn't have to check it. - bool have_default_columns = column_mapping->have_always_default_columns; + skipWhitespacesAndTabs(*in); + if (in->eof()) + return; - ext.read_columns.assign(column_mapping->read_columns.size(), true); - const auto delimiter = format_settings.csv.delimiter; - for (size_t file_column = 0; file_column < column_mapping->column_indexes_for_input_fields.size(); ++file_column) - { - const auto & table_column = column_mapping->column_indexes_for_input_fields[file_column]; - const bool is_last_file_column = file_column + 1 == column_mapping->column_indexes_for_input_fields.size(); - - if (table_column) - { - skipWhitespacesAndTabs(*in); - ext.read_columns[*table_column] = readField(*columns[*table_column], data_types[*table_column], - serializations[*table_column], is_last_file_column); - - if (!ext.read_columns[*table_column]) - have_default_columns = true; - skipWhitespacesAndTabs(*in); - } - else - { - /// We never read this column from the file, just skip it. - String tmp; - readCSVString(tmp, *in, format_settings.csv); - } - - skipDelimiter(*in, delimiter, is_last_file_column); - } - - if (have_default_columns) - { - for (size_t i = 0; i < column_mapping->read_columns.size(); i++) - { - if (!column_mapping->read_columns[i]) - { - /// The column value for this row is going to be overwritten - /// with default by the caller, but the general assumption is - /// that the column size increases for each row, so we have - /// to insert something. Since we do not care about the exact - /// value, we do not have to use the default value specified by - /// the data type, and can just use IColumn::insertDefault(). - columns[i]->insertDefault(); - ext.read_columns[i] = false; - } - } - } - - return true; + skipEndOfLine(*in); } -bool CSVRowInputFormat::parseRowAndPrintDiagnosticInfo(MutableColumns & columns, WriteBuffer & out) +void CSVRowInputFormat::skipHeaderRow() +{ + do + { + skipField(); + skipWhitespacesAndTabs(*in); + } + while (checkChar(format_settings.csv.delimiter, *in)); + + skipRowEndDelimiter(); +} + +std::vector CSVRowInputFormat::readHeaderRow() +{ + std::vector fields; + do + { + fields.push_back(readFieldIntoString()); + skipWhitespacesAndTabs(*in); + } + while (checkChar(format_settings.csv.delimiter, *in)); + + skipRowEndDelimiter(); + return fields; +} + +bool CSVRowInputFormat::parseFieldDelimiterWithDiagnosticInfo(WriteBuffer & out) { const char delimiter = format_settings.csv.delimiter; - for (size_t file_column = 0; file_column < column_mapping->column_indexes_for_input_fields.size(); ++file_column) + try { - if (file_column == 0 && in->eof()) - { - out << "\n"; - return false; - } - skipWhitespacesAndTabs(*in); - if (column_mapping->column_indexes_for_input_fields[file_column].has_value()) + assertChar(delimiter, *in); + } + catch (const DB::Exception &) + { + if (*in->position() == '\n' || *in->position() == '\r') { - const auto & header = getPort().getHeader(); - size_t col_idx = column_mapping->column_indexes_for_input_fields[file_column].value(); - if (!deserializeFieldAndPrintDiagnosticInfo(header.getByPosition(col_idx).name, data_types[col_idx], *columns[col_idx], - out, file_column)) - return false; + out << "ERROR: Line feed found where delimiter (" << delimiter << ") is expected." + " It's like your file has less columns than expected.\n" + "And if your file has the right number of columns, maybe it has unescaped quotes in values.\n"; } else { - static const String skipped_column_str = ""; - static const DataTypePtr skipped_column_type = std::make_shared(); - static const MutableColumnPtr skipped_column = skipped_column_type->createColumn(); - if (!deserializeFieldAndPrintDiagnosticInfo(skipped_column_str, skipped_column_type, *skipped_column, out, file_column)) - return false; - } - skipWhitespacesAndTabs(*in); - - /// Delimiters - if (file_column + 1 == column_mapping->column_indexes_for_input_fields.size()) - { - if (in->eof()) - return false; - - /// we support the extra delimiter at the end of the line - if (*in->position() == delimiter) - { - ++in->position(); - if (in->eof()) - break; - } - - if (!in->eof() && *in->position() != '\n' && *in->position() != '\r') - { - out << "ERROR: There is no line feed. "; - verbosePrintString(in->position(), in->position() + 1, out); - out << " found instead.\n" - " It's like your file has more columns than expected.\n" - "And if your file has the right number of columns, maybe it has an unquoted string value with a comma.\n"; - - return false; - } - - skipEndOfLine(*in); - } - else - { - try - { - assertChar(delimiter, *in); - } - catch (const DB::Exception &) - { - if (*in->position() == '\n' || *in->position() == '\r') - { - out << "ERROR: Line feed found where delimiter (" << delimiter << ") is expected." - " It's like your file has less columns than expected.\n" - "And if your file has the right number of columns, maybe it has unescaped quotes in values.\n"; - } - else - { - out << "ERROR: There is no delimiter (" << delimiter << "). "; - verbosePrintString(in->position(), in->position() + 1, out); - out << " found instead.\n"; - } - return false; - } + out << "ERROR: There is no delimiter (" << delimiter << "). "; + verbosePrintString(in->position(), in->position() + 1, out); + out << " found instead.\n"; } + return false; } return true; } +bool CSVRowInputFormat::parseRowEndWithDiagnosticInfo(WriteBuffer & out) +{ + skipWhitespacesAndTabs(*in); + + if (in->eof()) + return true; + + /// we support the extra delimiter at the end of the line + if (*in->position() == format_settings.csv.delimiter) + { + ++in->position(); + skipWhitespacesAndTabs(*in); + if (in->eof()) + return true; + } + + if (!in->eof() && *in->position() != '\n' && *in->position() != '\r') + { + out << "ERROR: There is no line feed. "; + verbosePrintString(in->position(), in->position() + 1, out); + out << " found instead.\n" + " It's like your file has more columns than expected.\n" + "And if your file has the right number of columns, maybe it has an unquoted string value with a comma.\n"; + + return false; + } + + skipEndOfLine(*in); + return true; +} void CSVRowInputFormat::syncAfterError() { skipToNextLineOrEOF(*in); } -void CSVRowInputFormat::tryDeserializeField(const DataTypePtr & type, IColumn & column, size_t file_column) +bool CSVRowInputFormat::readField(IColumn & column, const DataTypePtr & type, const SerializationPtr & serialization, bool is_last_file_column, const String & /*column_name*/) { - const auto & index = column_mapping->column_indexes_for_input_fields[file_column]; - if (index) - { - const bool is_last_file_column = file_column + 1 == column_mapping->column_indexes_for_input_fields.size(); - readField(column, type, serializations[*index], is_last_file_column); - } - else - { - String tmp; - readCSVString(tmp, *in, format_settings.csv); - } -} + skipWhitespacesAndTabs(*in); -bool CSVRowInputFormat::readField(IColumn & column, const DataTypePtr & type, const SerializationPtr & serialization, bool is_last_file_column) -{ const bool at_delimiter = !in->eof() && *in->position() == format_settings.csv.delimiter; const bool at_last_column_line_end = is_last_file_column && (in->eof() || *in->position() == '\n' || *in->position() == '\r'); @@ -399,7 +218,7 @@ bool CSVRowInputFormat::readField(IColumn & column, const DataTypePtr & type, co column.insertDefault(); return false; } - else if (format_settings.null_as_default && !type->isNullable()) + else if (format_settings.null_as_default && !type->isNullable() && !type->isLowCardinalityNullable()) { /// If value is null but type is not nullable then use default value instead. return SerializationNullable::deserializeTextCSVImpl(column, *in, format_settings, serialization); @@ -412,31 +231,24 @@ bool CSVRowInputFormat::readField(IColumn & column, const DataTypePtr & type, co } } -void CSVRowInputFormat::resetParser() -{ - RowInputFormatWithDiagnosticInfo::resetParser(); - column_mapping->column_indexes_for_input_fields.clear(); - column_mapping->read_columns.clear(); - column_mapping->have_always_default_columns = false; -} - - void registerInputFormatCSV(FormatFactory & factory) { - for (bool with_names : {false, true}) + auto register_func = [&](const String & format_name, bool with_names, bool with_types) { - factory.registerInputFormat(with_names ? "CSVWithNames" : "CSV", [=]( + factory.registerInputFormat(format_name, [with_names, with_types]( ReadBuffer & buf, const Block & sample, IRowInputFormat::Params params, const FormatSettings & settings) { - return std::make_shared(sample, buf, params, with_names, settings); + return std::make_shared(sample, buf, std::move(params), with_names, with_types, settings); }); - } + }; + + registerWithNamesAndTypes("CSV", register_func); } -static std::pair fileSegmentationEngineCSVImpl(ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size) +static std::pair fileSegmentationEngineCSVImpl(ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size, size_t min_rows) { char * pos = in.position(); bool quotes = false; @@ -476,7 +288,7 @@ static std::pair fileSegmentationEngineCSVImpl(ReadBuffer & in, DB else if (*pos == '\n') { ++number_of_rows; - if (memory.size() + static_cast(pos - in.position()) >= min_chunk_size) + if (memory.size() + static_cast(pos - in.position()) >= min_chunk_size && number_of_rows >= min_rows) need_more_data = false; ++pos; if (loadAtPosition(in, memory, pos) && *pos == '\r') @@ -484,7 +296,7 @@ static std::pair fileSegmentationEngineCSVImpl(ReadBuffer & in, DB } else if (*pos == '\r') { - if (memory.size() + static_cast(pos - in.position()) >= min_chunk_size) + if (memory.size() + static_cast(pos - in.position()) >= min_chunk_size && number_of_rows >= min_rows) need_more_data = false; ++pos; if (loadAtPosition(in, memory, pos) && *pos == '\n') @@ -502,8 +314,16 @@ static std::pair fileSegmentationEngineCSVImpl(ReadBuffer & in, DB void registerFileSegmentationEngineCSV(FormatFactory & factory) { - factory.registerFileSegmentationEngine("CSV", &fileSegmentationEngineCSVImpl); - factory.registerFileSegmentationEngine("CSVWithNames", &fileSegmentationEngineCSVImpl); + auto register_func = [&](const String & format_name, bool with_names, bool with_types) + { + size_t min_rows = 1 + int(with_names) + int(with_types); + factory.registerFileSegmentationEngine(format_name, [min_rows](ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size) + { + return fileSegmentationEngineCSVImpl(in, memory, min_chunk_size, min_rows); + }); + }; + + registerWithNamesAndTypes("CSV", register_func); } } diff --git a/src/Processors/Formats/Impl/CSVRowInputFormat.h b/src/Processors/Formats/Impl/CSVRowInputFormat.h index b6075745b39..f239464485a 100644 --- a/src/Processors/Formats/Impl/CSVRowInputFormat.h +++ b/src/Processors/Formats/Impl/CSVRowInputFormat.h @@ -4,7 +4,7 @@ #include #include -#include +#include #include @@ -14,41 +14,44 @@ namespace DB /** A stream for inputting data in csv format. * Does not conform with https://tools.ietf.org/html/rfc4180 because it skips spaces and tabs between values. */ -class CSVRowInputFormat : public RowInputFormatWithDiagnosticInfo +class CSVRowInputFormat : public RowInputFormatWithNamesAndTypes { public: /** with_names - in the first line the header with column names + * with_types - on the next line header with type names */ CSVRowInputFormat(const Block & header_, ReadBuffer & in_, const Params & params_, - bool with_names_, const FormatSettings & format_settings_); + bool with_names_, bool with_types_, const FormatSettings & format_settings_); String getName() const override { return "CSVRowInputFormat"; } - bool readRow(MutableColumns & columns, RowReadExtension & ext) override; - void readPrefix() override; bool allowSyncAfterError() const override { return true; } void syncAfterError() override; - void resetParser() override; private: - /// There fields are computed in constructor. - bool with_names; - const FormatSettings format_settings; - DataTypes data_types; - using IndexesMap = std::unordered_map; - IndexesMap column_indexes_by_names; - - void addInputColumn(const String & column_name); - - void setupAllColumnsByTableSchema(); - bool parseRowAndPrintDiagnosticInfo(MutableColumns & columns, WriteBuffer & out) override; - void tryDeserializeField(const DataTypePtr & type, IColumn & column, size_t file_column) override; + bool parseFieldDelimiterWithDiagnosticInfo(WriteBuffer & out) override; + bool parseRowEndWithDiagnosticInfo(WriteBuffer & out) override; bool isGarbageAfterField(size_t, ReadBuffer::Position pos) override { return *pos != '\n' && *pos != '\r' && *pos != format_settings.csv.delimiter && *pos != ' ' && *pos != '\t'; } - bool readField(IColumn & column, const DataTypePtr & type, const SerializationPtr & serialization, bool is_last_file_column); + bool readField(IColumn & column, const DataTypePtr & type, const SerializationPtr & serialization, bool is_last_file_column, const String & column_name) override; + + void skipField(size_t /*file_column*/) override { skipField(); } + void skipField(); + + void skipHeaderRow() ; + void skipNames() override { skipHeaderRow(); } + void skipTypes() override { skipHeaderRow(); } + void skipFieldDelimiter() override; + void skipRowEndDelimiter() override; + + std::vector readHeaderRow(); + std::vector readNames() override { return readHeaderRow(); } + std::vector readTypes() override { return readHeaderRow(); } + + String readFieldIntoString(); }; } diff --git a/src/Processors/Formats/Impl/CSVRowOutputFormat.cpp b/src/Processors/Formats/Impl/CSVRowOutputFormat.cpp index 14d0e519c0c..b300928e569 100644 --- a/src/Processors/Formats/Impl/CSVRowOutputFormat.cpp +++ b/src/Processors/Formats/Impl/CSVRowOutputFormat.cpp @@ -1,5 +1,6 @@ #include #include +#include #include @@ -8,8 +9,8 @@ namespace DB { -CSVRowOutputFormat::CSVRowOutputFormat(WriteBuffer & out_, const Block & header_, bool with_names_, const RowOutputFormatParams & params_, const FormatSettings & format_settings_) - : IRowOutputFormat(header_, out_, params_), with_names(with_names_), format_settings(format_settings_) +CSVRowOutputFormat::CSVRowOutputFormat(WriteBuffer & out_, const Block & header_, bool with_names_, bool with_types_, const RowOutputFormatParams & params_, const FormatSettings & format_settings_) + : IRowOutputFormat(header_, out_, params_), with_names(with_names_), with_types(with_types_), format_settings(format_settings_) { const auto & sample = getPort(PortKind::Main).getHeader(); size_t columns = sample.columns(); @@ -18,25 +19,27 @@ CSVRowOutputFormat::CSVRowOutputFormat(WriteBuffer & out_, const Block & header_ data_types[i] = sample.safeGetByPosition(i).type; } +void CSVRowOutputFormat::writeLine(const std::vector & values) +{ + for (size_t i = 0; i < values.size(); ++i) + { + writeCSVString(values[i], out); + if (i + 1 == values.size()) + writeRowEndDelimiter(); + else + writeFieldDelimiter(); + } +} void CSVRowOutputFormat::doWritePrefix() { const auto & sample = getPort(PortKind::Main).getHeader(); - size_t columns = sample.columns(); if (with_names) - { - for (size_t i = 0; i < columns; ++i) - { - writeCSVString(sample.safeGetByPosition(i).name, out); + writeLine(sample.getNames()); - char delimiter = format_settings.csv.delimiter; - if (i + 1 == columns) - delimiter = '\n'; - - writeChar(delimiter, out); - } - } + if (with_types) + writeLine(sample.getDataTypeNames()); } @@ -72,18 +75,20 @@ void CSVRowOutputFormat::writeBeforeExtremes() void registerOutputFormatCSV(FormatFactory & factory) { - for (bool with_names : {false, true}) + auto register_func = [&](const String & format_name, bool with_names, bool with_types) { - factory.registerOutputFormat(with_names ? "CSVWithNames" : "CSV", [=]( - WriteBuffer & buf, - const Block & sample, - const RowOutputFormatParams & params, - const FormatSettings & format_settings) + factory.registerOutputFormat(format_name, [with_names, with_types]( + WriteBuffer & buf, + const Block & sample, + const RowOutputFormatParams & params, + const FormatSettings & format_settings) { - return std::make_shared(buf, sample, with_names, params, format_settings); + return std::make_shared(buf, sample, with_names, with_types, params, format_settings); }); - factory.markOutputFormatSupportsParallelFormatting(with_names ? "CSVWithNames" : "CSV"); - } + factory.markOutputFormatSupportsParallelFormatting(format_name); + }; + + registerWithNamesAndTypes("CSV", register_func); } } diff --git a/src/Processors/Formats/Impl/CSVRowOutputFormat.h b/src/Processors/Formats/Impl/CSVRowOutputFormat.h index 780a6c4d3ce..7f5d90203ea 100644 --- a/src/Processors/Formats/Impl/CSVRowOutputFormat.h +++ b/src/Processors/Formats/Impl/CSVRowOutputFormat.h @@ -20,7 +20,7 @@ public: /** with_names - output in the first line a header with column names * with_types - output in the next line header with the names of the types */ - CSVRowOutputFormat(WriteBuffer & out_, const Block & header_, bool with_names_, const RowOutputFormatParams & params_, const FormatSettings & format_settings_); + CSVRowOutputFormat(WriteBuffer & out_, const Block & header_, bool with_names_, bool with_types, const RowOutputFormatParams & params_, const FormatSettings & format_settings_); String getName() const override { return "CSVRowOutputFormat"; } @@ -38,9 +38,11 @@ public: return String("text/csv; charset=UTF-8; header=") + (with_names ? "present" : "absent"); } -protected: +private: + void writeLine(const std::vector & values); bool with_names; + bool with_types; const FormatSettings format_settings; DataTypes data_types; }; diff --git a/src/Processors/Formats/Impl/JSONAsStringRowInputFormat.cpp b/src/Processors/Formats/Impl/JSONAsStringRowInputFormat.cpp index 5b32bf94c4d..a5e0ac6862c 100644 --- a/src/Processors/Formats/Impl/JSONAsStringRowInputFormat.cpp +++ b/src/Processors/Formats/Impl/JSONAsStringRowInputFormat.cpp @@ -185,7 +185,7 @@ void registerInputFormatJSONAsString(FormatFactory & factory) void registerFileSegmentationEngineJSONAsString(FormatFactory & factory) { - factory.registerFileSegmentationEngine("JSONAsString", &fileSegmentationEngineJSONEachRowImpl); + factory.registerFileSegmentationEngine("JSONAsString", &fileSegmentationEngineJSONEachRow); } void registerNonTrivialPrefixAndSuffixCheckerJSONAsString(FormatFactory & factory) diff --git a/src/Processors/Formats/Impl/JSONCompactEachRowRowInputFormat.cpp b/src/Processors/Formats/Impl/JSONCompactEachRowRowInputFormat.cpp index 962e9d6e5ac..88fb411ffbd 100644 --- a/src/Processors/Formats/Impl/JSONCompactEachRowRowInputFormat.cpp +++ b/src/Processors/Formats/Impl/JSONCompactEachRowRowInputFormat.cpp @@ -1,8 +1,11 @@ -#include -#include - #include + +#include +#include #include +#include +#include +#include #include #include @@ -12,183 +15,39 @@ namespace DB namespace ErrorCodes { extern const int INCORRECT_DATA; - extern const int CANNOT_READ_ALL_DATA; } -JSONCompactEachRowRowInputFormat::JSONCompactEachRowRowInputFormat(ReadBuffer & in_, - const Block & header_, - Params params_, - const FormatSettings & format_settings_, - bool with_names_, - bool yield_strings_) - : IRowInputFormat(header_, in_, std::move(params_)), format_settings(format_settings_), with_names(with_names_), yield_strings(yield_strings_) +JSONCompactEachRowRowInputFormat::JSONCompactEachRowRowInputFormat( + const Block & header_, + ReadBuffer & in_, + Params params_, + bool with_names_, + bool with_types_, + bool yield_strings_, + const FormatSettings & format_settings_) + : RowInputFormatWithNamesAndTypes(header_, in_, std::move(params_), with_names_, with_types_, format_settings_) + , yield_strings(yield_strings_) { - const auto & sample = getPort().getHeader(); - size_t num_columns = sample.columns(); - - data_types.resize(num_columns); - column_indexes_by_names.reserve(num_columns); - - for (size_t i = 0; i < num_columns; ++i) - { - const auto & column_info = sample.getByPosition(i); - - data_types[i] = column_info.type; - column_indexes_by_names.emplace(column_info.name, i); - } } -void JSONCompactEachRowRowInputFormat::resetParser() +void JSONCompactEachRowRowInputFormat::skipRowStartDelimiter() { - IRowInputFormat::resetParser(); - column_indexes_for_input_fields.clear(); - not_seen_columns.clear(); -} - -void JSONCompactEachRowRowInputFormat::readPrefix() -{ - /// In this format, BOM at beginning of stream cannot be confused with value, so it is safe to skip it. - skipBOMIfExists(*in); - - if (with_names) - { - size_t num_columns = getPort().getHeader().columns(); - read_columns.assign(num_columns, false); - - assertChar('[', *in); - do - { - skipWhitespaceIfAny(*in); - String column_name; - readJSONString(column_name, *in); - addInputColumn(column_name); - skipWhitespaceIfAny(*in); - } - while (checkChar(',', *in)); - assertChar(']', *in); - skipEndOfLine(); - - /// Type checking - assertChar('[', *in); - for (size_t i = 0; i < column_indexes_for_input_fields.size(); ++i) - { - skipWhitespaceIfAny(*in); - String data_type; - readJSONString(data_type, *in); - - if (column_indexes_for_input_fields[i] && - data_types[*column_indexes_for_input_fields[i]]->getName() != data_type) - { - throw Exception( - "Type of '" + getPort().getHeader().getByPosition(*column_indexes_for_input_fields[i]).name - + "' must be " + data_types[*column_indexes_for_input_fields[i]]->getName() + - ", not " + data_type, - ErrorCodes::INCORRECT_DATA - ); - } - - if (i != column_indexes_for_input_fields.size() - 1) - assertChar(',', *in); - skipWhitespaceIfAny(*in); - } - assertChar(']', *in); - } - else - { - size_t num_columns = getPort().getHeader().columns(); - read_columns.assign(num_columns, true); - column_indexes_for_input_fields.resize(num_columns); - - for (size_t i = 0; i < num_columns; ++i) - { - column_indexes_for_input_fields[i] = i; - } - } - - for (size_t i = 0; i < read_columns.size(); ++i) - { - if (!read_columns[i]) - { - not_seen_columns.emplace_back(i); - } - } -} - -void JSONCompactEachRowRowInputFormat::addInputColumn(const String & column_name) -{ - names_of_columns.emplace_back(column_name); - - const auto column_it = column_indexes_by_names.find(column_name); - if (column_it == column_indexes_by_names.end()) - { - if (format_settings.skip_unknown_fields) - { - column_indexes_for_input_fields.push_back(std::nullopt); - return; - } - - throw Exception( - "Unknown field found in JSONCompactEachRow header: '" + column_name + "' " + - "at position " + std::to_string(column_indexes_for_input_fields.size()) + - "\nSet the 'input_format_skip_unknown_fields' parameter explicitly to ignore and proceed", - ErrorCodes::INCORRECT_DATA - ); - } - - const auto column_index = column_it->second; - - if (read_columns[column_index]) - throw Exception("Duplicate field found while parsing JSONCompactEachRow header: " + column_name, ErrorCodes::INCORRECT_DATA); - - read_columns[column_index] = true; - column_indexes_for_input_fields.emplace_back(column_index); -} - -bool JSONCompactEachRowRowInputFormat::readRow(DB::MutableColumns &columns, DB::RowReadExtension &ext) -{ - skipEndOfLine(); - - if (in->eof()) - return false; - - size_t num_columns = columns.size(); - - read_columns.assign(num_columns, false); - + skipWhitespaceIfAny(*in); assertChar('[', *in); - for (size_t file_column = 0; file_column < column_indexes_for_input_fields.size(); ++file_column) - { - const auto & table_column = column_indexes_for_input_fields[file_column]; - if (table_column) - { - readField(*table_column, columns); - } - else - { - skipJSONField(*in, StringRef(names_of_columns[file_column])); - } +} - skipWhitespaceIfAny(*in); - if (in->eof()) - throw ParsingException("Unexpected end of stream while parsing JSONCompactEachRow format", ErrorCodes::CANNOT_READ_ALL_DATA); - if (file_column + 1 != column_indexes_for_input_fields.size()) - { - assertChar(',', *in); - skipWhitespaceIfAny(*in); - } - } +void JSONCompactEachRowRowInputFormat::skipFieldDelimiter() +{ + skipWhitespaceIfAny(*in); + assertChar(',', *in); +} + +void JSONCompactEachRowRowInputFormat::skipRowEndDelimiter() +{ + skipWhitespaceIfAny(*in); assertChar(']', *in); - for (const auto & name : not_seen_columns) - columns[name]->insertDefault(); - - ext.read_columns = read_columns; - return true; -} - -void JSONCompactEachRowRowInputFormat::skipEndOfLine() -{ skipWhitespaceIfAny(*in); if (!in->eof() && (*in->position() == ',' || *in->position() == ';')) ++in->position(); @@ -196,39 +55,55 @@ void JSONCompactEachRowRowInputFormat::skipEndOfLine() skipWhitespaceIfAny(*in); } -void JSONCompactEachRowRowInputFormat::readField(size_t index, MutableColumns & columns) +String JSONCompactEachRowRowInputFormat::readFieldIntoString() { - try + skipWhitespaceIfAny(*in); + String field; + readJSONString(field, *in); + return field; +} + +void JSONCompactEachRowRowInputFormat::skipField(size_t file_column) +{ + skipWhitespaceIfAny(*in); + skipJSONField(*in, column_mapping->names_of_columns[file_column]); +} + +void JSONCompactEachRowRowInputFormat::skipHeaderRow() +{ + skipRowStartDelimiter(); + size_t i = 0; + do { - read_columns[index] = true; - const auto & type = data_types[index]; - const auto & serialization = serializations[index]; - - if (yield_strings) - { - String str; - readJSONString(str, *in); - - ReadBufferFromString buf(str); - - if (format_settings.null_as_default && !type->isNullable()) - read_columns[index] = SerializationNullable::deserializeWholeTextImpl(*columns[index], buf, format_settings, serialization); - else - serialization->deserializeWholeText(*columns[index], buf, format_settings); - } - else - { - if (format_settings.null_as_default && !type->isNullable()) - read_columns[index] = SerializationNullable::deserializeTextJSONImpl(*columns[index], *in, format_settings, serialization); - else - serialization->deserializeTextJSON(*columns[index], *in, format_settings); - } + if (i >= column_mapping->names_of_columns.size()) + throw Exception(ErrorCodes::INCORRECT_DATA, "The number of columns in a row differs from the number of column names"); + skipField(i++); + skipWhitespaceIfAny(*in); } - catch (Exception & e) + while (checkChar(',', *in)); + + skipRowEndDelimiter(); +} + +std::vector JSONCompactEachRowRowInputFormat::readHeaderRow() +{ + skipRowStartDelimiter(); + std::vector fields; + do { - e.addMessage("(while reading the value of key " + getPort().getHeader().getByPosition(index).name + ")"); - throw; + fields.push_back(readFieldIntoString()); + skipWhitespaceIfAny(*in); } + while (checkChar(',', *in)); + + skipRowEndDelimiter(); + return fields; +} + +bool JSONCompactEachRowRowInputFormat::readField(IColumn & column, const DataTypePtr & type, const SerializationPtr & serialization, bool /*is_last_file_column*/, const String & column_name) +{ + skipWhitespaceIfAny(*in); + return readFieldImpl(*in, column, type, serialization, column_name, format_settings, yield_strings); } void JSONCompactEachRowRowInputFormat::syncAfterError() @@ -236,43 +111,112 @@ void JSONCompactEachRowRowInputFormat::syncAfterError() skipToUnescapedNextLineOrEOF(*in); } +bool JSONCompactEachRowRowInputFormat::parseRowStartWithDiagnosticInfo(WriteBuffer & out) +{ + skipWhitespaceIfAny(*in); + if (!checkChar('[', *in)) + { + out << "ERROR: There is no '[' before the row.\n"; + return false; + } + + return true; +} + +bool JSONCompactEachRowRowInputFormat::parseFieldDelimiterWithDiagnosticInfo(WriteBuffer & out) +{ + try + { + skipWhitespaceIfAny(*in); + assertChar(',', *in); + } + catch (const DB::Exception &) + { + if (*in->position() == ']') + { + out << "ERROR: Closing parenthesis (']') found where comma is expected." + " It's like your file has less columns than expected.\n" + "And if your file has the right number of columns, maybe it has unescaped quotes in values.\n"; + } + else + { + out << "ERROR: There is no comma. "; + verbosePrintString(in->position(), in->position() + 1, out); + out << " found instead.\n"; + } + return false; + } + + return true; +} + +bool JSONCompactEachRowRowInputFormat::parseRowEndWithDiagnosticInfo(WriteBuffer & out) +{ + skipWhitespaceIfAny(*in); + + if (in->eof()) + { + out << "ERROR: Unexpected end of file. ']' expected at the end of row."; + return false; + } + + if (!checkChar(']', *in)) + { + out << "ERROR: There is no closing parenthesis (']') at the end of the row. "; + verbosePrintString(in->position(), in->position() + 1, out); + out << " found instead.\n"; + return false; + } + + skipWhitespaceIfAny(*in); + + if (in->eof()) + return true; + + if ((*in->position() == ',' || *in->position() == ';')) + ++in->position(); + + skipWhitespaceIfAny(*in); + return true; +} + void registerInputFormatJSONCompactEachRow(FormatFactory & factory) { - factory.registerInputFormat("JSONCompactEachRow", []( - ReadBuffer & buf, - const Block & sample, - IRowInputFormat::Params params, - const FormatSettings & settings) + for (bool yield_strings : {true, false}) { - return std::make_shared(buf, sample, std::move(params), settings, false, false); - }); + auto register_func = [&](const String & format_name, bool with_names, bool with_types) + { + factory.registerInputFormat(format_name, [with_names, with_types, yield_strings]( + ReadBuffer & buf, + const Block & sample, + IRowInputFormat::Params params, + const FormatSettings & settings) + { + return std::make_shared(sample, buf, std::move(params), with_names, with_types, yield_strings, settings); + }); + }; - factory.registerInputFormat("JSONCompactEachRowWithNamesAndTypes", []( - ReadBuffer & buf, - const Block & sample, - IRowInputFormat::Params params, - const FormatSettings & settings) - { - return std::make_shared(buf, sample, std::move(params), settings, true, false); - }); + registerWithNamesAndTypes(yield_strings ? "JSONCompactStringsEachRow" : "JSONCompactEachRow", register_func); + } +} - factory.registerInputFormat("JSONCompactStringsEachRow", []( - ReadBuffer & buf, - const Block & sample, - IRowInputFormat::Params params, - const FormatSettings & settings) +void registerFileSegmentationEngineJSONCompactEachRow(FormatFactory & factory) +{ + auto register_func = [&](const String & format_name, bool with_names, bool with_types) { - return std::make_shared(buf, sample, std::move(params), settings, false, true); - }); + /// In case when we have names and/or types in the first two/one rows, + /// we need to read at least one more row of actual data. So, set + /// the minimum of rows for segmentation engine according to + /// parameters with_names and with_types. + size_t min_rows = 1 + int(with_names) + int(with_types); + factory.registerFileSegmentationEngine(format_name, [min_rows](ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size) + { + return fileSegmentationEngineJSONCompactEachRow(in, memory, min_chunk_size, min_rows); + }); + }; - factory.registerInputFormat("JSONCompactStringsEachRowWithNamesAndTypes", []( - ReadBuffer & buf, - const Block & sample, - IRowInputFormat::Params params, - const FormatSettings & settings) - { - return std::make_shared(buf, sample, std::move(params), settings, true, true); - }); + registerWithNamesAndTypes("JSONCompactEachRow", register_func); + registerWithNamesAndTypes("JSONCompactStringsEachRow", register_func); } } diff --git a/src/Processors/Formats/Impl/JSONCompactEachRowRowInputFormat.h b/src/Processors/Formats/Impl/JSONCompactEachRowRowInputFormat.h index 4077eb6e008..373eb04f06c 100644 --- a/src/Processors/Formats/Impl/JSONCompactEachRowRowInputFormat.h +++ b/src/Processors/Formats/Impl/JSONCompactEachRowRowInputFormat.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include @@ -17,49 +17,47 @@ class ReadBuffer; * - JSONCompactStringsEachRowWithNamesAndTypes * */ -class JSONCompactEachRowRowInputFormat : public IRowInputFormat +class JSONCompactEachRowRowInputFormat : public RowInputFormatWithNamesAndTypes { public: JSONCompactEachRowRowInputFormat( - ReadBuffer & in_, const Block & header_, + ReadBuffer & in_, Params params_, - const FormatSettings & format_settings_, bool with_names_, - bool yield_strings_); + bool with_types_, + bool yield_strings_, + const FormatSettings & format_settings_); String getName() const override { return "JSONCompactEachRowRowInputFormat"; } - - void readPrefix() override; - bool readRow(MutableColumns & columns, RowReadExtension & ext) override; bool allowSyncAfterError() const override { return true; } void syncAfterError() override; - void resetParser() override; private: - void addInputColumn(const String & column_name); - void skipEndOfLine(); - void readField(size_t index, MutableColumns & columns); + bool parseRowStartWithDiagnosticInfo(WriteBuffer & out) override; + bool parseFieldDelimiterWithDiagnosticInfo(WriteBuffer & out) override; + bool parseRowEndWithDiagnosticInfo(WriteBuffer & out) override; + bool isGarbageAfterField(size_t, ReadBuffer::Position pos) override + { + return *pos != ',' && *pos != ']' && *pos != ' ' && *pos != '\t'; + } - const FormatSettings format_settings; + bool readField(IColumn & column, const DataTypePtr & type, const SerializationPtr & serialization, bool is_last_file_column, const String & column_name) override; - using IndexesMap = std::unordered_map; - IndexesMap column_indexes_by_names; + void skipField(size_t file_column) override; + void skipHeaderRow(); + void skipNames() override { skipHeaderRow(); } + void skipTypes() override { skipHeaderRow(); } + void skipRowStartDelimiter() override; + void skipFieldDelimiter() override; + void skipRowEndDelimiter() override; - using OptionalIndexes = std::vector>; - OptionalIndexes column_indexes_for_input_fields; + std::vector readHeaderRow(); + std::vector readNames() override { return readHeaderRow(); } + std::vector readTypes() override { return readHeaderRow(); } + String readFieldIntoString(); - DataTypes data_types; - std::vector read_columns; - std::vector not_seen_columns; - - /// This is for the correct exceptions in skipping unknown fields. - std::vector names_of_columns; - - /// For *WithNamesAndTypes formats. - bool with_names; - /// For JSONCompactString* formats. bool yield_strings; }; diff --git a/src/Processors/Formats/Impl/JSONCompactEachRowRowOutputFormat.cpp b/src/Processors/Formats/Impl/JSONCompactEachRowRowOutputFormat.cpp index 1ce4277023d..cdff7ff2070 100644 --- a/src/Processors/Formats/Impl/JSONCompactEachRowRowOutputFormat.cpp +++ b/src/Processors/Formats/Impl/JSONCompactEachRowRowOutputFormat.cpp @@ -2,6 +2,7 @@ #include #include #include +#include namespace DB @@ -13,12 +14,10 @@ JSONCompactEachRowRowOutputFormat::JSONCompactEachRowRowOutputFormat(WriteBuffer const RowOutputFormatParams & params_, const FormatSettings & settings_, bool with_names_, + bool with_types_, bool yield_strings_) - : IRowOutputFormat(header_, out_, params_), settings(settings_), with_names(with_names_), yield_strings(yield_strings_) + : IRowOutputFormat(header_, out_, params_), settings(settings_), with_names(with_names_), with_types(with_types_), yield_strings(yield_strings_) { - const auto & sample = getPort(PortKind::Main).getHeader(); - NamesAndTypesList columns(sample.getNamesAndTypesList()); - fields.assign(columns.begin(), columns.end()); } @@ -57,39 +56,40 @@ void JSONCompactEachRowRowOutputFormat::writeTotals(const Columns & columns, siz { writeChar('\n', out); size_t num_columns = columns.size(); - writeChar('[', out); + writeRowStartDelimiter(); for (size_t i = 0; i < num_columns; ++i) { if (i != 0) - JSONCompactEachRowRowOutputFormat::writeFieldDelimiter(); + writeFieldDelimiter(); - JSONCompactEachRowRowOutputFormat::writeField(*columns[i], *serializations[i], row_num); + writeField(*columns[i], *serializations[i], row_num); } - writeCString("]\n", out); + writeRowEndDelimiter(); +} + +void JSONCompactEachRowRowOutputFormat::writeLine(const std::vector & values) +{ + writeRowStartDelimiter(); + for (size_t i = 0; i < values.size(); ++i) + { + writeChar('\"', out); + writeString(values[i], out); + writeChar('\"', out); + if (i != values.size() - 1) + writeFieldDelimiter(); + } + writeRowEndDelimiter(); } void JSONCompactEachRowRowOutputFormat::doWritePrefix() { + const auto & header = getPort(PortKind::Main).getHeader(); + if (with_names) - { - writeChar('[', out); - for (size_t i = 0; i < fields.size(); ++i) - { - writeChar('\"', out); - writeString(fields[i].name, out); - writeChar('\"', out); - if (i != fields.size() - 1) - writeCString(", ", out); - } - writeCString("]\n[", out); - for (size_t i = 0; i < fields.size(); ++i) - { - writeJSONString(fields[i].type->getName(), out, settings); - if (i != fields.size() - 1) - writeCString(", ", out); - } - writeCString("]\n", out); - } + writeLine(header.getNames()); + + if (with_types) + writeLine(header.getDataTypeNames()); } void JSONCompactEachRowRowOutputFormat::consumeTotals(DB::Chunk chunk) @@ -100,45 +100,24 @@ void JSONCompactEachRowRowOutputFormat::consumeTotals(DB::Chunk chunk) void registerOutputFormatJSONCompactEachRow(FormatFactory & factory) { - factory.registerOutputFormat("JSONCompactEachRow", []( - WriteBuffer & buf, - const Block & sample, - const RowOutputFormatParams & params, - const FormatSettings & format_settings) + for (bool yield_strings : {false, true}) { - return std::make_shared(buf, sample, params, format_settings, false, false); - }); - factory.markOutputFormatSupportsParallelFormatting("JSONCompactEachRow"); + auto register_func = [&](const String & format_name, bool with_names, bool with_types) + { + factory.registerOutputFormat(format_name, [yield_strings, with_names, with_types]( + WriteBuffer & buf, + const Block & sample, + const RowOutputFormatParams & params, + const FormatSettings & format_settings) + { + return std::make_shared(buf, sample, params, format_settings, with_names, with_types, yield_strings); + }); - factory.registerOutputFormat("JSONCompactEachRowWithNamesAndTypes", []( - WriteBuffer &buf, - const Block &sample, - const RowOutputFormatParams & params, - const FormatSettings &format_settings) - { - return std::make_shared(buf, sample, params, format_settings, true, false); - }); - factory.markOutputFormatSupportsParallelFormatting("JSONCompactEachRowWithNamesAndTypes"); + factory.markOutputFormatSupportsParallelFormatting(format_name); + }; - factory.registerOutputFormat("JSONCompactStringsEachRow", []( - WriteBuffer & buf, - const Block & sample, - const RowOutputFormatParams & params, - const FormatSettings & format_settings) - { - return std::make_shared(buf, sample, params, format_settings, false, true); - }); - factory.markOutputFormatSupportsParallelFormatting("JSONCompactStringsEachRow"); - - factory.registerOutputFormat("JSONCompactStringsEachRowWithNamesAndTypes", []( - WriteBuffer &buf, - const Block &sample, - const RowOutputFormatParams & params, - const FormatSettings &format_settings) - { - return std::make_shared(buf, sample, params, format_settings, true, true); - }); - factory.markOutputFormatSupportsParallelFormatting("JSONCompactStringsEachRowWithNamesAndTypes"); + registerWithNamesAndTypes(yield_strings ? "JSONCompactStringsEachRow" : "JSONCompactEachRow", register_func); + } } diff --git a/src/Processors/Formats/Impl/JSONCompactEachRowRowOutputFormat.h b/src/Processors/Formats/Impl/JSONCompactEachRowRowOutputFormat.h index 792eb906f4b..aa12ba7e809 100644 --- a/src/Processors/Formats/Impl/JSONCompactEachRowRowOutputFormat.h +++ b/src/Processors/Formats/Impl/JSONCompactEachRowRowOutputFormat.h @@ -21,15 +21,14 @@ public: const RowOutputFormatParams & params_, const FormatSettings & settings_, bool with_names_, + bool with_types_, bool yield_strings_); String getName() const override { return "JSONCompactEachRowRowOutputFormat"; } void doWritePrefix() override; - void writeBeforeTotals() override {} void writeTotals(const Columns & columns, size_t row_num) override; - void writeAfterTotals() override {} void writeField(const IColumn & column, const ISerialization & serialization, size_t row_num) override; void writeFieldDelimiter() override; @@ -42,11 +41,11 @@ protected: void consumeExtremes(Chunk) override {} private: + void writeLine(const std::vector & values); + FormatSettings settings; - - NamesAndTypes fields; - bool with_names; + bool with_types; bool yield_strings; }; } diff --git a/src/Processors/Formats/Impl/JSONEachRowRowInputFormat.cpp b/src/Processors/Formats/Impl/JSONEachRowRowInputFormat.cpp index d04ba2a49e4..28481313974 100644 --- a/src/Processors/Formats/Impl/JSONEachRowRowInputFormat.cpp +++ b/src/Processors/Formats/Impl/JSONEachRowRowInputFormat.cpp @@ -136,37 +136,10 @@ void JSONEachRowRowInputFormat::readField(size_t index, MutableColumns & columns if (seen_columns[index]) throw Exception("Duplicate field found while parsing JSONEachRow format: " + columnName(index), ErrorCodes::INCORRECT_DATA); - try - { - seen_columns[index] = read_columns[index] = true; - const auto & type = getPort().getHeader().getByPosition(index).type; - const auto & serialization = serializations[index]; - - if (yield_strings) - { - String str; - readJSONString(str, *in); - - ReadBufferFromString buf(str); - - if (format_settings.null_as_default && !type->isNullable()) - read_columns[index] = SerializationNullable::deserializeWholeTextImpl(*columns[index], buf, format_settings, serialization); - else - serialization->deserializeWholeText(*columns[index], buf, format_settings); - } - else - { - if (format_settings.null_as_default && !type->isNullable()) - read_columns[index] = SerializationNullable::deserializeTextJSONImpl(*columns[index], *in, format_settings, serialization); - else - serialization->deserializeTextJSON(*columns[index], *in, format_settings); - } - } - catch (Exception & e) - { - e.addMessage("(while reading the value of key " + columnName(index) + ")"); - throw; - } + seen_columns[index] = true; + const auto & type = getPort().getHeader().getByPosition(index).type; + const auto & serialization = serializations[index]; + read_columns[index] = readFieldImpl(*in, *columns[index], type, serialization, columnName(index), format_settings, yield_strings); } inline bool JSONEachRowRowInputFormat::advanceToNextKey(size_t key_index) @@ -282,8 +255,13 @@ bool JSONEachRowRowInputFormat::readRow(MutableColumns & columns, RowReadExtensi if (!seen_columns[i]) header.getByPosition(i).type->insertDefaultInto(*columns[i]); - /// return info about defaults set - ext.read_columns = read_columns; + /// Return info about defaults set. + /// If defaults_for_omitted_fields is set to 0, we should just leave already inserted defaults. + if (format_settings.defaults_for_omitted_fields) + ext.read_columns = read_columns; + else + ext.read_columns.assign(read_columns.size(), true); + return true; } @@ -355,8 +333,8 @@ void registerInputFormatJSONEachRow(FormatFactory & factory) void registerFileSegmentationEngineJSONEachRow(FormatFactory & factory) { - factory.registerFileSegmentationEngine("JSONEachRow", &fileSegmentationEngineJSONEachRowImpl); - factory.registerFileSegmentationEngine("JSONStringsEachRow", &fileSegmentationEngineJSONEachRowImpl); + factory.registerFileSegmentationEngine("JSONEachRow", &fileSegmentationEngineJSONEachRow); + factory.registerFileSegmentationEngine("JSONStringsEachRow", &fileSegmentationEngineJSONEachRow); } void registerNonTrivialPrefixAndSuffixCheckerJSONEachRow(FormatFactory & factory) diff --git a/src/Processors/Formats/Impl/MsgPackRowInputFormat.h b/src/Processors/Formats/Impl/MsgPackRowInputFormat.h index 1d790b4485b..fa5c2e74584 100644 --- a/src/Processors/Formats/Impl/MsgPackRowInputFormat.h +++ b/src/Processors/Formats/Impl/MsgPackRowInputFormat.h @@ -1,10 +1,7 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -# include "config_core.h" -#endif - +#include "config_formats.h" +#include "config_core.h" #if USE_MSGPACK diff --git a/src/Processors/Formats/Impl/MsgPackRowOutputFormat.h b/src/Processors/Formats/Impl/MsgPackRowOutputFormat.h index 9c66bb9d207..2766eb144e4 100644 --- a/src/Processors/Formats/Impl/MsgPackRowOutputFormat.h +++ b/src/Processors/Formats/Impl/MsgPackRowOutputFormat.h @@ -1,9 +1,7 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -# include "config_core.h" -#endif +#include "config_formats.h" +#include "config_core.h" #if USE_MSGPACK diff --git a/src/Processors/Formats/Impl/ORCBlockInputFormat.h b/src/Processors/Formats/Impl/ORCBlockInputFormat.h index 60ce963a6a1..254d0554cb2 100644 --- a/src/Processors/Formats/Impl/ORCBlockInputFormat.h +++ b/src/Processors/Formats/Impl/ORCBlockInputFormat.h @@ -1,7 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_ORC #include diff --git a/src/Processors/Formats/Impl/ORCBlockOutputFormat.h b/src/Processors/Formats/Impl/ORCBlockOutputFormat.h index 557bf6cc07a..c131d724450 100644 --- a/src/Processors/Formats/Impl/ORCBlockOutputFormat.h +++ b/src/Processors/Formats/Impl/ORCBlockOutputFormat.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_formats.h" -#endif #if USE_ORC #include diff --git a/src/Processors/Formats/Impl/ParquetBlockInputFormat.h b/src/Processors/Formats/Impl/ParquetBlockInputFormat.h index a38db0b3a02..bae380f2c80 100644 --- a/src/Processors/Formats/Impl/ParquetBlockInputFormat.h +++ b/src/Processors/Formats/Impl/ParquetBlockInputFormat.h @@ -1,7 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_PARQUET #include diff --git a/src/Processors/Formats/Impl/ParquetBlockOutputFormat.h b/src/Processors/Formats/Impl/ParquetBlockOutputFormat.h index ba82000e463..80d11b540b1 100644 --- a/src/Processors/Formats/Impl/ParquetBlockOutputFormat.h +++ b/src/Processors/Formats/Impl/ParquetBlockOutputFormat.h @@ -1,7 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_PARQUET # include diff --git a/src/Processors/Formats/Impl/ProtobufRowInputFormat.h b/src/Processors/Formats/Impl/ProtobufRowInputFormat.h index b2eabd4f37c..553a2dfd7f0 100644 --- a/src/Processors/Formats/Impl/ProtobufRowInputFormat.h +++ b/src/Processors/Formats/Impl/ProtobufRowInputFormat.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_PROTOBUF # include diff --git a/src/Processors/Formats/Impl/ProtobufRowOutputFormat.h b/src/Processors/Formats/Impl/ProtobufRowOutputFormat.h index 54324490a3b..5323aa56323 100644 --- a/src/Processors/Formats/Impl/ProtobufRowOutputFormat.h +++ b/src/Processors/Formats/Impl/ProtobufRowOutputFormat.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_formats.h" -#endif +#include "config_formats.h" #if USE_PROTOBUF # include diff --git a/src/Processors/Formats/Impl/RegexpRowInputFormat.cpp b/src/Processors/Formats/Impl/RegexpRowInputFormat.cpp index 8cb0fce609e..62c0eaa457e 100644 --- a/src/Processors/Formats/Impl/RegexpRowInputFormat.cpp +++ b/src/Processors/Formats/Impl/RegexpRowInputFormat.cpp @@ -60,7 +60,7 @@ RegexpRowInputFormat::ColumnFormat RegexpRowInputFormat::stringToFormat(const St bool RegexpRowInputFormat::readField(size_t index, MutableColumns & columns) { const auto & type = getPort().getHeader().getByPosition(index).type; - bool parse_as_nullable = format_settings.null_as_default && !type->isNullable(); + bool parse_as_nullable = format_settings.null_as_default && !type->isNullable() && !type->isLowCardinalityNullable(); bool read = true; ReadBuffer field_buf(const_cast(matched_fields[index].data()), matched_fields[index].size(), 0); try @@ -94,9 +94,9 @@ bool RegexpRowInputFormat::readField(size_t index, MutableColumns & columns) break; case ColumnFormat::Raw: if (parse_as_nullable) - read = SerializationNullable::deserializeWholeTextImpl(*columns[index], field_buf, format_settings, serialization); + read = SerializationNullable::deserializeTextRawImpl(*columns[index], field_buf, format_settings, serialization); else - serialization->deserializeWholeText(*columns[index], field_buf, format_settings); + serialization->deserializeTextRaw(*columns[index], field_buf, format_settings); break; default: break; diff --git a/src/Processors/Formats/Impl/TSKVRowInputFormat.cpp b/src/Processors/Formats/Impl/TSKVRowInputFormat.cpp index 331d6e435d1..606c67aa0d1 100644 --- a/src/Processors/Formats/Impl/TSKVRowInputFormat.cpp +++ b/src/Processors/Formats/Impl/TSKVRowInputFormat.cpp @@ -143,7 +143,7 @@ bool TSKVRowInputFormat::readRow(MutableColumns & columns, RowReadExtension & ex seen_columns[index] = read_columns[index] = true; const auto & type = getPort().getHeader().getByPosition(index).type; const auto & serialization = serializations[index]; - if (format_settings.null_as_default && !type->isNullable()) + if (format_settings.null_as_default && !type->isNullable() && !type->isLowCardinalityNullable()) read_columns[index] = SerializationNullable::deserializeTextEscapedImpl(*columns[index], *in, format_settings, serialization); else serialization->deserializeTextEscaped(*columns[index], *in, format_settings); diff --git a/src/Processors/Formats/Impl/TSKVRowOutputFormat.cpp b/src/Processors/Formats/Impl/TSKVRowOutputFormat.cpp index 6161303d23a..14dec8420a8 100644 --- a/src/Processors/Formats/Impl/TSKVRowOutputFormat.cpp +++ b/src/Processors/Formats/Impl/TSKVRowOutputFormat.cpp @@ -8,7 +8,7 @@ namespace DB { TSKVRowOutputFormat::TSKVRowOutputFormat(WriteBuffer & out_, const Block & header, const RowOutputFormatParams & params_, const FormatSettings & format_settings_) - : TabSeparatedRowOutputFormat(out_, header, false, false, params_, format_settings_) + : TabSeparatedRowOutputFormat(out_, header, false, false, false, params_, format_settings_) { const auto & sample = getPort(PortKind::Main).getHeader(); NamesAndTypesList columns(sample.getNamesAndTypesList()); diff --git a/src/Processors/Formats/Impl/TabSeparatedRawRowInputFormat.h b/src/Processors/Formats/Impl/TabSeparatedRawRowInputFormat.h deleted file mode 100644 index 3e12388bede..00000000000 --- a/src/Processors/Formats/Impl/TabSeparatedRawRowInputFormat.h +++ /dev/null @@ -1,58 +0,0 @@ -#pragma once - -#include -#include -#include -#include - - -namespace DB -{ - -/** A stream to input data in tsv format, but without escaping individual values. - * It only supports columns without '\n' or '\t' - */ -class TabSeparatedRawRowInputFormat : public TabSeparatedRowInputFormat -{ -public: - /** with_names - the first line is the header with the names of the columns - * with_types - on the next line header with type names - */ - TabSeparatedRawRowInputFormat( - const Block & header_, - ReadBuffer & in_, - const Params & params_, - bool with_names_, - bool with_types_, - const FormatSettings & format_settings_) - : TabSeparatedRowInputFormat(header_, in_, params_, with_names_, with_types_, format_settings_) - { - } - - String getName() const override { return "TabSeparatedRawRowInputFormat"; } - - bool readField(IColumn & column, const DataTypePtr &, const SerializationPtr & serialization, bool) override - { - String tmp; - - while (!in->eof()) - { - char * pos = find_first_symbols<'\n', '\t'>(in->position(), in->buffer().end()); - - tmp.append(in->position(), pos - in->position()); - in->position() = pos; - - if (pos == in->buffer().end()) - in->next(); - else - break; - } - - ReadBufferFromString cell(tmp); - serialization->deserializeWholeText(column, cell, format_settings); - - return true; - } -}; - -} diff --git a/src/Processors/Formats/Impl/TabSeparatedRawRowOutputFormat.h b/src/Processors/Formats/Impl/TabSeparatedRawRowOutputFormat.h deleted file mode 100644 index dc9312e53bc..00000000000 --- a/src/Processors/Formats/Impl/TabSeparatedRawRowOutputFormat.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include -#include - - -namespace DB -{ - -/** A stream for outputting data in tsv format, but without escaping individual values. - * (That is, the output is irreversible.) - */ -class TabSeparatedRawRowOutputFormat : public TabSeparatedRowOutputFormat -{ -public: - TabSeparatedRawRowOutputFormat( - WriteBuffer & out_, - const Block & header_, - bool with_names_, - bool with_types_, - const RowOutputFormatParams & params_, - const FormatSettings & format_settings_) - : TabSeparatedRowOutputFormat(out_, header_, with_names_, with_types_, params_, format_settings_) - { - } - - String getName() const override { return "TabSeparatedRawRowOutputFormat"; } - - void writeField(const IColumn & column, const ISerialization & serialization, size_t row_num) override - { - serialization.serializeText(column, row_num, out, format_settings); - } -}; - -} diff --git a/src/Processors/Formats/Impl/TabSeparatedRowInputFormat.cpp b/src/Processors/Formats/Impl/TabSeparatedRowInputFormat.cpp index c1cf0a904ea..1e6d238b202 100644 --- a/src/Processors/Formats/Impl/TabSeparatedRowInputFormat.cpp +++ b/src/Processors/Formats/Impl/TabSeparatedRowInputFormat.cpp @@ -1,13 +1,11 @@ #include -#include -#include #include +#include #include -#include #include #include -#include +#include #include #include @@ -20,19 +18,6 @@ namespace ErrorCodes extern const int LOGICAL_ERROR; } - -static void skipTSVRow(ReadBuffer & in, const size_t num_columns) -{ - NullOutput null_sink; - - for (size_t i = 0; i < num_columns; ++i) - { - readEscapedStringInto(null_sink, in); - assertChar(i == num_columns - 1 ? '\n' : '\t', in); - } -} - - /** Check for a common error case - usage of Windows line feed. */ static void checkForCarriageReturn(ReadBuffer & in) @@ -45,188 +30,73 @@ static void checkForCarriageReturn(ReadBuffer & in) ErrorCodes::INCORRECT_DATA); } - -TabSeparatedRowInputFormat::TabSeparatedRowInputFormat(const Block & header_, ReadBuffer & in_, const Params & params_, - bool with_names_, bool with_types_, const FormatSettings & format_settings_) - : RowInputFormatWithDiagnosticInfo(header_, in_, params_), with_names(with_names_), with_types(with_types_), format_settings(format_settings_) +TabSeparatedRowInputFormat::TabSeparatedRowInputFormat( + const Block & header_, + ReadBuffer & in_, + const Params & params_, + bool with_names_, + bool with_types_, + bool is_raw_, + const FormatSettings & format_settings_) + : RowInputFormatWithNamesAndTypes(header_, in_, params_, with_names_, with_types_, format_settings_), is_raw(is_raw_) { - const auto & sample = getPort().getHeader(); - size_t num_columns = sample.columns(); - - data_types.resize(num_columns); - column_indexes_by_names.reserve(num_columns); - - for (size_t i = 0; i < num_columns; ++i) - { - const auto & column_info = sample.getByPosition(i); - - data_types[i] = column_info.type; - column_indexes_by_names.emplace(column_info.name, i); - } - - column_mapping->column_indexes_for_input_fields.reserve(num_columns); - column_mapping->read_columns.assign(num_columns, false); } - -void TabSeparatedRowInputFormat::setupAllColumnsByTableSchema() +void TabSeparatedRowInputFormat::skipFieldDelimiter() { - const auto & header = getPort().getHeader(); - column_mapping->read_columns.assign(header.columns(), true); - column_mapping->column_indexes_for_input_fields.resize(header.columns()); - - for (size_t i = 0; i < column_mapping->column_indexes_for_input_fields.size(); ++i) - column_mapping->column_indexes_for_input_fields[i] = i; + assertChar('\t', *in); } - -void TabSeparatedRowInputFormat::addInputColumn(const String & column_name) -{ - const auto column_it = column_indexes_by_names.find(column_name); - if (column_it == column_indexes_by_names.end()) - { - if (format_settings.skip_unknown_fields) - { - column_mapping->column_indexes_for_input_fields.push_back(std::nullopt); - return; - } - - throw Exception( - "Unknown field found in TSV header: '" + column_name + "' " + - "at position " + std::to_string(column_mapping->column_indexes_for_input_fields.size()) + - "\nSet the 'input_format_skip_unknown_fields' parameter explicitly to ignore and proceed", - ErrorCodes::INCORRECT_DATA - ); - } - - const auto column_index = column_it->second; - - if (column_mapping->read_columns[column_index]) - throw Exception("Duplicate field found while parsing TSV header: " + column_name, ErrorCodes::INCORRECT_DATA); - - column_mapping->read_columns[column_index] = true; - column_mapping->column_indexes_for_input_fields.emplace_back(column_index); -} - - -void TabSeparatedRowInputFormat::fillUnreadColumnsWithDefaults(MutableColumns & columns, RowReadExtension & row_read_extension) -{ - /// It is safe to memorize this on the first run - the format guarantees this does not change - if (unlikely(row_num == 1)) - { - columns_to_fill_with_default_values.clear(); - for (size_t index = 0; index < column_mapping->read_columns.size(); ++index) - if (column_mapping->read_columns[index] == 0) - columns_to_fill_with_default_values.push_back(index); - } - - for (const auto column_index : columns_to_fill_with_default_values) - { - data_types[column_index]->insertDefaultInto(*columns[column_index]); - row_read_extension.read_columns[column_index] = false; - } -} - - -void TabSeparatedRowInputFormat::readPrefix() -{ - if (with_names || with_types || data_types.at(0)->textCanContainOnlyValidUTF8()) - { - /// In this format, we assume that column name or type cannot contain BOM, - /// so, if format has header, - /// then BOM at beginning of stream cannot be confused with name or type of field, and it is safe to skip it. - skipBOMIfExists(*in); - } - - /// This is a bit of abstraction leakage, but we have almost the same code in other places. - /// Thus, we check if this InputFormat is working with the "real" beginning of the data in case of parallel parsing. - if (with_names && getCurrentUnitNumber() == 0) - { - if (format_settings.with_names_use_header) - { - String column_name; - for (;;) - { - readEscapedString(column_name, *in); - if (!checkChar('\t', *in)) - { - /// Check last column for \r before adding it, otherwise an error will be: - /// "Unknown field found in TSV header" - checkForCarriageReturn(*in); - addInputColumn(column_name); - break; - } - else - addInputColumn(column_name); - } - - - if (!in->eof()) - { - assertChar('\n', *in); - } - } - else - { - setupAllColumnsByTableSchema(); - skipTSVRow(*in, column_mapping->column_indexes_for_input_fields.size()); - } - } - else if (!column_mapping->is_set) - setupAllColumnsByTableSchema(); - - if (with_types) - { - skipTSVRow(*in, column_mapping->column_indexes_for_input_fields.size()); - } -} - - -bool TabSeparatedRowInputFormat::readRow(MutableColumns & columns, RowReadExtension & ext) +void TabSeparatedRowInputFormat::skipRowEndDelimiter() { if (in->eof()) - return false; + return; - updateDiagnosticInfo(); + if (unlikely(row_num <= 1)) + checkForCarriageReturn(*in); - ext.read_columns.assign(column_mapping->read_columns.size(), true); - for (size_t file_column = 0; file_column < column_mapping->column_indexes_for_input_fields.size(); ++file_column) - { - const auto & column_index = column_mapping->column_indexes_for_input_fields[file_column]; - const bool is_last_file_column = file_column + 1 == column_mapping->column_indexes_for_input_fields.size(); - if (column_index) - { - const auto & type = data_types[*column_index]; - ext.read_columns[*column_index] = readField(*columns[*column_index], type, serializations[*column_index], is_last_file_column); - } - else - { - NullOutput null_sink; - readEscapedStringInto(null_sink, *in); - } - - /// skip separators - if (file_column + 1 < column_mapping->column_indexes_for_input_fields.size()) - { - assertChar('\t', *in); - } - else if (!in->eof()) - { - if (unlikely(row_num == 1)) - checkForCarriageReturn(*in); - - assertChar('\n', *in); - } - } - - fillUnreadColumnsWithDefaults(columns, ext); - - return true; + assertChar('\n', *in); } +String TabSeparatedRowInputFormat::readFieldIntoString() +{ + String field; + readEscapedString(field, *in); + return field; +} + +void TabSeparatedRowInputFormat::skipField() +{ + NullOutput null_sink; + readEscapedStringInto(null_sink, *in); +} + +void TabSeparatedRowInputFormat::skipHeaderRow() +{ + do + { + skipField(); + } + while (checkChar('\t', *in)); + + skipRowEndDelimiter(); +} + +std::vector TabSeparatedRowInputFormat::readHeaderRow() +{ + std::vector fields; + do + { + fields.push_back(readFieldIntoString()); + } + while (checkChar('\t', *in)); + + skipRowEndDelimiter(); + return fields; +} bool TabSeparatedRowInputFormat::readField(IColumn & column, const DataTypePtr & type, - const SerializationPtr & serialization, bool is_last_file_column) + const SerializationPtr & serialization, bool is_last_file_column, const String & /*column_name*/) { const bool at_delimiter = !is_last_file_column && !in->eof() && *in->position() == '\t'; const bool at_last_column_line_end = is_last_file_column && (in->eof() || *in->position() == '\n'); @@ -236,137 +106,110 @@ bool TabSeparatedRowInputFormat::readField(IColumn & column, const DataTypePtr & column.insertDefault(); return false; } - else if (format_settings.null_as_default && !type->isNullable()) + + bool as_nullable = format_settings.null_as_default && !type->isNullable() && !type->isLowCardinalityNullable(); + + if (is_raw) + { + if (as_nullable) + return SerializationNullable::deserializeTextRawImpl(column, *in, format_settings, serialization); + + serialization->deserializeTextRaw(column, *in, format_settings); + return true; + } + + if (as_nullable) return SerializationNullable::deserializeTextEscapedImpl(column, *in, format_settings, serialization); serialization->deserializeTextEscaped(column, *in, format_settings); return true; } -bool TabSeparatedRowInputFormat::parseRowAndPrintDiagnosticInfo(MutableColumns & columns, WriteBuffer & out) +bool TabSeparatedRowInputFormat::parseFieldDelimiterWithDiagnosticInfo(WriteBuffer & out) { - for (size_t file_column = 0; file_column < column_mapping->column_indexes_for_input_fields.size(); ++file_column) + try { - if (file_column == 0 && in->eof()) + assertChar('\t', *in); + } + catch (const DB::Exception &) + { + if (*in->position() == '\n') { - out << "\n"; - return false; + out << "ERROR: Line feed found where tab is expected." + " It's like your file has less columns than expected.\n" + "And if your file has the right number of columns, " + "maybe it has an unescaped backslash in value before tab, which causes the tab to be escaped.\n"; } - - if (column_mapping->column_indexes_for_input_fields[file_column].has_value()) + else if (*in->position() == '\r') { - const auto & header = getPort().getHeader(); - size_t col_idx = column_mapping->column_indexes_for_input_fields[file_column].value(); - if (!deserializeFieldAndPrintDiagnosticInfo(header.getByPosition(col_idx).name, data_types[col_idx], *columns[col_idx], - out, file_column)) - return false; + out << "ERROR: Carriage return found where tab is expected.\n"; } else { - static const String skipped_column_str = ""; - static const DataTypePtr skipped_column_type = std::make_shared(); - static const MutableColumnPtr skipped_column = skipped_column_type->createColumn(); - if (!deserializeFieldAndPrintDiagnosticInfo(skipped_column_str, skipped_column_type, *skipped_column, out, file_column)) - return false; - } - - /// Delimiters - if (file_column + 1 == column_mapping->column_indexes_for_input_fields.size()) - { - if (!in->eof()) - { - try - { - assertChar('\n', *in); - } - catch (const DB::Exception &) - { - if (*in->position() == '\t') - { - out << "ERROR: Tab found where line feed is expected." - " It's like your file has more columns than expected.\n" - "And if your file has the right number of columns, maybe it has an unescaped tab in a value.\n"; - } - else if (*in->position() == '\r') - { - out << "ERROR: Carriage return found where line feed is expected." - " It's like your file has DOS/Windows style line separators, that is illegal in TabSeparated format.\n"; - } - else - { - out << "ERROR: There is no line feed. "; - verbosePrintString(in->position(), in->position() + 1, out); - out << " found instead.\n"; - } - return false; - } - } - } - else - { - try - { - assertChar('\t', *in); - } - catch (const DB::Exception &) - { - if (*in->position() == '\n') - { - out << "ERROR: Line feed found where tab is expected." - " It's like your file has less columns than expected.\n" - "And if your file has the right number of columns, " - "maybe it has an unescaped backslash in value before tab, which causes the tab to be escaped.\n"; - } - else if (*in->position() == '\r') - { - out << "ERROR: Carriage return found where tab is expected.\n"; - } - else - { - out << "ERROR: There is no tab. "; - verbosePrintString(in->position(), in->position() + 1, out); - out << " found instead.\n"; - } - return false; - } + out << "ERROR: There is no tab. "; + verbosePrintString(in->position(), in->position() + 1, out); + out << " found instead.\n"; } + return false; } return true; } -void TabSeparatedRowInputFormat::tryDeserializeField(const DataTypePtr & type, IColumn & column, size_t file_column) +bool TabSeparatedRowInputFormat::parseRowEndWithDiagnosticInfo(WriteBuffer & out) { - const auto & index = column_mapping->column_indexes_for_input_fields[file_column]; - if (index) - { - bool can_be_parsed_as_null = removeLowCardinality(type)->isNullable(); + if (in->eof()) + return true; - // check null value for type is not nullable. don't cross buffer bound for simplicity, so maybe missing some case - if (!can_be_parsed_as_null && !in->eof()) + try + { + assertChar('\n', *in); + } + catch (const DB::Exception &) + { + if (*in->position() == '\t') { - if (*in->position() == '\\' && in->available() >= 2) + out << "ERROR: Tab found where line feed is expected." + " It's like your file has more columns than expected.\n" + "And if your file has the right number of columns, maybe it has an unescaped tab in a value.\n"; + } + else if (*in->position() == '\r') + { + out << "ERROR: Carriage return found where line feed is expected." + " It's like your file has DOS/Windows style line separators, that is illegal in TabSeparated format.\n"; + } + else + { + out << "ERROR: There is no line feed. "; + verbosePrintString(in->position(), in->position() + 1, out); + out << " found instead.\n"; + } + return false; + } + + return true; +} + +void TabSeparatedRowInputFormat::checkNullValueForNonNullable(DataTypePtr type) +{ + bool can_be_parsed_as_null = type->isNullable() || type->isLowCardinalityNullable() || format_settings.null_as_default; + + // check null value for type is not nullable. don't cross buffer bound for simplicity, so maybe missing some case + if (!can_be_parsed_as_null && !in->eof()) + { + if (*in->position() == '\\' && in->available() >= 2) + { + ++in->position(); + if (*in->position() == 'N') { ++in->position(); - if (*in->position() == 'N') - { - ++in->position(); - throw Exception(ErrorCodes::INCORRECT_DATA, "Unexpected NULL value of not Nullable type {}", type->getName()); - } - else - { - --in->position(); - } + throw Exception(ErrorCodes::INCORRECT_DATA, "Unexpected NULL value of not Nullable type {}", type->getName()); + } + else + { + --in->position(); } } - - const bool is_last_file_column = file_column + 1 == column_mapping->column_indexes_for_input_fields.size(); - readField(column, type, serializations[*index], is_last_file_column); - } - else - { - NullOutput null_sink; - readEscapedStringInto(null_sink, *in); } } @@ -375,67 +218,28 @@ void TabSeparatedRowInputFormat::syncAfterError() skipToUnescapedNextLineOrEOF(*in); } -void TabSeparatedRowInputFormat::resetParser() -{ - RowInputFormatWithDiagnosticInfo::resetParser(); - const auto & sample = getPort().getHeader(); - column_mapping->read_columns.assign(sample.columns(), false); - column_mapping->column_indexes_for_input_fields.clear(); - columns_to_fill_with_default_values.clear(); -} - void registerInputFormatTabSeparated(FormatFactory & factory) { - for (const auto * name : {"TabSeparated", "TSV"}) + for (bool is_raw : {false, true}) { - factory.registerInputFormat(name, []( - ReadBuffer & buf, - const Block & sample, - IRowInputFormat::Params params, - const FormatSettings & settings) + auto register_func = [&](const String & format_name, bool with_names, bool with_types) { - return std::make_shared(sample, buf, params, false, false, settings); - }); - } + factory.registerInputFormat(format_name, [with_names, with_types, is_raw]( + ReadBuffer & buf, + const Block & sample, + IRowInputFormat::Params params, + const FormatSettings & settings) + { + return std::make_shared(sample, buf, std::move(params), with_names, with_types, is_raw, settings); + }); + }; - for (const auto * name : {"TabSeparatedRaw", "TSVRaw"}) - { - factory.registerInputFormat(name, []( - ReadBuffer & buf, - const Block & sample, - IRowInputFormat::Params params, - const FormatSettings & settings) - { - return std::make_shared(sample, buf, params, false, false, settings); - }); - } - - for (const auto * name : {"TabSeparatedWithNames", "TSVWithNames"}) - { - factory.registerInputFormat(name, []( - ReadBuffer & buf, - const Block & sample, - IRowInputFormat::Params params, - const FormatSettings & settings) - { - return std::make_shared(sample, buf, params, true, false, settings); - }); - } - - for (const auto * name : {"TabSeparatedWithNamesAndTypes", "TSVWithNamesAndTypes"}) - { - factory.registerInputFormat(name, []( - ReadBuffer & buf, - const Block & sample, - IRowInputFormat::Params params, - const FormatSettings & settings) - { - return std::make_shared(sample, buf, params, true, true, settings); - }); + registerWithNamesAndTypes(is_raw ? "TabSeparatedRaw" : "TabSeparated", register_func); + registerWithNamesAndTypes(is_raw ? "TSVRaw" : "TSV", register_func); } } -static std::pair fileSegmentationEngineTabSeparatedImpl(ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size) +static std::pair fileSegmentationEngineTabSeparatedImpl(ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size, bool is_raw, size_t min_rows) { bool need_more_data = true; char * pos = in.position(); @@ -443,13 +247,18 @@ static std::pair fileSegmentationEngineTabSeparatedImpl(ReadBuffer while (loadAtPosition(in, memory, pos) && need_more_data) { - pos = find_first_symbols<'\\', '\r', '\n'>(pos, in.buffer().end()); + if (is_raw) + pos = find_first_symbols<'\r', '\n'>(pos, in.buffer().end()); + else + pos = find_first_symbols<'\\', '\r', '\n'>(pos, in.buffer().end()); if (pos > in.buffer().end()) - throw Exception("Position in buffer is out of bounds. There must be a bug.", ErrorCodes::LOGICAL_ERROR); - else if (pos == in.buffer().end()) + throw Exception("Position in buffer is out of bounds. There must be a bug.", ErrorCodes::LOGICAL_ERROR); + + if (pos == in.buffer().end()) continue; - else if (*pos == '\\') + + if (!is_raw && *pos == '\\') { ++pos; if (loadAtPosition(in, memory, pos)) @@ -460,7 +269,7 @@ static std::pair fileSegmentationEngineTabSeparatedImpl(ReadBuffer if (*pos == '\n') ++number_of_rows; - if (memory.size() + static_cast(pos - in.position()) >= min_chunk_size) + if ((memory.size() + static_cast(pos - in.position()) >= min_chunk_size) && number_of_rows >= min_rows) need_more_data = false; ++pos; } @@ -473,11 +282,29 @@ static std::pair fileSegmentationEngineTabSeparatedImpl(ReadBuffer void registerFileSegmentationEngineTabSeparated(FormatFactory & factory) { - // We can use the same segmentation engine for TSKV. - for (const auto & name : {"TabSeparated", "TSV", "TSKV", "TabSeparatedWithNames", "TSVWithNames"}) + for (bool is_raw : {false, true}) { - factory.registerFileSegmentationEngine(name, &fileSegmentationEngineTabSeparatedImpl); + auto register_func = [&](const String & format_name, bool with_names, bool with_types) + { + size_t min_rows = 1 + int(with_names) + int(with_types); + factory.registerFileSegmentationEngine(format_name, [is_raw, min_rows](ReadBuffer & in, DB::Memory<> & memory, size_t min_chunk_size) + { + return fileSegmentationEngineTabSeparatedImpl(in, memory, min_chunk_size, is_raw, min_rows); + }); + }; + + registerWithNamesAndTypes(is_raw ? "TSVRaw" : "TSV", register_func); + registerWithNamesAndTypes(is_raw ? "TabSeparatedRaw" : "TabSeparated", register_func); } + + // We can use the same segmentation engine for TSKV. + factory.registerFileSegmentationEngine("TSKV", []( + ReadBuffer & in, + DB::Memory<> & memory, + size_t min_chunk_size) + { + return fileSegmentationEngineTabSeparatedImpl(in, memory, min_chunk_size, false, 1); + }); } } diff --git a/src/Processors/Formats/Impl/TabSeparatedRowInputFormat.h b/src/Processors/Formats/Impl/TabSeparatedRowInputFormat.h index 8127b5ceba7..11a788bc900 100644 --- a/src/Processors/Formats/Impl/TabSeparatedRowInputFormat.h +++ b/src/Processors/Formats/Impl/TabSeparatedRowInputFormat.h @@ -2,7 +2,7 @@ #include #include -#include +#include namespace DB @@ -10,46 +10,43 @@ namespace DB /** A stream to input data in tsv format. */ -class TabSeparatedRowInputFormat : public RowInputFormatWithDiagnosticInfo +class TabSeparatedRowInputFormat : public RowInputFormatWithNamesAndTypes { public: /** with_names - the first line is the header with the names of the columns * with_types - on the next line header with type names */ TabSeparatedRowInputFormat(const Block & header_, ReadBuffer & in_, const Params & params_, - bool with_names_, bool with_types_, const FormatSettings & format_settings_); + bool with_names_, bool with_types_, bool is_raw, const FormatSettings & format_settings_); String getName() const override { return "TabSeparatedRowInputFormat"; } - bool readRow(MutableColumns & columns, RowReadExtension &) override; - void readPrefix() override; bool allowSyncAfterError() const override { return true; } void syncAfterError() override; - void resetParser() override; - -protected: - bool with_names; - bool with_types; - const FormatSettings format_settings; - - virtual bool readField(IColumn & column, const DataTypePtr & type, - const SerializationPtr & serialization, bool is_last_file_column); - private: - DataTypes data_types; + bool is_raw; - using IndexesMap = std::unordered_map; - IndexesMap column_indexes_by_names; + bool readField(IColumn & column, const DataTypePtr & type, + const SerializationPtr & serialization, bool is_last_file_column, const String & column_name) override; - std::vector columns_to_fill_with_default_values; + void skipField(size_t /*file_column*/) override { skipField(); } + void skipField(); + void skipHeaderRow(); + void skipNames() override { skipHeaderRow(); } + void skipTypes() override { skipHeaderRow(); } + void skipFieldDelimiter() override; + void skipRowEndDelimiter() override; - void addInputColumn(const String & column_name); - void setupAllColumnsByTableSchema(); - void fillUnreadColumnsWithDefaults(MutableColumns & columns, RowReadExtension & row_read_extension); + std::vector readHeaderRow(); + std::vector readNames() override { return readHeaderRow(); } + std::vector readTypes() override { return readHeaderRow(); } + String readFieldIntoString(); - bool parseRowAndPrintDiagnosticInfo(MutableColumns & columns, WriteBuffer & out) override; - void tryDeserializeField(const DataTypePtr & type, IColumn & column, size_t file_column) override; + void checkNullValueForNonNullable(DataTypePtr type) override; + + bool parseFieldDelimiterWithDiagnosticInfo(WriteBuffer & out) override; + bool parseRowEndWithDiagnosticInfo(WriteBuffer & out) override; bool isGarbageAfterField(size_t, ReadBuffer::Position pos) override { return *pos != '\n' && *pos != '\t'; } }; diff --git a/src/Processors/Formats/Impl/TabSeparatedRowOutputFormat.cpp b/src/Processors/Formats/Impl/TabSeparatedRowOutputFormat.cpp index 71d5bdba355..df0c19ad409 100644 --- a/src/Processors/Formats/Impl/TabSeparatedRowOutputFormat.cpp +++ b/src/Processors/Formats/Impl/TabSeparatedRowOutputFormat.cpp @@ -1,6 +1,6 @@ #include -#include #include +#include #include @@ -11,41 +11,43 @@ TabSeparatedRowOutputFormat::TabSeparatedRowOutputFormat( const Block & header_, bool with_names_, bool with_types_, + bool is_raw_, const RowOutputFormatParams & params_, const FormatSettings & format_settings_) - : IRowOutputFormat(header_, out_, params_), with_names(with_names_), with_types(with_types_), format_settings(format_settings_) + : IRowOutputFormat(header_, out_, params_), with_names(with_names_), with_types(with_types_), is_raw(is_raw_), format_settings(format_settings_) { } +void TabSeparatedRowOutputFormat::writeLine(const std::vector & values) +{ + for (size_t i = 0; i < values.size(); ++i) + { + writeEscapedString(values[i], out); + if (i + 1 == values.size()) + writeRowEndDelimiter(); + else + writeFieldDelimiter(); + } +} void TabSeparatedRowOutputFormat::doWritePrefix() { const auto & header = getPort(PortKind::Main).getHeader(); - size_t columns = header.columns(); if (with_names) - { - for (size_t i = 0; i < columns; ++i) - { - writeEscapedString(header.safeGetByPosition(i).name, out); - writeChar(i == columns - 1 ? '\n' : '\t', out); - } - } + writeLine(header.getNames()); if (with_types) - { - for (size_t i = 0; i < columns; ++i) - { - writeEscapedString(header.safeGetByPosition(i).type->getName(), out); - writeChar(i == columns - 1 ? '\n' : '\t', out); - } - } + writeLine(header.getDataTypeNames()); } void TabSeparatedRowOutputFormat::writeField(const IColumn & column, const ISerialization & serialization, size_t row_num) { - serialization.serializeTextEscaped(column, row_num, out, format_settings); + if (is_raw) + serialization.serializeTextRaw(column, row_num, out, format_settings); + else + serialization.serializeTextEscaped(column, row_num, out, format_settings); } @@ -75,56 +77,24 @@ void TabSeparatedRowOutputFormat::writeBeforeExtremes() void registerOutputFormatTabSeparated(FormatFactory & factory) { - for (const auto * name : {"TabSeparated", "TSV"}) + for (bool is_raw : {false, true}) { - factory.registerOutputFormat(name, []( - WriteBuffer & buf, - const Block & sample, - const RowOutputFormatParams & params, - const FormatSettings & settings) + auto register_func = [&](const String & format_name, bool with_names, bool with_types) { - return std::make_shared(buf, sample, false, false, params, settings); - }); - factory.markOutputFormatSupportsParallelFormatting(name); - } + factory.registerOutputFormat(format_name, [is_raw, with_names, with_types]( + WriteBuffer & buf, + const Block & sample, + const RowOutputFormatParams & params, + const FormatSettings & settings) + { + return std::make_shared(buf, sample, with_names, with_types, is_raw, params, settings); + }); - for (const auto * name : {"TabSeparatedRaw", "TSVRaw"}) - { - factory.registerOutputFormat(name, []( - WriteBuffer & buf, - const Block & sample, - const RowOutputFormatParams & params, - const FormatSettings & settings) - { - return std::make_shared(buf, sample, false, false, params, settings); - }); - factory.markOutputFormatSupportsParallelFormatting(name); - } + factory.markOutputFormatSupportsParallelFormatting(format_name); + }; - for (const auto * name : {"TabSeparatedWithNames", "TSVWithNames"}) - { - factory.registerOutputFormat(name, []( - WriteBuffer & buf, - const Block & sample, - const RowOutputFormatParams & params, - const FormatSettings & settings) - { - return std::make_shared(buf, sample, true, false, params, settings); - }); - factory.markOutputFormatSupportsParallelFormatting(name); - } - - for (const auto * name : {"TabSeparatedWithNamesAndTypes", "TSVWithNamesAndTypes"}) - { - factory.registerOutputFormat(name, []( - WriteBuffer & buf, - const Block & sample, - const RowOutputFormatParams & params, - const FormatSettings & settings) - { - return std::make_shared(buf, sample, true, true, params, settings); - }); - factory.markOutputFormatSupportsParallelFormatting(name); + registerWithNamesAndTypes(is_raw ? "TSVRaw" : "TSV", register_func); + registerWithNamesAndTypes(is_raw ? "TabSeparatedRaw" : "TabSeparated", register_func); } } diff --git a/src/Processors/Formats/Impl/TabSeparatedRowOutputFormat.h b/src/Processors/Formats/Impl/TabSeparatedRowOutputFormat.h index e3190be70e8..7dcc6529f1c 100644 --- a/src/Processors/Formats/Impl/TabSeparatedRowOutputFormat.h +++ b/src/Processors/Formats/Impl/TabSeparatedRowOutputFormat.h @@ -23,6 +23,7 @@ public: const Block & header_, bool with_names_, bool with_types_, + bool is_raw_, const RowOutputFormatParams & params_, const FormatSettings & format_settings_); @@ -39,10 +40,13 @@ public: /// https://www.iana.org/assignments/media-types/text/tab-separated-values String getContentType() const override { return "text/tab-separated-values; charset=UTF-8"; } -protected: - +private: + void writeLine(const std::vector & values); bool with_names; bool with_types; + bool is_raw; + +protected: const FormatSettings format_settings; }; diff --git a/src/Processors/Formats/Impl/TemplateBlockOutputFormat.cpp b/src/Processors/Formats/Impl/TemplateBlockOutputFormat.cpp index ed98ab372b6..db5db4701a9 100644 --- a/src/Processors/Formats/Impl/TemplateBlockOutputFormat.cpp +++ b/src/Processors/Formats/Impl/TemplateBlockOutputFormat.cpp @@ -130,7 +130,7 @@ void TemplateBlockOutputFormat::serializeField(const IColumn & column, const ISe serialization.serializeTextXML(column, row_num, out, settings); break; case ColumnFormat::Raw: - serialization.serializeText(column, row_num, out, settings); + serialization.serializeTextRaw(column, row_num, out, settings); break; default: __builtin_unreachable(); diff --git a/src/Processors/Formats/Impl/TemplateRowInputFormat.cpp b/src/Processors/Formats/Impl/TemplateRowInputFormat.cpp index 021b2532b39..c096b62e967 100644 --- a/src/Processors/Formats/Impl/TemplateRowInputFormat.cpp +++ b/src/Processors/Formats/Impl/TemplateRowInputFormat.cpp @@ -45,8 +45,8 @@ TemplateRowInputFormat::TemplateRowInputFormat(const Block & header_, ReadBuffer } else { - if (format.formats[i] == ColumnFormat::Xml || format.formats[i] == ColumnFormat::Raw) - format.throwInvalidFormat("XML and Raw deserialization is not supported", i); + if (format.formats[i] == ColumnFormat::Xml) + format.throwInvalidFormat("XML deserialization is not supported", i); } } @@ -54,8 +54,8 @@ TemplateRowInputFormat::TemplateRowInputFormat(const Block & header_, ReadBuffer std::vector column_in_format(header_.columns(), false); for (size_t i = 0; i < row_format.columnsCount(); ++i) { - if (row_format.formats[i] == ColumnFormat::Xml || row_format.formats[i] == ColumnFormat::Raw) - row_format.throwInvalidFormat("XML and Raw deserialization is not supported", i); + if (row_format.formats[i] == ColumnFormat::Xml) + row_format.throwInvalidFormat("XML deserialization is not supported", i); if (row_format.format_idx_to_column_idx[i]) { @@ -194,7 +194,7 @@ bool TemplateRowInputFormat::deserializeField(const DataTypePtr & type, { ColumnFormat col_format = row_format.formats[file_column]; bool read = true; - bool parse_as_nullable = settings.null_as_default && !type->isNullable(); + bool parse_as_nullable = settings.null_as_default && !type->isNullable() && !type->isLowCardinalityNullable(); try { switch (col_format) @@ -226,6 +226,12 @@ bool TemplateRowInputFormat::deserializeField(const DataTypePtr & type, else serialization->deserializeTextJSON(column, buf, settings); break; + case ColumnFormat::Raw: + if (parse_as_nullable) + read = SerializationNullable::deserializeTextRawImpl(column, buf, settings, serialization); + else + serialization->deserializeTextRaw(column, buf, settings); + break; default: __builtin_unreachable(); } diff --git a/src/Processors/Formats/Impl/ValuesBlockInputFormat.cpp b/src/Processors/Formats/Impl/ValuesBlockInputFormat.cpp index 0f6a21055d0..5f471dc0151 100644 --- a/src/Processors/Formats/Impl/ValuesBlockInputFormat.cpp +++ b/src/Processors/Formats/Impl/ValuesBlockInputFormat.cpp @@ -32,13 +32,25 @@ namespace ErrorCodes } -ValuesBlockInputFormat::ValuesBlockInputFormat(ReadBuffer & in_, const Block & header_, const RowInputFormatParams & params_, - const FormatSettings & format_settings_) - : IInputFormat(header_, buf), buf(in_), params(params_), - format_settings(format_settings_), num_columns(header_.columns()), - parser_type_for_column(num_columns, ParserType::Streaming), - attempts_to_deduce_template(num_columns), attempts_to_deduce_template_cached(num_columns), - rows_parsed_using_template(num_columns), templates(num_columns), types(header_.getDataTypes()) +ValuesBlockInputFormat::ValuesBlockInputFormat( + ReadBuffer & in_, + const Block & header_, + const RowInputFormatParams & params_, + const FormatSettings & format_settings_) + : ValuesBlockInputFormat(std::make_unique(in_), header_, params_, format_settings_) +{ +} + +ValuesBlockInputFormat::ValuesBlockInputFormat( + std::unique_ptr buf_, + const Block & header_, + const RowInputFormatParams & params_, + const FormatSettings & format_settings_) + : IInputFormat(header_, *buf_), buf(std::move(buf_)), + params(params_), format_settings(format_settings_), num_columns(header_.columns()), + parser_type_for_column(num_columns, ParserType::Streaming), + attempts_to_deduce_template(num_columns), attempts_to_deduce_template_cached(num_columns), + rows_parsed_using_template(num_columns), templates(num_columns), types(header_.getDataTypes()) { serializations.resize(types.size()); for (size_t i = 0; i < types.size(); ++i) @@ -58,8 +70,8 @@ Chunk ValuesBlockInputFormat::generate() { try { - skipWhitespaceIfAny(buf); - if (buf.eof() || *buf.position() == ';') + skipWhitespaceIfAny(*buf); + if (buf->eof() || *buf->position() == ';') break; readRow(columns, rows_in_block); } @@ -99,12 +111,12 @@ Chunk ValuesBlockInputFormat::generate() void ValuesBlockInputFormat::readRow(MutableColumns & columns, size_t row_num) { - assertChar('(', buf); + assertChar('(', *buf); for (size_t column_idx = 0; column_idx < num_columns; ++column_idx) { - skipWhitespaceIfAny(buf); - PeekableReadBufferCheckpoint checkpoint{buf}; + skipWhitespaceIfAny(*buf); + PeekableReadBufferCheckpoint checkpoint{*buf}; bool read; /// Parse value using fast streaming parser for literals and slow SQL parser for expressions. @@ -123,9 +135,9 @@ void ValuesBlockInputFormat::readRow(MutableColumns & columns, size_t row_num) /// If read is true, value still may be missing. Bit mask for these values will be copied from ConstantExpressionTemplate later. } - skipWhitespaceIfAny(buf); - if (!buf.eof() && *buf.position() == ',') - ++buf.position(); + skipWhitespaceIfAny(*buf); + if (!buf->eof() && *buf->position() == ',') + ++buf->position(); ++total_rows; } @@ -134,7 +146,7 @@ bool ValuesBlockInputFormat::tryParseExpressionUsingTemplate(MutableColumnPtr & { /// Try to parse expression using template if one was successfully deduced while parsing the first row auto settings = context->getSettingsRef(); - if (templates[column_idx]->parseExpression(buf, format_settings, settings)) + if (templates[column_idx]->parseExpression(*buf, format_settings, settings)) { ++rows_parsed_using_template[column_idx]; return true; @@ -154,7 +166,7 @@ bool ValuesBlockInputFormat::tryParseExpressionUsingTemplate(MutableColumnPtr & } /// Do not use this template anymore templates[column_idx].reset(); - buf.rollbackToCheckpoint(); + buf->rollbackToCheckpoint(); /// It will deduce new template or fallback to slow SQL parser return parseExpression(*column, column_idx); @@ -168,14 +180,14 @@ bool ValuesBlockInputFormat::tryReadValue(IColumn & column, size_t column_idx) bool read = true; const auto & type = types[column_idx]; const auto & serialization = serializations[column_idx]; - if (format_settings.null_as_default && !type->isNullable()) - read = SerializationNullable::deserializeTextQuotedImpl(column, buf, format_settings, serialization); + if (format_settings.null_as_default && !type->isNullable() && !type->isLowCardinalityNullable()) + read = SerializationNullable::deserializeTextQuotedImpl(column, *buf, format_settings, serialization); else - serialization->deserializeTextQuoted(column, buf, format_settings); + serialization->deserializeTextQuoted(column, *buf, format_settings); rollback_on_exception = true; - skipWhitespaceIfAny(buf); + skipWhitespaceIfAny(*buf); assertDelimiterAfterValue(column_idx); return read; } @@ -190,7 +202,7 @@ bool ValuesBlockInputFormat::tryReadValue(IColumn & column, size_t column_idx) /// Switch to SQL parser and don't try to use streaming parser for complex expressions /// Note: Throwing exceptions for each expression may be very slow because of stacktraces - buf.rollbackToCheckpoint(); + buf->rollbackToCheckpoint(); return parseExpression(column, column_idx); } } @@ -284,11 +296,11 @@ bool ValuesBlockInputFormat::parseExpression(IColumn & column, size_t column_idx /// We need continuous memory containing the expression to use Lexer skipToNextRow(0, 1); - buf.makeContinuousMemoryFromCheckpointToPos(); - buf.rollbackToCheckpoint(); + buf->makeContinuousMemoryFromCheckpointToPos(); + buf->rollbackToCheckpoint(); Expected expected; - Tokens tokens(buf.position(), buf.buffer().end()); + Tokens tokens(buf->position(), buf->buffer().end()); IParser::Pos token_iterator(tokens, settings.max_parser_depth); ASTPtr ast; @@ -302,7 +314,7 @@ bool ValuesBlockInputFormat::parseExpression(IColumn & column, size_t column_idx if (!parsed) throw Exception("Cannot parse expression of type " + type.getName() + " here: " - + String(buf.position(), std::min(SHOW_CHARS_ON_SYNTAX_ERROR, buf.buffer().end() - buf.position())), + + String(buf->position(), std::min(SHOW_CHARS_ON_SYNTAX_ERROR, buf->buffer().end() - buf->position())), ErrorCodes::SYNTAX_ERROR); ++token_iterator; @@ -316,9 +328,9 @@ bool ValuesBlockInputFormat::parseExpression(IColumn & column, size_t column_idx try { const auto & serialization = serializations[column_idx]; - serialization->deserializeTextQuoted(column, buf, format_settings); + serialization->deserializeTextQuoted(column, *buf, format_settings); rollback_on_exception = true; - skipWhitespaceIfAny(buf); + skipWhitespaceIfAny(*buf); if (checkDelimiterAfterValue(column_idx)) ok = true; } @@ -366,8 +378,8 @@ bool ValuesBlockInputFormat::parseExpression(IColumn & column, size_t column_idx else ++attempts_to_deduce_template[column_idx]; - buf.rollbackToCheckpoint(); - if (templates[column_idx]->parseExpression(buf, format_settings, settings)) + buf->rollbackToCheckpoint(); + if (templates[column_idx]->parseExpression(*buf, format_settings, settings)) { ++rows_parsed_using_template[column_idx]; parser_type_for_column[column_idx] = ParserType::BatchTemplate; @@ -384,9 +396,9 @@ bool ValuesBlockInputFormat::parseExpression(IColumn & column, size_t column_idx std::rethrow_exception(exception); else { - buf.rollbackToCheckpoint(); - size_t len = const_cast(token_iterator->begin) - buf.position(); - throw Exception("Cannot deduce template of expression: " + std::string(buf.position(), len), ErrorCodes::SYNTAX_ERROR); + buf->rollbackToCheckpoint(); + size_t len = const_cast(token_iterator->begin) - buf->position(); + throw Exception("Cannot deduce template of expression: " + std::string(buf->position(), len), ErrorCodes::SYNTAX_ERROR); } } /// Continue parsing without template @@ -397,7 +409,7 @@ bool ValuesBlockInputFormat::parseExpression(IColumn & column, size_t column_idx throw Exception("Interpreting expressions is disabled", ErrorCodes::SUPPORT_IS_DISABLED); /// Try to evaluate single expression if other parsers don't work - buf.position() = const_cast(token_iterator->begin); + buf->position() = const_cast(token_iterator->begin); std::pair value_raw = evaluateConstantExpression(ast, context); @@ -409,17 +421,17 @@ bool ValuesBlockInputFormat::parseExpression(IColumn & column, size_t column_idx Field value = convertFieldToType(expression_value, type, value_raw.second.get()); /// Check that we are indeed allowed to insert a NULL. - if (value.isNull() && !type.isNullable()) + if (value.isNull() && !type.isNullable() && !type.isLowCardinalityNullable()) { if (format_settings.null_as_default) { type.insertDefaultInto(column); return false; } - buf.rollbackToCheckpoint(); + buf->rollbackToCheckpoint(); throw Exception{"Cannot insert NULL value into a column of type '" + type.getName() + "'" + " at: " + - String(buf.position(), std::min(SHOW_CHARS_ON_SYNTAX_ERROR, buf.buffer().end() - buf.position())), + String(buf->position(), std::min(SHOW_CHARS_ON_SYNTAX_ERROR, buf->buffer().end() - buf->position())), ErrorCodes::TYPE_MISMATCH}; } @@ -430,61 +442,61 @@ bool ValuesBlockInputFormat::parseExpression(IColumn & column, size_t column_idx /// Can be used in fileSegmentationEngine for parallel parsing of Values bool ValuesBlockInputFormat::skipToNextRow(size_t min_chunk_bytes, int balance) { - skipWhitespaceIfAny(buf); - if (buf.eof() || *buf.position() == ';') + skipWhitespaceIfAny(*buf); + if (buf->eof() || *buf->position() == ';') return false; bool quoted = false; - size_t chunk_begin_buf_count = buf.count(); - while (!buf.eof() && (balance || buf.count() - chunk_begin_buf_count < min_chunk_bytes)) + size_t chunk_begin_buf_count = buf->count(); + while (!buf->eof() && (balance || buf->count() - chunk_begin_buf_count < min_chunk_bytes)) { - buf.position() = find_first_symbols<'\\', '\'', ')', '('>(buf.position(), buf.buffer().end()); - if (buf.position() == buf.buffer().end()) + buf->position() = find_first_symbols<'\\', '\'', ')', '('>(buf->position(), buf->buffer().end()); + if (buf->position() == buf->buffer().end()) continue; - if (*buf.position() == '\\') + if (*buf->position() == '\\') { - ++buf.position(); - if (!buf.eof()) - ++buf.position(); + ++buf->position(); + if (!buf->eof()) + ++buf->position(); } - else if (*buf.position() == '\'') + else if (*buf->position() == '\'') { quoted ^= true; - ++buf.position(); + ++buf->position(); } - else if (*buf.position() == ')') + else if (*buf->position() == ')') { - ++buf.position(); + ++buf->position(); if (!quoted) --balance; } - else if (*buf.position() == '(') + else if (*buf->position() == '(') { - ++buf.position(); + ++buf->position(); if (!quoted) ++balance; } } - if (!buf.eof() && *buf.position() == ',') - ++buf.position(); + if (!buf->eof() && *buf->position() == ',') + ++buf->position(); return true; } void ValuesBlockInputFormat::assertDelimiterAfterValue(size_t column_idx) { if (unlikely(!checkDelimiterAfterValue(column_idx))) - throwAtAssertionFailed((column_idx + 1 == num_columns) ? ")" : ",", buf); + throwAtAssertionFailed((column_idx + 1 == num_columns) ? ")" : ",", *buf); } bool ValuesBlockInputFormat::checkDelimiterAfterValue(size_t column_idx) { - skipWhitespaceIfAny(buf); + skipWhitespaceIfAny(*buf); if (likely(column_idx + 1 != num_columns)) - return checkChar(',', buf); + return checkChar(',', *buf); else - return checkChar(')', buf); + return checkChar(')', *buf); } bool ValuesBlockInputFormat::shouldDeduceNewTemplate(size_t column_idx) @@ -516,21 +528,21 @@ bool ValuesBlockInputFormat::shouldDeduceNewTemplate(size_t column_idx) void ValuesBlockInputFormat::readPrefix() { /// In this format, BOM at beginning of stream cannot be confused with value, so it is safe to skip it. - skipBOMIfExists(buf); + skipBOMIfExists(*buf); } void ValuesBlockInputFormat::readSuffix() { - if (!buf.eof() && *buf.position() == ';') + if (!buf->eof() && *buf->position() == ';') { - ++buf.position(); - skipWhitespaceIfAny(buf); - if (buf.hasUnreadData()) + ++buf->position(); + skipWhitespaceIfAny(*buf); + if (buf->hasUnreadData()) throw Exception("Cannot read data after semicolon", ErrorCodes::CANNOT_READ_ALL_DATA); return; } - if (buf.hasUnreadData()) + if (buf->hasUnreadData()) throw Exception("Unread data in PeekableReadBuffer will be lost. Most likely it's a bug.", ErrorCodes::LOGICAL_ERROR); } @@ -539,10 +551,16 @@ void ValuesBlockInputFormat::resetParser() IInputFormat::resetParser(); // I'm not resetting parser modes here. // There is a good chance that all messages have the same format. - buf.reset(); + buf->reset(); total_rows = 0; } +void ValuesBlockInputFormat::setReadBuffer(ReadBuffer & in_) +{ + buf = std::make_unique(in_); + IInputFormat::setReadBuffer(*buf); +} + void registerInputFormatValues(FormatFactory & factory) { factory.registerInputFormat("Values", []( diff --git a/src/Processors/Formats/Impl/ValuesBlockInputFormat.h b/src/Processors/Formats/Impl/ValuesBlockInputFormat.h index b1e44f5d104..5bbd4bea5ba 100644 --- a/src/Processors/Formats/Impl/ValuesBlockInputFormat.h +++ b/src/Processors/Formats/Impl/ValuesBlockInputFormat.h @@ -32,6 +32,7 @@ public: String getName() const override { return "ValuesBlockInputFormat"; } void resetParser() override; + void setReadBuffer(ReadBuffer & in_) override; /// TODO: remove context somehow. void setContext(ContextPtr context_) { context = Context::createCopy(context_); } @@ -39,6 +40,9 @@ public: const BlockMissingValues & getMissingValues() const override { return block_missing_values; } private: + ValuesBlockInputFormat(std::unique_ptr buf_, const Block & header_, const RowInputFormatParams & params_, + const FormatSettings & format_settings_); + enum class ParserType { Streaming, @@ -66,7 +70,7 @@ private: bool skipToNextRow(size_t min_chunk_bytes = 0, int balance = 0); - PeekableReadBuffer buf; + std::unique_ptr buf; const RowInputFormatParams params; diff --git a/src/Processors/Formats/RowInputFormatWithNamesAndTypes.cpp b/src/Processors/Formats/RowInputFormatWithNamesAndTypes.cpp new file mode 100644 index 00000000000..b5690d9dafb --- /dev/null +++ b/src/Processors/Formats/RowInputFormatWithNamesAndTypes.cpp @@ -0,0 +1,260 @@ +#include +#include +#include +#include + +namespace DB +{ + +namespace ErrorCodes +{ + extern const int INCORRECT_DATA; +} + +RowInputFormatWithNamesAndTypes::RowInputFormatWithNamesAndTypes( + const Block & header_, + ReadBuffer & in_, + const Params & params_, + bool with_names_, + bool with_types_, + const FormatSettings & format_settings_) + : RowInputFormatWithDiagnosticInfo(header_, in_, params_), format_settings(format_settings_), with_names(with_names_), with_types(with_types_) +{ + const auto & sample = getPort().getHeader(); + size_t num_columns = sample.columns(); + + data_types.resize(num_columns); + column_indexes_by_names.reserve(num_columns); + + for (size_t i = 0; i < num_columns; ++i) + { + const auto & column_info = sample.getByPosition(i); + + data_types[i] = column_info.type; + column_indexes_by_names.emplace(column_info.name, i); + } +} + +void RowInputFormatWithNamesAndTypes::setupAllColumnsByTableSchema() +{ + const auto & header = getPort().getHeader(); + column_mapping->column_indexes_for_input_fields.resize(header.columns()); + column_mapping->names_of_columns = header.getNames(); + + for (size_t i = 0; i < column_mapping->column_indexes_for_input_fields.size(); ++i) + column_mapping->column_indexes_for_input_fields[i] = i; +} + +void RowInputFormatWithNamesAndTypes::addInputColumn(const String & column_name, std::vector & read_columns) +{ + column_mapping->names_of_columns.push_back(column_name); + + const auto column_it = column_indexes_by_names.find(column_name); + if (column_it == column_indexes_by_names.end()) + { + if (format_settings.skip_unknown_fields) + { + column_mapping->column_indexes_for_input_fields.push_back(std::nullopt); + return; + } + + throw Exception( + ErrorCodes::INCORRECT_DATA, + "Unknown field found in {} header: '{}' at position {}\nSet the 'input_format_skip_unknown_fields' parameter explicitly to ignore and proceed", + getName(), column_name, column_mapping->column_indexes_for_input_fields.size()); + } + + const auto column_index = column_it->second; + + if (read_columns[column_index]) + throw Exception("Duplicate field found while parsing TSV header: " + column_name, ErrorCodes::INCORRECT_DATA); + + read_columns[column_index] = true; + column_mapping->column_indexes_for_input_fields.emplace_back(column_index); +} + +void RowInputFormatWithNamesAndTypes::readPrefix() +{ + if (with_names || with_types || data_types.at(0)->textCanContainOnlyValidUTF8()) + { + /// We assume that column name or type cannot contain BOM, so, if format has header, + /// then BOM at beginning of stream cannot be confused with name or type of field, and it is safe to skip it. + skipBOMIfExists(*in); + } + + /// This is a bit of abstraction leakage, but we need it in parallel parsing: + /// we check if this InputFormat is working with the "real" beginning of the data. + if (with_names && getCurrentUnitNumber() == 0) + { + if (format_settings.with_names_use_header) + { + std::vector read_columns(data_types.size(), false); + auto column_names = readNames(); + for (const auto & name : column_names) + addInputColumn(name, read_columns); + + for (size_t i = 0; i != read_columns.size(); ++i) + { + if (!read_columns[i]) + column_mapping->not_presented_columns.push_back(i); + } + } + else + { + setupAllColumnsByTableSchema(); + skipNames(); + } + } + else if (!column_mapping->is_set) + setupAllColumnsByTableSchema(); + + if (with_types && getCurrentUnitNumber() == 0) + { + if (format_settings.with_types_use_header) + { + auto types = readTypes(); + if (types.size() != column_mapping->column_indexes_for_input_fields.size()) + throw Exception( + ErrorCodes::INCORRECT_DATA, + "The number of data types differs from the number of column names in input data"); + + /// Check that types from input matches types from header. + for (size_t i = 0; i < types.size(); ++i) + { + if (column_mapping->column_indexes_for_input_fields[i] && + data_types[*column_mapping->column_indexes_for_input_fields[i]]->getName() != types[i]) + { + throw Exception( + ErrorCodes::INCORRECT_DATA, + "Type of '{}' must be {}, not {}", + getPort().getHeader().getByPosition(*column_mapping->column_indexes_for_input_fields[i]).name, + data_types[*column_mapping->column_indexes_for_input_fields[i]]->getName(), types[i]); + } + } + } + else + skipTypes(); + } +} + +void RowInputFormatWithNamesAndTypes::insertDefaultsForNotSeenColumns(MutableColumns & columns, RowReadExtension & ext) +{ + for (auto index : column_mapping->not_presented_columns) + { + columns[index]->insertDefault(); + ext.read_columns[index] = false; + } +} + +bool RowInputFormatWithNamesAndTypes::readRow(MutableColumns & columns, RowReadExtension & ext) +{ + if (in->eof()) + return false; + + updateDiagnosticInfo(); + skipRowStartDelimiter(); + + ext.read_columns.resize(data_types.size()); + for (size_t file_column = 0; file_column < column_mapping->column_indexes_for_input_fields.size(); ++file_column) + { + const auto & column_index = column_mapping->column_indexes_for_input_fields[file_column]; + const bool is_last_file_column = file_column + 1 == column_mapping->column_indexes_for_input_fields.size(); + if (column_index) + ext.read_columns[*column_index] = readField( + *columns[*column_index], + data_types[*column_index], + serializations[*column_index], + is_last_file_column, + column_mapping->names_of_columns[file_column]); + else + skipField(file_column); + + if (!is_last_file_column) + skipFieldDelimiter(); + } + + skipRowEndDelimiter(); + + insertDefaultsForNotSeenColumns(columns, ext); + + /// If defaults_for_omitted_fields is set to 0, we should leave already inserted defaults. + if (!format_settings.defaults_for_omitted_fields) + ext.read_columns.assign(ext.read_columns.size(), true); + + return true; +} + +void RowInputFormatWithNamesAndTypes::resetParser() +{ + RowInputFormatWithDiagnosticInfo::resetParser(); + column_mapping->column_indexes_for_input_fields.clear(); + column_mapping->not_presented_columns.clear(); + column_mapping->names_of_columns.clear(); +} + +void RowInputFormatWithNamesAndTypes::tryDeserializeField(const DataTypePtr & type, IColumn & column, size_t file_column) +{ + const auto & index = column_mapping->column_indexes_for_input_fields[file_column]; + if (index) + { + checkNullValueForNonNullable(type); + const bool is_last_file_column = file_column + 1 == column_mapping->column_indexes_for_input_fields.size(); + readField(column, type, serializations[*index], is_last_file_column, column_mapping->names_of_columns[file_column]); + } + else + { + skipField(file_column); + } +} + +bool RowInputFormatWithNamesAndTypes::parseRowAndPrintDiagnosticInfo(MutableColumns & columns, WriteBuffer & out) +{ + if (in->eof()) + { + out << "\n"; + return false; + } + + if (!parseRowStartWithDiagnosticInfo(out)) + return false; + + for (size_t file_column = 0; file_column < column_mapping->column_indexes_for_input_fields.size(); ++file_column) + { + if (column_mapping->column_indexes_for_input_fields[file_column].has_value()) + { + const auto & header = getPort().getHeader(); + size_t col_idx = column_mapping->column_indexes_for_input_fields[file_column].value(); + if (!deserializeFieldAndPrintDiagnosticInfo(header.getByPosition(col_idx).name, data_types[col_idx], *columns[col_idx], out, file_column)) + return false; + } + else + { + static const String skipped_column_str = ""; + static const DataTypePtr skipped_column_type = std::make_shared(); + static const MutableColumnPtr skipped_column = skipped_column_type->createColumn(); + if (!deserializeFieldAndPrintDiagnosticInfo(skipped_column_str, skipped_column_type, *skipped_column, out, file_column)) + return false; + } + + /// Delimiters + if (file_column + 1 != column_mapping->column_indexes_for_input_fields.size()) + { + if (!parseFieldDelimiterWithDiagnosticInfo(out)) + return false; + } + } + + return parseRowEndWithDiagnosticInfo(out); +} + + +void registerFileSegmentationEngineForFormatWithNamesAndTypes( + FormatFactory & factory, const String & base_format_name, FormatFactory::FileSegmentationEngine segmentation_engine) +{ + factory.registerFileSegmentationEngine(base_format_name, segmentation_engine); + factory.registerFileSegmentationEngine(base_format_name + "WithNames", segmentation_engine); + factory.registerFileSegmentationEngine(base_format_name + "WithNamesAndTypes", segmentation_engine); +} + + +} diff --git a/src/Processors/Formats/RowInputFormatWithNamesAndTypes.h b/src/Processors/Formats/RowInputFormatWithNamesAndTypes.h new file mode 100644 index 00000000000..0fd83238f5f --- /dev/null +++ b/src/Processors/Formats/RowInputFormatWithNamesAndTypes.h @@ -0,0 +1,85 @@ +#pragma once + +#include +#include +#include + +namespace DB +{ + +/// Base class for input formats with -WithNames and -WithNamesAndTypes suffixes. +/// It accepts 2 parameters in constructor - with_names and with_types and implements +/// input format depending on them: +/// - if with_names is true, it will expect that the first row of data contains column +/// names. If setting input_format_with_names_use_header is set to 1, columns mapping +/// will be performed. +/// - if with_types is true, it will expect that the second row of data contains column +/// types. If setting input_format_with_types_use_header is set to 1, types from input +/// will be compared types from header. +/// It's important that firstly this class reads/skips names and only +/// then reads/skips types. So you can this invariant. +class RowInputFormatWithNamesAndTypes : public RowInputFormatWithDiagnosticInfo +{ +public: + /** with_names - in the first line the header with column names + * with_types - in the second line the header with column names + */ + RowInputFormatWithNamesAndTypes( + const Block & header_, + ReadBuffer & in_, + const Params & params_, + bool with_names_, bool with_types_, const FormatSettings & format_settings_); + + bool readRow(MutableColumns & columns, RowReadExtension & ext) override; + void readPrefix() override; + void resetParser() override; + +protected: + /// Read single field from input. Return false if there was no real value and we inserted default value. + virtual bool readField(IColumn & column, const DataTypePtr & type, const SerializationPtr & serialization, bool is_last_file_column, const String & column_name) = 0; + + /// Skip single field, it's used to skip unknown columns. + virtual void skipField(size_t file_column) = 0; + /// Skip the whole row with names. + virtual void skipNames() = 0; + /// Skip the whole row with types. + virtual void skipTypes() = 0; + + /// Skip delimiters, if any. + virtual void skipRowStartDelimiter() {} + virtual void skipFieldDelimiter() {} + virtual void skipRowEndDelimiter() {} + + + /// Methods for parsing with diagnostic info. + virtual void checkNullValueForNonNullable(DataTypePtr) {} + virtual bool parseRowStartWithDiagnosticInfo(WriteBuffer &) { return true; } + virtual bool parseFieldDelimiterWithDiagnosticInfo(WriteBuffer &) { return true; } + virtual bool parseRowEndWithDiagnosticInfo(WriteBuffer &) { return true;} + bool isGarbageAfterField(size_t, ReadBuffer::Position) override {return false; } + + /// Read row with names and return the list of them. + virtual std::vector readNames() = 0; + /// Read row with types and return the list of them. + virtual std::vector readTypes() = 0; + + const FormatSettings format_settings; + DataTypes data_types; + +private: + bool parseRowAndPrintDiagnosticInfo(MutableColumns & columns, WriteBuffer & out) override; + void tryDeserializeField(const DataTypePtr & type, IColumn & column, size_t file_column) override; + + void setupAllColumnsByTableSchema(); + void addInputColumn(const String & column_name, std::vector & read_columns); + void insertDefaultsForNotSeenColumns(MutableColumns & columns, RowReadExtension & ext); + + bool with_names; + bool with_types; + std::unordered_map column_indexes_by_names; +}; + +void registerFileSegmentationEngineForFormatWithNamesAndTypes( + FormatFactory & factory, const String & base_format_name, FormatFactory::FileSegmentationEngine segmentation_engine); + +} diff --git a/src/Processors/Merges/Algorithms/FinishAggregatingInOrderAlgorithm.cpp b/src/Processors/Merges/Algorithms/FinishAggregatingInOrderAlgorithm.cpp index f488ee61cc3..fdea3c23dc2 100644 --- a/src/Processors/Merges/Algorithms/FinishAggregatingInOrderAlgorithm.cpp +++ b/src/Processors/Merges/Algorithms/FinishAggregatingInOrderAlgorithm.cpp @@ -1,5 +1,7 @@ #include +#include #include +#include #include #include @@ -7,10 +9,16 @@ namespace DB { +namespace ErrorCodes +{ + extern const int LOGICAL_ERROR; +} + FinishAggregatingInOrderAlgorithm::State::State( - const Chunk & chunk, const SortDescription & desc) - : num_rows(chunk.getNumRows()) - , all_columns(chunk.getColumns()) + const Chunk & chunk, const SortDescription & desc, Int64 total_bytes_) + : all_columns(chunk.getColumns()) + , num_rows(chunk.getNumRows()) + , total_bytes(total_bytes_) { if (!chunk) return; @@ -25,12 +33,14 @@ FinishAggregatingInOrderAlgorithm::FinishAggregatingInOrderAlgorithm( size_t num_inputs_, AggregatingTransformParamsPtr params_, SortDescription description_, - size_t max_block_size_) + size_t max_block_size_, + size_t max_block_bytes_) : header(header_) , num_inputs(num_inputs_) , params(params_) , description(std::move(description_)) , max_block_size(max_block_size_) + , max_block_bytes(max_block_bytes_) { /// Replace column names in description to positions. for (auto & column_description : description) @@ -46,14 +56,25 @@ FinishAggregatingInOrderAlgorithm::FinishAggregatingInOrderAlgorithm( void FinishAggregatingInOrderAlgorithm::initialize(Inputs inputs) { current_inputs = std::move(inputs); - states.reserve(num_inputs); + states.resize(num_inputs); for (size_t i = 0; i < num_inputs; ++i) - states.emplace_back(current_inputs[i].chunk, description); + consume(current_inputs[i], i); } void FinishAggregatingInOrderAlgorithm::consume(Input & input, size_t source_num) { - states[source_num] = State{input.chunk, description}; + if (!input.chunk.hasRows()) + return; + + const auto & info = input.chunk.getChunkInfo(); + if (!info) + throw Exception(ErrorCodes::LOGICAL_ERROR, "Chunk info was not set for chunk in FinishAggregatingInOrderAlgorithm"); + + const auto * arenas_info = typeid_cast(info.get()); + if (!arenas_info) + throw Exception(ErrorCodes::LOGICAL_ERROR, "Chunk should have ChunkInfoWithAllocatedBytes in FinishAggregatingInOrderAlgorithm"); + + states[source_num] = State{input.chunk, description, arenas_info->allocated_bytes}; } IMergingAlgorithm::Status FinishAggregatingInOrderAlgorithm::merge() @@ -81,7 +102,7 @@ IMergingAlgorithm::Status FinishAggregatingInOrderAlgorithm::merge() } if (!best_input) - return Status{aggregate(), true}; + return Status(prepareToMerge(), true); /// Chunk at best_input will be aggregated entirely. auto & best_state = states[*best_input]; @@ -110,19 +131,24 @@ IMergingAlgorithm::Status FinishAggregatingInOrderAlgorithm::merge() Status status(inputs_to_update.back()); inputs_to_update.pop_back(); - /// Do not merge blocks, if there are too few rows. - if (accumulated_rows >= max_block_size) - status.chunk = aggregate(); + /// Do not merge blocks, if there are too few rows or bytes. + if (accumulated_rows >= max_block_size || accumulated_bytes >= max_block_bytes) + status.chunk = prepareToMerge(); return status; } -Chunk FinishAggregatingInOrderAlgorithm::aggregate() +Chunk FinishAggregatingInOrderAlgorithm::prepareToMerge() { - auto aggregated = params->aggregator.mergeBlocks(blocks, false); - blocks.clear(); accumulated_rows = 0; - return {aggregated.getColumns(), aggregated.rows()}; + accumulated_bytes = 0; + + auto info = std::make_shared(); + info->chunks = std::make_unique(std::move(chunks)); + + Chunk chunk; + chunk.setChunkInfo(std::move(info)); + return chunk; } void FinishAggregatingInOrderAlgorithm::addToAggregation() @@ -133,22 +159,28 @@ void FinishAggregatingInOrderAlgorithm::addToAggregation() if (!state.isValid() || state.current_row == state.to_row) continue; - if (state.to_row - state.current_row == state.num_rows) + size_t current_rows = state.to_row - state.current_row; + if (current_rows == state.num_rows) { - blocks.emplace_back(header.cloneWithColumns(state.all_columns)); + chunks.emplace_back(state.all_columns, current_rows); } else { Columns new_columns; new_columns.reserve(state.all_columns.size()); for (const auto & column : state.all_columns) - new_columns.emplace_back(column->cut(state.current_row, state.to_row - state.current_row)); + new_columns.emplace_back(column->cut(state.current_row, current_rows)); - blocks.emplace_back(header.cloneWithColumns(new_columns)); + chunks.emplace_back(std::move(new_columns), current_rows); } + chunks.back().setChunkInfo(std::make_shared()); states[i].current_row = states[i].to_row; - accumulated_rows += blocks.back().rows(); + + /// We assume that sizes in bytes of rows are almost the same. + accumulated_bytes += states[i].total_bytes * (static_cast(current_rows) / states[i].num_rows); + accumulated_rows += current_rows; + if (!states[i].isValid()) inputs_to_update.push_back(i); diff --git a/src/Processors/Merges/Algorithms/FinishAggregatingInOrderAlgorithm.h b/src/Processors/Merges/Algorithms/FinishAggregatingInOrderAlgorithm.h index 119aefb0ab0..f3a1bd40635 100644 --- a/src/Processors/Merges/Algorithms/FinishAggregatingInOrderAlgorithm.h +++ b/src/Processors/Merges/Algorithms/FinishAggregatingInOrderAlgorithm.h @@ -4,6 +4,7 @@ #include #include #include +#include namespace DB { @@ -15,20 +16,23 @@ using AggregatingTransformParamsPtr = std::shared_ptr states; std::vector inputs_to_update; - BlocksList blocks; + + std::vector chunks; size_t accumulated_rows = 0; + size_t accumulated_bytes = 0; }; } diff --git a/src/Processors/Merges/FinishAggregatingInOrderTransform.h b/src/Processors/Merges/FinishAggregatingInOrderTransform.h index 58bd399afda..ecc88899e88 100644 --- a/src/Processors/Merges/FinishAggregatingInOrderTransform.h +++ b/src/Processors/Merges/FinishAggregatingInOrderTransform.h @@ -17,14 +17,16 @@ public: size_t num_inputs, AggregatingTransformParamsPtr params, SortDescription description, - size_t max_block_size) + size_t max_block_size, + size_t max_block_bytes) : IMergingTransform( - num_inputs, header, header, /*have_all_inputs_=*/ true, /*limit_hint_=*/ 0, + num_inputs, header, {}, /*have_all_inputs_=*/ true, /*limit_hint_=*/ 0, header, num_inputs, params, std::move(description), - max_block_size) + max_block_size, + max_block_bytes) { } diff --git a/src/Processors/Merges/IMergingTransform.cpp b/src/Processors/Merges/IMergingTransform.cpp index 52acf36a4d7..cdb18f07e4d 100644 --- a/src/Processors/Merges/IMergingTransform.cpp +++ b/src/Processors/Merges/IMergingTransform.cpp @@ -135,7 +135,7 @@ IProcessor::Status IMergingTransformBase::prepare() bool is_port_full = !output.canPush(); /// Push if has data. - if (state.output_chunk && !is_port_full) + if ((state.output_chunk || state.output_chunk.hasChunkInfo()) && !is_port_full) output.push(std::move(state.output_chunk)); if (!is_initialized) diff --git a/src/Processors/Merges/IMergingTransform.h b/src/Processors/Merges/IMergingTransform.h index 4da49b8155c..ea6f6aed37f 100644 --- a/src/Processors/Merges/IMergingTransform.h +++ b/src/Processors/Merges/IMergingTransform.h @@ -107,7 +107,7 @@ public: IMergingAlgorithm::Status status = algorithm.merge(); - if (status.chunk && status.chunk.hasRows()) + if ((status.chunk && status.chunk.hasRows()) || status.chunk.hasChunkInfo()) { // std::cerr << "Got chunk with " << status.chunk.getNumRows() << " rows" << std::endl; state.output_chunk = std::move(status.chunk); diff --git a/src/Processors/QueryPlan/AggregatingStep.cpp b/src/Processors/QueryPlan/AggregatingStep.cpp index 53036360b8d..0b48a38e7db 100644 --- a/src/Processors/QueryPlan/AggregatingStep.cpp +++ b/src/Processors/QueryPlan/AggregatingStep.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -29,6 +30,7 @@ AggregatingStep::AggregatingStep( Aggregator::Params params_, bool final_, size_t max_block_size_, + size_t aggregation_in_order_max_block_bytes_, size_t merge_threads_, size_t temporary_data_merge_threads_, bool storage_has_evenly_distributed_read_, @@ -38,6 +40,7 @@ AggregatingStep::AggregatingStep( , params(std::move(params_)) , final(std::move(final_)) , max_block_size(max_block_size_) + , aggregation_in_order_max_block_bytes(aggregation_in_order_max_block_bytes_) , merge_threads(merge_threads_) , temporary_data_merge_threads(temporary_data_merge_threads_) , storage_has_evenly_distributed_read(storage_has_evenly_distributed_read_) @@ -78,49 +81,65 @@ void AggregatingStep::transformPipeline(QueryPipelineBuilder & pipeline, const B { if (pipeline.getNumStreams() > 1) { + /** The pipeline is the following: + * + * --> AggregatingInOrder --> MergingAggregatedBucket + * --> AggregatingInOrder --> FinishAggregatingInOrder --> ResizeProcessor --> MergingAggregatedBucket + * --> AggregatingInOrder --> MergingAggregatedBucket + */ + auto many_data = std::make_shared(pipeline.getNumStreams()); size_t counter = 0; pipeline.addSimpleTransform([&](const Block & header) { - return std::make_shared(header, transform_params, group_by_sort_description, max_block_size, many_data, counter++); + /// We want to merge aggregated data in batches of size + /// not greater than 'aggregation_in_order_max_block_bytes'. + /// So, we reduce 'max_bytes' value for aggregation in 'merge_threads' times. + return std::make_shared( + header, transform_params, group_by_sort_description, + max_block_size, aggregation_in_order_max_block_bytes / merge_threads, + many_data, counter++); }); aggregating_in_order = collector.detachProcessors(0); - for (auto & column_description : group_by_sort_description) - { - if (!column_description.column_name.empty()) - { - column_description.column_number = pipeline.getHeader().getPositionByName(column_description.column_name); - column_description.column_name.clear(); - } - } - auto transform = std::make_shared( pipeline.getHeader(), pipeline.getNumStreams(), transform_params, group_by_sort_description, - max_block_size); + max_block_size, + aggregation_in_order_max_block_bytes); pipeline.addTransform(std::move(transform)); + + /// Do merge of aggregated data in parallel. + pipeline.resize(merge_threads); + + pipeline.addSimpleTransform([&](const Block &) + { + return std::make_shared(transform_params); + }); + aggregating_sorted = collector.detachProcessors(1); } else { pipeline.addSimpleTransform([&](const Block & header) { - return std::make_shared(header, transform_params, group_by_sort_description, max_block_size); + return std::make_shared( + header, transform_params, group_by_sort_description, + max_block_size, aggregation_in_order_max_block_bytes); + }); + + pipeline.addSimpleTransform([&](const Block & header) + { + return std::make_shared(header, transform_params); }); aggregating_in_order = collector.detachProcessors(0); } - pipeline.addSimpleTransform([&](const Block & header) - { - return std::make_shared(header, transform_params); - }); - finalizing = collector.detachProcessors(2); return; } diff --git a/src/Processors/QueryPlan/AggregatingStep.h b/src/Processors/QueryPlan/AggregatingStep.h index c7d67c75894..154ff0abc0a 100644 --- a/src/Processors/QueryPlan/AggregatingStep.h +++ b/src/Processors/QueryPlan/AggregatingStep.h @@ -19,6 +19,7 @@ public: Aggregator::Params params_, bool final_, size_t max_block_size_, + size_t aggregation_in_order_max_block_bytes_, size_t merge_threads_, size_t temporary_data_merge_threads_, bool storage_has_evenly_distributed_read_, @@ -40,6 +41,7 @@ private: Aggregator::Params params; bool final; size_t max_block_size; + size_t aggregation_in_order_max_block_bytes; size_t merge_threads; size_t temporary_data_merge_threads; diff --git a/src/Processors/QueryPlan/FinishSortingStep.cpp b/src/Processors/QueryPlan/FinishSortingStep.cpp deleted file mode 100644 index 9002c804e7b..00000000000 --- a/src/Processors/QueryPlan/FinishSortingStep.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -namespace DB -{ - -static ITransformingStep::Traits getTraits(size_t limit) -{ - return ITransformingStep::Traits - { - { - .preserves_distinct_columns = true, - .returns_single_stream = true, - .preserves_number_of_streams = false, - .preserves_sorting = false, - }, - { - .preserves_number_of_rows = limit == 0, - } - }; -} - -FinishSortingStep::FinishSortingStep( - const DataStream & input_stream_, - SortDescription prefix_description_, - SortDescription result_description_, - size_t max_block_size_, - UInt64 limit_) - : ITransformingStep(input_stream_, input_stream_.header, getTraits(limit_)) - , prefix_description(std::move(prefix_description_)) - , result_description(std::move(result_description_)) - , max_block_size(max_block_size_) - , limit(limit_) -{ - /// TODO: check input_stream is sorted by prefix_description. - output_stream->sort_description = result_description; - output_stream->sort_mode = DataStream::SortMode::Stream; -} - -void FinishSortingStep::updateLimit(size_t limit_) -{ - if (limit_ && (limit == 0 || limit_ < limit)) - { - limit = limit_; - transform_traits.preserves_number_of_rows = false; - } -} - -void FinishSortingStep::transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &) -{ - bool need_finish_sorting = (prefix_description.size() < result_description.size()); - if (pipeline.getNumStreams() > 1) - { - UInt64 limit_for_merging = (need_finish_sorting ? 0 : limit); - auto transform = std::make_shared( - pipeline.getHeader(), - pipeline.getNumStreams(), - prefix_description, - max_block_size, - limit_for_merging); - - pipeline.addTransform(std::move(transform)); - } - - if (need_finish_sorting) - { - pipeline.addSimpleTransform([&](const Block & header, QueryPipelineBuilder::StreamType stream_type) -> ProcessorPtr - { - if (stream_type != QueryPipelineBuilder::StreamType::Main) - return nullptr; - - return std::make_shared(header, result_description, limit); - }); - - /// NOTE limits are not applied to the size of temporary sets in FinishSortingTransform - pipeline.addSimpleTransform([&](const Block & header) -> ProcessorPtr - { - return std::make_shared( - header, prefix_description, result_description, max_block_size, limit); - }); - } -} - -void FinishSortingStep::describeActions(FormatSettings & settings) const -{ - String prefix(settings.offset, ' '); - - settings.out << prefix << "Prefix sort description: "; - dumpSortDescription(prefix_description, input_streams.front().header, settings.out); - settings.out << '\n'; - - settings.out << prefix << "Result sort description: "; - dumpSortDescription(result_description, input_streams.front().header, settings.out); - settings.out << '\n'; - - if (limit) - settings.out << prefix << "Limit " << limit << '\n'; -} - -void FinishSortingStep::describeActions(JSONBuilder::JSONMap & map) const -{ - map.add("Prefix Sort Description", explainSortDescription(prefix_description, input_streams.front().header)); - map.add("Result Sort Description", explainSortDescription(result_description, input_streams.front().header)); - - if (limit) - map.add("Limit", limit); -} - -} diff --git a/src/Processors/QueryPlan/FinishSortingStep.h b/src/Processors/QueryPlan/FinishSortingStep.h deleted file mode 100644 index fd56c4353e7..00000000000 --- a/src/Processors/QueryPlan/FinishSortingStep.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once -#include -#include - -namespace DB -{ - -/// Finish sorting of pre-sorted data. See FinishSortingTransform. -class FinishSortingStep : public ITransformingStep -{ -public: - FinishSortingStep( - const DataStream & input_stream_, - SortDescription prefix_description_, - SortDescription result_description_, - size_t max_block_size_, - UInt64 limit_); - - String getName() const override { return "FinishSorting"; } - - void transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &) override; - - void describeActions(JSONBuilder::JSONMap & map) const override; - void describeActions(FormatSettings & settings) const override; - - /// Add limit or change it to lower value. - void updateLimit(size_t limit_); - -private: - SortDescription prefix_description; - SortDescription result_description; - size_t max_block_size; - UInt64 limit; -}; - -} diff --git a/src/Processors/QueryPlan/LimitStep.cpp b/src/Processors/QueryPlan/LimitStep.cpp index 8c5e3e3c87c..aff7472e4aa 100644 --- a/src/Processors/QueryPlan/LimitStep.cpp +++ b/src/Processors/QueryPlan/LimitStep.cpp @@ -40,7 +40,7 @@ void LimitStep::updateInputStream(DataStream input_stream) { input_streams.clear(); input_streams.emplace_back(std::move(input_stream)); - output_stream = createOutputStream(input_streams.front(), output_stream->header, getDataStreamTraits()); + output_stream = createOutputStream(input_streams.front(), input_streams.front().header, getDataStreamTraits()); } void LimitStep::transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &) diff --git a/src/Processors/QueryPlan/MergeSortingStep.cpp b/src/Processors/QueryPlan/MergeSortingStep.cpp deleted file mode 100644 index 534f05a4d6e..00000000000 --- a/src/Processors/QueryPlan/MergeSortingStep.cpp +++ /dev/null @@ -1,96 +0,0 @@ -#include -#include -#include -#include -#include - -namespace DB -{ - -static ITransformingStep::Traits getTraits(size_t limit) -{ - return ITransformingStep::Traits - { - { - .preserves_distinct_columns = true, - .returns_single_stream = false, - .preserves_number_of_streams = true, - .preserves_sorting = false, - }, - { - .preserves_number_of_rows = limit == 0, - } - }; -} - -MergeSortingStep::MergeSortingStep( - const DataStream & input_stream, - const SortDescription & description_, - size_t max_merged_block_size_, - UInt64 limit_, - size_t max_bytes_before_remerge_, - double remerge_lowered_memory_bytes_ratio_, - size_t max_bytes_before_external_sort_, - VolumePtr tmp_volume_, - size_t min_free_disk_space_) - : ITransformingStep(input_stream, input_stream.header, getTraits(limit_)) - , description(description_) - , max_merged_block_size(max_merged_block_size_) - , limit(limit_) - , max_bytes_before_remerge(max_bytes_before_remerge_) - , remerge_lowered_memory_bytes_ratio(remerge_lowered_memory_bytes_ratio_) - , max_bytes_before_external_sort(max_bytes_before_external_sort_), tmp_volume(tmp_volume_) - , min_free_disk_space(min_free_disk_space_) -{ - /// TODO: check input_stream is partially sorted by the same description. - output_stream->sort_description = description; - output_stream->sort_mode = input_stream.has_single_port ? DataStream::SortMode::Stream - : DataStream::SortMode::Port; -} - -void MergeSortingStep::updateLimit(size_t limit_) -{ - if (limit_ && (limit == 0 || limit_ < limit)) - { - limit = limit_; - transform_traits.preserves_number_of_rows = false; - } -} - -void MergeSortingStep::transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &) -{ - pipeline.addSimpleTransform([&](const Block & header, QueryPipelineBuilder::StreamType stream_type) -> ProcessorPtr - { - if (stream_type == QueryPipelineBuilder::StreamType::Totals) - return nullptr; - - return std::make_shared( - header, description, max_merged_block_size, limit, - max_bytes_before_remerge / pipeline.getNumStreams(), - remerge_lowered_memory_bytes_ratio, - max_bytes_before_external_sort, - tmp_volume, - min_free_disk_space); - }); -} - -void MergeSortingStep::describeActions(FormatSettings & settings) const -{ - String prefix(settings.offset, ' '); - settings.out << prefix << "Sort description: "; - dumpSortDescription(description, input_streams.front().header, settings.out); - settings.out << '\n'; - - if (limit) - settings.out << prefix << "Limit " << limit << '\n'; -} - -void MergeSortingStep::describeActions(JSONBuilder::JSONMap & map) const -{ - map.add("Sort Description", explainSortDescription(description, input_streams.front().header)); - - if (limit) - map.add("Limit", limit); -} - -} diff --git a/src/Processors/QueryPlan/MergeSortingStep.h b/src/Processors/QueryPlan/MergeSortingStep.h deleted file mode 100644 index 947ced829c6..00000000000 --- a/src/Processors/QueryPlan/MergeSortingStep.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once -#include -#include -#include -#include - -namespace DB -{ - -/// Sorts stream of data. See MergeSortingTransform. -class MergeSortingStep : public ITransformingStep -{ -public: - explicit MergeSortingStep( - const DataStream & input_stream, - const SortDescription & description_, - size_t max_merged_block_size_, - UInt64 limit_, - size_t max_bytes_before_remerge_, - double remerge_lowered_memory_bytes_ratio_, - size_t max_bytes_before_external_sort_, - VolumePtr tmp_volume_, - size_t min_free_disk_space_); - - String getName() const override { return "MergeSorting"; } - - void transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &) override; - - void describeActions(JSONBuilder::JSONMap & map) const override; - void describeActions(FormatSettings & settings) const override; - - /// Add limit or change it to lower value. - void updateLimit(size_t limit_); - -private: - SortDescription description; - size_t max_merged_block_size; - UInt64 limit; - - size_t max_bytes_before_remerge; - double remerge_lowered_memory_bytes_ratio; - size_t max_bytes_before_external_sort; - VolumePtr tmp_volume; - size_t min_free_disk_space; -}; - -} diff --git a/src/Processors/QueryPlan/MergingSortedStep.cpp b/src/Processors/QueryPlan/MergingSortedStep.cpp deleted file mode 100644 index ed1f24db55b..00000000000 --- a/src/Processors/QueryPlan/MergingSortedStep.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include -#include -#include -#include -#include - -namespace DB -{ - -static ITransformingStep::Traits getTraits(size_t limit) -{ - return ITransformingStep::Traits - { - { - .preserves_distinct_columns = true, - .returns_single_stream = true, - .preserves_number_of_streams = false, - .preserves_sorting = false, - }, - { - .preserves_number_of_rows = limit == 0, - } - }; -} - -MergingSortedStep::MergingSortedStep( - const DataStream & input_stream, - SortDescription sort_description_, - size_t max_block_size_, - UInt64 limit_) - : ITransformingStep(input_stream, input_stream.header, getTraits(limit_)) - , sort_description(std::move(sort_description_)) - , max_block_size(max_block_size_) - , limit(limit_) -{ - /// TODO: check input_stream is partially sorted (each port) by the same description. - output_stream->sort_description = sort_description; - output_stream->sort_mode = DataStream::SortMode::Stream; -} - -void MergingSortedStep::updateLimit(size_t limit_) -{ - if (limit_ && (limit == 0 || limit_ < limit)) - { - limit = limit_; - transform_traits.preserves_number_of_rows = false; - } -} - -void MergingSortedStep::transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &) -{ - /// If there are several streams, then we merge them into one - if (pipeline.getNumStreams() > 1) - { - - auto transform = std::make_shared( - pipeline.getHeader(), - pipeline.getNumStreams(), - sort_description, - max_block_size, limit); - - pipeline.addTransform(std::move(transform)); - } -} - -void MergingSortedStep::describeActions(FormatSettings & settings) const -{ - String prefix(settings.offset, ' '); - settings.out << prefix << "Sort description: "; - dumpSortDescription(sort_description, input_streams.front().header, settings.out); - settings.out << '\n'; - - if (limit) - settings.out << prefix << "Limit " << limit << '\n'; -} - -void MergingSortedStep::describeActions(JSONBuilder::JSONMap & map) const -{ - map.add("Sort Description", explainSortDescription(sort_description, input_streams.front().header)); - - if (limit) - map.add("Limit", limit); -} - -} diff --git a/src/Processors/QueryPlan/MergingSortedStep.h b/src/Processors/QueryPlan/MergingSortedStep.h deleted file mode 100644 index e886de42ca8..00000000000 --- a/src/Processors/QueryPlan/MergingSortedStep.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once -#include -#include -#include -#include - -namespace DB -{ - -/// Merge streams of data into single sorted stream. -class MergingSortedStep : public ITransformingStep -{ -public: - explicit MergingSortedStep( - const DataStream & input_stream, - SortDescription sort_description_, - size_t max_block_size_, - UInt64 limit_ = 0); - - String getName() const override { return "MergingSorted"; } - - void transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &) override; - - void describeActions(JSONBuilder::JSONMap & map) const override; - void describeActions(FormatSettings & settings) const override; - - /// Add limit or change it to lower value. - void updateLimit(size_t limit_); - -private: - SortDescription sort_description; - size_t max_block_size; - UInt64 limit; -}; - -} diff --git a/src/Processors/QueryPlan/Optimizations/filterPushDown.cpp b/src/Processors/QueryPlan/Optimizations/filterPushDown.cpp index 687946659b6..e81cec723a1 100644 --- a/src/Processors/QueryPlan/Optimizations/filterPushDown.cpp +++ b/src/Processors/QueryPlan/Optimizations/filterPushDown.cpp @@ -7,10 +7,7 @@ #include #include #include -#include -#include -#include -#include +#include #include #include #include @@ -237,10 +234,7 @@ size_t tryPushDownFilter(QueryPlan::Node * parent_node, QueryPlan::Nodes & nodes // { // } - if (typeid_cast(child.get()) - || typeid_cast(child.get()) - || typeid_cast(child.get()) - || typeid_cast(child.get())) + if (typeid_cast(child.get())) { Names allowed_inputs = child->getOutputStream().header.getNames(); if (auto updated_steps = tryAddNewFilterStep(parent_node, nodes, allowed_inputs)) diff --git a/src/Processors/QueryPlan/Optimizations/limitPushDown.cpp b/src/Processors/QueryPlan/Optimizations/limitPushDown.cpp index 01af6a2bbde..eb65f49103b 100644 --- a/src/Processors/QueryPlan/Optimizations/limitPushDown.cpp +++ b/src/Processors/QueryPlan/Optimizations/limitPushDown.cpp @@ -2,10 +2,7 @@ #include #include #include -#include -#include -#include -#include +#include #include namespace DB::QueryPlanOptimizations @@ -21,32 +18,15 @@ static bool tryUpdateLimitForSortingSteps(QueryPlan::Node * node, size_t limit) QueryPlan::Node * child = nullptr; bool updated = false; - if (auto * merging_sorted = typeid_cast(step.get())) + if (auto * sorting = typeid_cast(step.get())) { /// TODO: remove LimitStep here. - merging_sorted->updateLimit(limit); + sorting->updateLimit(limit); updated = true; child = node->children.front(); } - else if (auto * finish_sorting = typeid_cast(step.get())) - { - /// TODO: remove LimitStep here. - finish_sorting->updateLimit(limit); - updated = true; - } - else if (auto * merge_sorting = typeid_cast(step.get())) - { - merge_sorting->updateLimit(limit); - updated = true; - child = node->children.front(); - } - else if (auto * partial_sorting = typeid_cast(step.get())) - { - partial_sorting->updateLimit(limit); - updated = true; - } - /// We often have chain PartialSorting -> MergeSorting -> MergingSorted + /// In case we have several sorting steps. /// Try update limit for them also if possible. if (child) tryUpdateLimitForSortingSteps(child, limit); diff --git a/src/Processors/QueryPlan/PartialSortingStep.cpp b/src/Processors/QueryPlan/PartialSortingStep.cpp deleted file mode 100644 index 420e7b583ca..00000000000 --- a/src/Processors/QueryPlan/PartialSortingStep.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include -#include -#include -#include -#include -#include - -namespace DB -{ - -static ITransformingStep::Traits getTraits(size_t limit) -{ - return ITransformingStep::Traits - { - { - .preserves_distinct_columns = true, - .returns_single_stream = false, - .preserves_number_of_streams = true, - .preserves_sorting = false, - }, - { - .preserves_number_of_rows = limit == 0, - } - }; -} - -PartialSortingStep::PartialSortingStep( - const DataStream & input_stream, - SortDescription sort_description_, - UInt64 limit_, - SizeLimits size_limits_) - : ITransformingStep(input_stream, input_stream.header, getTraits(limit_)) - , sort_description(std::move(sort_description_)) - , limit(limit_) - , size_limits(size_limits_) -{ - output_stream->sort_description = sort_description; - output_stream->sort_mode = DataStream::SortMode::Chunk; -} - -void PartialSortingStep::updateLimit(size_t limit_) -{ - if (limit_ && (limit == 0 || limit_ < limit)) - { - limit = limit_; - transform_traits.preserves_number_of_rows = false; - } -} - -void PartialSortingStep::transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &) -{ - pipeline.addSimpleTransform([&](const Block & header, QueryPipelineBuilder::StreamType stream_type) -> ProcessorPtr - { - if (stream_type != QueryPipelineBuilder::StreamType::Main) - return nullptr; - - return std::make_shared(header, sort_description, limit); - }); - - StreamLocalLimits limits; - limits.mode = LimitsMode::LIMITS_CURRENT; //-V1048 - limits.size_limits = size_limits; - - pipeline.addSimpleTransform([&](const Block & header, QueryPipelineBuilder::StreamType stream_type) -> ProcessorPtr - { - if (stream_type != QueryPipelineBuilder::StreamType::Main) - return nullptr; - - auto transform = std::make_shared(header, limits); - return transform; - }); -} - -void PartialSortingStep::describeActions(FormatSettings & settings) const -{ - String prefix(settings.offset, ' '); - settings.out << prefix << "Sort description: "; - dumpSortDescription(sort_description, input_streams.front().header, settings.out); - settings.out << '\n'; - - if (limit) - settings.out << prefix << "Limit " << limit << '\n'; -} - -void PartialSortingStep::describeActions(JSONBuilder::JSONMap & map) const -{ - map.add("Sort Description", explainSortDescription(sort_description, input_streams.front().header)); - - if (limit) - map.add("Limit", limit); -} - -} diff --git a/src/Processors/QueryPlan/PartialSortingStep.h b/src/Processors/QueryPlan/PartialSortingStep.h deleted file mode 100644 index 9b7b8e8baa5..00000000000 --- a/src/Processors/QueryPlan/PartialSortingStep.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once -#include -#include -#include - -namespace DB -{ - -/// Sort separate chunks of data. -class PartialSortingStep : public ITransformingStep -{ -public: - explicit PartialSortingStep( - const DataStream & input_stream, - SortDescription sort_description_, - UInt64 limit_, - SizeLimits size_limits_); - - String getName() const override { return "PartialSorting"; } - - void transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &) override; - - void describeActions(JSONBuilder::JSONMap & map) const override; - void describeActions(FormatSettings & settings) const override; - - /// Add limit or change it to lower value. - void updateLimit(size_t limit_); - -private: - SortDescription sort_description; - UInt64 limit; - SizeLimits size_limits; -}; - -} diff --git a/src/Processors/QueryPlan/ReadFromMergeTree.cpp b/src/Processors/QueryPlan/ReadFromMergeTree.cpp index 3b1d7254e2c..519de724f9e 100644 --- a/src/Processors/QueryPlan/ReadFromMergeTree.cpp +++ b/src/Processors/QueryPlan/ReadFromMergeTree.cpp @@ -135,7 +135,6 @@ Pipe ReadFromMergeTree::readFromPool( data, metadata_snapshot, prewhere_info, - true, required_columns, backoff_settings, settings.preferred_block_size_bytes, @@ -174,7 +173,7 @@ ProcessorPtr ReadFromMergeTree::createSource( return std::make_shared( data, metadata_snapshot, part.data_part, max_block_size, preferred_block_size_bytes, preferred_max_column_in_block_size_bytes, required_columns, part.ranges, use_uncompressed_cache, prewhere_info, - actions_settings, true, reader_settings, virt_column_names, part.part_index_in_query, has_limit_below_one_block); + actions_settings, reader_settings, virt_column_names, part.part_index_in_query, has_limit_below_one_block); } Pipe ReadFromMergeTree::readInOrder( diff --git a/src/Processors/QueryPlan/SortingStep.cpp b/src/Processors/QueryPlan/SortingStep.cpp new file mode 100644 index 00000000000..32b314b1c50 --- /dev/null +++ b/src/Processors/QueryPlan/SortingStep.cpp @@ -0,0 +1,241 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace DB +{ + +static ITransformingStep::Traits getTraits(size_t limit) +{ + return ITransformingStep::Traits + { + { + .preserves_distinct_columns = true, + .returns_single_stream = true, + .preserves_number_of_streams = false, + .preserves_sorting = false, + }, + { + .preserves_number_of_rows = limit == 0, + } + }; +} + +SortingStep::SortingStep( + const DataStream & input_stream, + const SortDescription & description_, + size_t max_block_size_, + UInt64 limit_, + SizeLimits size_limits_, + size_t max_bytes_before_remerge_, + double remerge_lowered_memory_bytes_ratio_, + size_t max_bytes_before_external_sort_, + VolumePtr tmp_volume_, + size_t min_free_disk_space_) + : ITransformingStep(input_stream, input_stream.header, getTraits(limit_)) + , type(Type::Full) + , result_description(description_) + , max_block_size(max_block_size_) + , limit(limit_) + , size_limits(size_limits_) + , max_bytes_before_remerge(max_bytes_before_remerge_) + , remerge_lowered_memory_bytes_ratio(remerge_lowered_memory_bytes_ratio_) + , max_bytes_before_external_sort(max_bytes_before_external_sort_), tmp_volume(tmp_volume_) + , min_free_disk_space(min_free_disk_space_) +{ + /// TODO: check input_stream is partially sorted by the same description. + output_stream->sort_description = result_description; + output_stream->sort_mode = DataStream::SortMode::Stream; +} + +SortingStep::SortingStep( + const DataStream & input_stream_, + SortDescription prefix_description_, + SortDescription result_description_, + size_t max_block_size_, + UInt64 limit_) + : ITransformingStep(input_stream_, input_stream_.header, getTraits(limit_)) + , type(Type::FinishSorting) + , prefix_description(std::move(prefix_description_)) + , result_description(std::move(result_description_)) + , max_block_size(max_block_size_) + , limit(limit_) +{ + /// TODO: check input_stream is sorted by prefix_description. + output_stream->sort_description = result_description; + output_stream->sort_mode = DataStream::SortMode::Stream; +} + +SortingStep::SortingStep( + const DataStream & input_stream, + SortDescription sort_description_, + size_t max_block_size_, + UInt64 limit_) + : ITransformingStep(input_stream, input_stream.header, getTraits(limit_)) + , type(Type::MergingSorted) + , result_description(std::move(sort_description_)) + , max_block_size(max_block_size_) + , limit(limit_) +{ + /// TODO: check input_stream is partially sorted (each port) by the same description. + output_stream->sort_description = result_description; + output_stream->sort_mode = DataStream::SortMode::Stream; +} + +void SortingStep::updateLimit(size_t limit_) +{ + if (limit_ && (limit == 0 || limit_ < limit)) + { + limit = limit_; + transform_traits.preserves_number_of_rows = false; + } +} + +void SortingStep::transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &) +{ + if (type == Type::FinishSorting) + { + bool need_finish_sorting = (prefix_description.size() < result_description.size()); + if (pipeline.getNumStreams() > 1) + { + UInt64 limit_for_merging = (need_finish_sorting ? 0 : limit); + auto transform = std::make_shared( + pipeline.getHeader(), + pipeline.getNumStreams(), + prefix_description, + max_block_size, + limit_for_merging); + + pipeline.addTransform(std::move(transform)); + } + + if (need_finish_sorting) + { + pipeline.addSimpleTransform([&](const Block & header, QueryPipelineBuilder::StreamType stream_type) -> ProcessorPtr + { + if (stream_type != QueryPipelineBuilder::StreamType::Main) + return nullptr; + + return std::make_shared(header, result_description, limit); + }); + + /// NOTE limits are not applied to the size of temporary sets in FinishSortingTransform + pipeline.addSimpleTransform([&](const Block & header) -> ProcessorPtr + { + return std::make_shared( + header, prefix_description, result_description, max_block_size, limit); + }); + } + } + else if (type == Type::Full) + { + pipeline.addSimpleTransform([&](const Block & header, QueryPipelineBuilder::StreamType stream_type) -> ProcessorPtr + { + if (stream_type != QueryPipelineBuilder::StreamType::Main) + return nullptr; + + return std::make_shared(header, result_description, limit); + }); + + StreamLocalLimits limits; + limits.mode = LimitsMode::LIMITS_CURRENT; //-V1048 + limits.size_limits = size_limits; + + pipeline.addSimpleTransform([&](const Block & header, QueryPipelineBuilder::StreamType stream_type) -> ProcessorPtr + { + if (stream_type != QueryPipelineBuilder::StreamType::Main) + return nullptr; + + auto transform = std::make_shared(header, limits); + return transform; + }); + + pipeline.addSimpleTransform([&](const Block & header, QueryPipelineBuilder::StreamType stream_type) -> ProcessorPtr + { + if (stream_type == QueryPipelineBuilder::StreamType::Totals) + return nullptr; + + return std::make_shared( + header, result_description, max_block_size, limit, + max_bytes_before_remerge / pipeline.getNumStreams(), + remerge_lowered_memory_bytes_ratio, + max_bytes_before_external_sort, + tmp_volume, + min_free_disk_space); + }); + + /// If there are several streams, then we merge them into one + if (pipeline.getNumStreams() > 1) + { + + auto transform = std::make_shared( + pipeline.getHeader(), + pipeline.getNumStreams(), + result_description, + max_block_size, limit); + + pipeline.addTransform(std::move(transform)); + } + } + else if (type == Type::MergingSorted) + { /// If there are several streams, then we merge them into one + if (pipeline.getNumStreams() > 1) + { + + auto transform = std::make_shared( + pipeline.getHeader(), + pipeline.getNumStreams(), + result_description, + max_block_size, limit); + + pipeline.addTransform(std::move(transform)); + } + } +} + +void SortingStep::describeActions(FormatSettings & settings) const +{ + String prefix(settings.offset, ' '); + + if (!prefix_description.empty()) + { + settings.out << prefix << "Prefix sort description: "; + dumpSortDescription(prefix_description, input_streams.front().header, settings.out); + settings.out << '\n'; + + settings.out << prefix << "Result sort description: "; + dumpSortDescription(result_description, input_streams.front().header, settings.out); + settings.out << '\n'; + } + else + { + settings.out << prefix << "Sort description: "; + dumpSortDescription(result_description, input_streams.front().header, settings.out); + settings.out << '\n'; + } + + if (limit) + settings.out << prefix << "Limit " << limit << '\n'; +} + +void SortingStep::describeActions(JSONBuilder::JSONMap & map) const +{ + if (!prefix_description.empty()) + { + map.add("Prefix Sort Description", explainSortDescription(prefix_description, input_streams.front().header)); + map.add("Result Sort Description", explainSortDescription(result_description, input_streams.front().header)); + } + else + map.add("Sort Description", explainSortDescription(result_description, input_streams.front().header)); + + if (limit) + map.add("Limit", limit); +} + +} diff --git a/src/Processors/QueryPlan/SortingStep.h b/src/Processors/QueryPlan/SortingStep.h new file mode 100644 index 00000000000..8e253e71f44 --- /dev/null +++ b/src/Processors/QueryPlan/SortingStep.h @@ -0,0 +1,76 @@ +#pragma once +#include +#include +#include +#include + +namespace DB +{ + +/// Sort data stream +class SortingStep : public ITransformingStep +{ +public: + /// Full + SortingStep( + const DataStream & input_stream, + const SortDescription & description_, + size_t max_block_size_, + UInt64 limit_, + SizeLimits size_limits_, + size_t max_bytes_before_remerge_, + double remerge_lowered_memory_bytes_ratio_, + size_t max_bytes_before_external_sort_, + VolumePtr tmp_volume_, + size_t min_free_disk_space_); + + /// FinishSorting + SortingStep( + const DataStream & input_stream_, + SortDescription prefix_description_, + SortDescription result_description_, + size_t max_block_size_, + UInt64 limit_); + + /// MergingSorted + SortingStep( + const DataStream & input_stream, + SortDescription sort_description_, + size_t max_block_size_, + UInt64 limit_ = 0); + + String getName() const override { return "Sorting"; } + + void transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &) override; + + void describeActions(JSONBuilder::JSONMap & map) const override; + void describeActions(FormatSettings & settings) const override; + + /// Add limit or change it to lower value. + void updateLimit(size_t limit_); + +private: + + enum class Type + { + Full, + FinishSorting, + MergingSorted, + }; + + Type type; + + SortDescription prefix_description; + SortDescription result_description; + size_t max_block_size; + UInt64 limit; + SizeLimits size_limits; + + size_t max_bytes_before_remerge = 0; + double remerge_lowered_memory_bytes_ratio = 0; + size_t max_bytes_before_external_sort = 0; + VolumePtr tmp_volume; + size_t min_free_disk_space = 0; +}; + +} diff --git a/src/Processors/Sources/MySQLSource.cpp b/src/Processors/Sources/MySQLSource.cpp index 5bda662466c..8e9cdcfda48 100644 --- a/src/Processors/Sources/MySQLSource.cpp +++ b/src/Processors/Sources/MySQLSource.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_MYSQL #include diff --git a/src/Processors/Sources/SQLiteSource.h b/src/Processors/Sources/SQLiteSource.h index 0f8b42c536b..28106062fb5 100644 --- a/src/Processors/Sources/SQLiteSource.h +++ b/src/Processors/Sources/SQLiteSource.h @@ -1,14 +1,12 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_SQLITE #include #include -#include // Y_IGNORE +#include namespace DB diff --git a/src/Processors/Transforms/AggregatingInOrderTransform.cpp b/src/Processors/Transforms/AggregatingInOrderTransform.cpp index 33bc5280422..3602b7f7d03 100644 --- a/src/Processors/Transforms/AggregatingInOrderTransform.cpp +++ b/src/Processors/Transforms/AggregatingInOrderTransform.cpp @@ -6,26 +6,25 @@ namespace DB { -namespace ErrorCodes -{ - extern const int LOGICAL_ERROR; -} - - AggregatingInOrderTransform::AggregatingInOrderTransform( - Block header, AggregatingTransformParamsPtr params_, - const SortDescription & group_by_description_, size_t res_block_size_) - : AggregatingInOrderTransform(std::move(header), std::move(params_) - , group_by_description_, res_block_size_, std::make_unique(1), 0) + Block header, + AggregatingTransformParamsPtr params_, + const SortDescription & group_by_description_, + size_t max_block_size_, size_t max_block_bytes_) + : AggregatingInOrderTransform(std::move(header), std::move(params_), + group_by_description_, max_block_size_, max_block_bytes_, + std::make_unique(1), 0) { } AggregatingInOrderTransform::AggregatingInOrderTransform( Block header, AggregatingTransformParamsPtr params_, - const SortDescription & group_by_description_, size_t res_block_size_, + const SortDescription & group_by_description_, + size_t max_block_size_, size_t max_block_bytes_, ManyAggregatedDataPtr many_data_, size_t current_variant) : IProcessor({std::move(header)}, {params_->getCustomHeader(false)}) - , res_block_size(res_block_size_) + , max_block_size(max_block_size_) + , max_block_bytes(max_block_bytes_) , params(std::move(params_)) , group_by_description(group_by_description_) , aggregate_columns(params->params.aggregates_size) @@ -48,8 +47,18 @@ AggregatingInOrderTransform::AggregatingInOrderTransform( AggregatingInOrderTransform::~AggregatingInOrderTransform() = default; +static Int64 getCurrentMemoryUsage() +{ + Int64 current_memory_usage = 0; + if (auto * memory_tracker = CurrentThread::getMemoryTracker()) + current_memory_usage = memory_tracker->get(); + return current_memory_usage; +} + void AggregatingInOrderTransform::consume(Chunk chunk) { + Int64 initial_memory_usage = getCurrentMemoryUsage(); + size_t rows = chunk.getNumRows(); if (rows == 0) return; @@ -77,6 +86,7 @@ void AggregatingInOrderTransform::consume(Chunk chunk) size_t key_end = 0; size_t key_begin = 0; + /// If we don't have a block we create it and fill with first key if (!cur_block_size) { @@ -94,6 +104,7 @@ void AggregatingInOrderTransform::consume(Chunk chunk) ++cur_block_size; } + Int64 current_memory_usage = 0; /// Will split block into segments with the same key while (key_end != rows) @@ -112,44 +123,18 @@ void AggregatingInOrderTransform::consume(Chunk chunk) if (key_begin != key_end) params->aggregator.executeOnIntervalWithoutKeyImpl(variants.without_key, key_begin, key_end, aggregate_function_instructions.data(), variants.aggregates_pool); + current_memory_usage = getCurrentMemoryUsage() - initial_memory_usage; + /// We finalize last key aggregation state if a new key found. if (key_end != rows) { params->aggregator.addSingleKeyToAggregateColumns(variants, res_aggregate_columns); - /// If res_block_size is reached we have to stop consuming and generate the block. Save the extra rows into new chunk. - if (cur_block_size == res_block_size) + /// If max_block_size is reached we have to stop consuming and generate the block. Save the extra rows into new chunk. + if (cur_block_size >= max_block_size || cur_block_bytes + current_memory_usage >= max_block_bytes) { - Columns source_columns = chunk.detachColumns(); - - for (auto & source_column : source_columns) - source_column = source_column->cut(key_end, rows - key_end); - - current_chunk = Chunk(source_columns, rows - key_end); - src_rows -= current_chunk.getNumRows(); - block_end_reached = true; - need_generate = true; - cur_block_size = 0; - - variants.without_key = nullptr; - - /// Arenas cannot be destroyed here, since later, in FinalizingSimpleTransform - /// there will be finalizeChunk(), but even after - /// finalizeChunk() we cannot destroy arena, since some memory - /// from Arena still in use, so we attach it to the Chunk to - /// remove it once it will be consumed. - if (params->final) - { - if (variants.aggregates_pools.size() != 1) - throw Exception("Too much arenas", ErrorCodes::LOGICAL_ERROR); - - Arenas arenas(1, std::make_shared()); - std::swap(variants.aggregates_pools, arenas); - variants.aggregates_pool = variants.aggregates_pools.at(0).get(); - - chunk.setChunkInfo(std::make_shared(std::move(arenas))); - } - + cur_block_bytes += current_memory_usage; + finalizeCurrentChunk(std::move(chunk), key_end); return; } @@ -161,9 +146,25 @@ void AggregatingInOrderTransform::consume(Chunk chunk) key_begin = key_end; } + cur_block_bytes += current_memory_usage; block_end_reached = false; } +void AggregatingInOrderTransform::finalizeCurrentChunk(Chunk chunk, size_t key_end) +{ + size_t rows = chunk.getNumRows(); + Columns source_columns = chunk.detachColumns(); + + for (auto & source_column : source_columns) + source_column = source_column->cut(key_end, rows - key_end); + + current_chunk = Chunk(source_columns, rows - key_end); + src_rows -= current_chunk.getNumRows(); + + block_end_reached = true; + need_generate = true; + variants.without_key = nullptr; +} void AggregatingInOrderTransform::work() { @@ -218,6 +219,7 @@ IProcessor::Status AggregatingInOrderTransform::prepare() src_rows, res_rows, formatReadableSizeWithBinarySuffix(src_bytes)); return Status::Finished; } + if (input.isFinished()) { is_consume_finished = true; @@ -245,14 +247,24 @@ void AggregatingInOrderTransform::generate() Block res = res_header.cloneEmpty(); for (size_t i = 0; i < res_key_columns.size(); ++i) - { res.getByPosition(i).column = std::move(res_key_columns[i]); - } + for (size_t i = 0; i < res_aggregate_columns.size(); ++i) - { res.getByPosition(i + res_key_columns.size()).column = std::move(res_aggregate_columns[i]); - } + to_push_chunk = convertToChunk(res); + + /// Clear arenas to allow to free them, when chunk will reach the end of pipeline. + /// It's safe clear them here, because columns with aggregate functions already holds them. + variants.aggregates_pools = { std::make_shared() }; + variants.aggregates_pool = variants.aggregates_pools.at(0).get(); + + /// Pass info about used memory by aggregate functions further. + to_push_chunk.setChunkInfo(std::make_shared(cur_block_bytes)); + + cur_block_bytes = 0; + cur_block_size = 0; + res_rows += to_push_chunk.getNumRows(); need_generate = false; } diff --git a/src/Processors/Transforms/AggregatingInOrderTransform.h b/src/Processors/Transforms/AggregatingInOrderTransform.h index 10793e885ce..929ab98d6e6 100644 --- a/src/Processors/Transforms/AggregatingInOrderTransform.h +++ b/src/Processors/Transforms/AggregatingInOrderTransform.h @@ -9,16 +9,24 @@ namespace DB { +struct ChunkInfoWithAllocatedBytes : public ChunkInfo +{ + ChunkInfoWithAllocatedBytes(Int64 allocated_bytes_) + : allocated_bytes(allocated_bytes_) {} + Int64 allocated_bytes; +}; + class AggregatingInOrderTransform : public IProcessor { - public: AggregatingInOrderTransform(Block header, AggregatingTransformParamsPtr params, - const SortDescription & group_by_description, size_t res_block_size, + const SortDescription & group_by_description, + size_t max_block_size_, size_t max_block_bytes_, ManyAggregatedDataPtr many_data, size_t current_variant); AggregatingInOrderTransform(Block header, AggregatingTransformParamsPtr params, - const SortDescription & group_by_description, size_t res_block_size); + const SortDescription & group_by_description, + size_t max_block_size_, size_t max_block_bytes_); ~AggregatingInOrderTransform() override; @@ -32,9 +40,12 @@ public: private: void generate(); + void finalizeCurrentChunk(Chunk chunk, size_t key_end); - size_t res_block_size; + size_t max_block_size; + size_t max_block_bytes; size_t cur_block_size = 0; + size_t cur_block_bytes = 0; MutableColumns res_key_columns; MutableColumns res_aggregate_columns; @@ -64,10 +75,10 @@ private: }; -class FinalizingSimpleTransform : public ISimpleTransform +class FinalizeAggregatedTransform : public ISimpleTransform { public: - FinalizingSimpleTransform(Block header, AggregatingTransformParamsPtr params_) + FinalizeAggregatedTransform(Block header, AggregatingTransformParamsPtr params_) : ISimpleTransform({std::move(header)}, {params_->getHeader()}, true) , params(params_) {} @@ -82,7 +93,7 @@ public: } } - String getName() const override { return "FinalizingSimpleTransform"; } + String getName() const override { return "FinalizeAggregatedTransform"; } private: AggregatingTransformParamsPtr params; diff --git a/src/Processors/Transforms/FillingTransform.cpp b/src/Processors/Transforms/FillingTransform.cpp index 3ff89c302ff..5fe051e9498 100644 --- a/src/Processors/Transforms/FillingTransform.cpp +++ b/src/Processors/Transforms/FillingTransform.cpp @@ -117,12 +117,12 @@ IProcessor::Status FillingTransform::prepare() { if (!on_totals && input.isFinished() && !output.isFinished() && !has_input && !generate_suffix) { - should_insert_first = next_row < filling_row; + should_insert_first = next_row < filling_row || first; for (size_t i = 0, size = filling_row.size(); i < size; ++i) next_row[i] = filling_row.getFillDescription(i).fill_to; - if (filling_row < next_row) + if (first || filling_row < next_row) { generate_suffix = true; return Status::Ready; @@ -160,6 +160,9 @@ void FillingTransform::transform(Chunk & chunk) init_columns_by_positions(empty_columns, old_fill_columns, res_fill_columns, fill_column_positions); init_columns_by_positions(empty_columns, old_other_columns, res_other_columns, other_column_positions); + if (first) + filling_row.initFromDefaults(); + if (should_insert_first && filling_row < next_row) insertFromFillingRow(res_fill_columns, res_other_columns, filling_row); diff --git a/src/Processors/Transforms/MergingAggregatedMemoryEfficientTransform.cpp b/src/Processors/Transforms/MergingAggregatedMemoryEfficientTransform.cpp index 7f0893a6c0d..e1fa965f025 100644 --- a/src/Processors/Transforms/MergingAggregatedMemoryEfficientTransform.cpp +++ b/src/Processors/Transforms/MergingAggregatedMemoryEfficientTransform.cpp @@ -12,13 +12,6 @@ namespace ErrorCodes extern const int LOGICAL_ERROR; } -struct ChunksToMerge : public ChunkInfo -{ - std::unique_ptr chunks; - Int32 bucket_num = -1; - bool is_overflows = false; -}; - GroupingAggregatedTransform::GroupingAggregatedTransform( const Block & header_, size_t num_inputs_, AggregatingTransformParamsPtr params_) : IProcessor(InputPorts(num_inputs_, header_), { Block() }) diff --git a/src/Processors/Transforms/MergingAggregatedMemoryEfficientTransform.h b/src/Processors/Transforms/MergingAggregatedMemoryEfficientTransform.h index 4367f6fec32..b4a62f8a13e 100644 --- a/src/Processors/Transforms/MergingAggregatedMemoryEfficientTransform.h +++ b/src/Processors/Transforms/MergingAggregatedMemoryEfficientTransform.h @@ -137,6 +137,13 @@ private: void addChunk(Chunk chunk, size_t from_input); }; +struct ChunksToMerge : public ChunkInfo +{ + std::unique_ptr chunks; + Int32 bucket_num = -1; + bool is_overflows = false; +}; + class Pipe; /// Adds processors to pipe which performs memory efficient merging of partially aggregated data from several sources. diff --git a/src/Processors/Transforms/PostgreSQLSource.h b/src/Processors/Transforms/PostgreSQLSource.h index 2736afec7a9..c7e55c09c32 100644 --- a/src/Processors/Transforms/PostgreSQLSource.h +++ b/src/Processors/Transforms/PostgreSQLSource.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX #include diff --git a/src/Processors/Transforms/getSourceFromASTInsertQuery.cpp b/src/Processors/Transforms/getSourceFromASTInsertQuery.cpp index 86998614189..64c8a01bb9c 100644 --- a/src/Processors/Transforms/getSourceFromASTInsertQuery.cpp +++ b/src/Processors/Transforms/getSourceFromASTInsertQuery.cpp @@ -42,12 +42,12 @@ InputFormatPtr getInputFormatFromASTInsertQuery( if (ast_insert_query->infile && context->getApplicationType() == Context::ApplicationType::SERVER) throw Exception("Query has infile and was send directly to server", ErrorCodes::UNKNOWN_TYPE_OF_QUERY); - String format = ast_insert_query->format; - if (format.empty()) + if (ast_insert_query->format.empty()) { if (input_function) throw Exception("FORMAT must be specified for function input()", ErrorCodes::INVALID_USAGE_OF_INPUT); - format = "Values"; + else + throw Exception("Logical error: INSERT query requires format to be set", ErrorCodes::LOGICAL_ERROR); } /// Data could be in parsed (ast_insert_query.data) and in not parsed yet (input_buffer_tail_part) part of query. @@ -59,7 +59,7 @@ InputFormatPtr getInputFormatFromASTInsertQuery( : std::make_unique(); /// Create a source from input buffer using format from query - auto source = context->getInputFormat(format, *input_buffer, header, context->getSettings().max_insert_block_size); + auto source = context->getInputFormat(ast_insert_query->format, *input_buffer, header, context->getSettings().max_insert_block_size); source->addBuffer(std::move(input_buffer)); return source; } diff --git a/src/Server/GRPCServer.h b/src/Server/GRPCServer.h index ef86b902b5a..25c3813c11d 100644 --- a/src/Server/GRPCServer.h +++ b/src/Server/GRPCServer.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_GRPC #include diff --git a/src/Server/HTTP/WriteBufferFromHTTPServerResponse.cpp b/src/Server/HTTP/WriteBufferFromHTTPServerResponse.cpp index cba0b6f0592..8d51b30138c 100644 --- a/src/Server/HTTP/WriteBufferFromHTTPServerResponse.cpp +++ b/src/Server/HTTP/WriteBufferFromHTTPServerResponse.cpp @@ -8,9 +8,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #include diff --git a/src/Server/HTTPHandler.cpp b/src/Server/HTTPHandler.cpp index b7e7ac2ac33..b2a00055532 100644 --- a/src/Server/HTTPHandler.cpp +++ b/src/Server/HTTPHandler.cpp @@ -35,9 +35,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #include #include @@ -495,10 +493,7 @@ void HTTPHandler::processQuery( } // Parse the OpenTelemetry traceparent header. - // Disable in Arcadia -- it interferes with the - // test_clickhouse.TestTracing.test_tracing_via_http_proxy[traceparent] test. ClientInfo client_info = session->getClientInfo(); -#if !defined(ARCADIA_BUILD) if (request.has("traceparent")) { std::string opentelemetry_traceparent = request.get("traceparent"); @@ -512,7 +507,6 @@ void HTTPHandler::processQuery( } client_info.client_trace_context.tracestate = request.get("tracestate", ""); } -#endif auto context = session->makeQueryContext(std::move(client_info)); diff --git a/src/Server/KeeperTCPHandler.cpp b/src/Server/KeeperTCPHandler.cpp index 71099c23655..17a13955043 100644 --- a/src/Server/KeeperTCPHandler.cpp +++ b/src/Server/KeeperTCPHandler.cpp @@ -306,7 +306,14 @@ void KeeperTCPHandler::runImpl() } else { - String reason = keeper_dispatcher->checkInit() ? "server is not initialized yet" : "no alive leader exists"; + String reason; + if (!keeper_dispatcher->checkInit() && !keeper_dispatcher->hasLeader()) + reason = "server is not initialized yet and no alive leader exists"; + else if (!keeper_dispatcher->checkInit()) + reason = "server is not initialized yet"; + else + reason = "no alive leader exists"; + LOG_WARNING(log, "Ignoring user request, because {}", reason); sendHandshake(false); return; diff --git a/src/Server/KeeperTCPHandler.h b/src/Server/KeeperTCPHandler.h index 274fb21af63..9983749f145 100644 --- a/src/Server/KeeperTCPHandler.h +++ b/src/Server/KeeperTCPHandler.h @@ -1,9 +1,7 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include -# include "config_core.h" -#endif +#include +#include "config_core.h" #if USE_NURAFT diff --git a/src/Server/MySQLHandler.cpp b/src/Server/MySQLHandler.cpp index 8f4f04e56c5..2f28095f976 100644 --- a/src/Server/MySQLHandler.cpp +++ b/src/Server/MySQLHandler.cpp @@ -21,9 +21,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL # include @@ -245,7 +243,7 @@ void MySQLHandler::authenticate(const String & user_name, const String & auth_pl try { // For compatibility with JavaScript MySQL client, Native41 authentication plugin is used when possible (if password is specified using double SHA1). Otherwise SHA256 plugin is used. - if (session->getAuthenticationTypeOrLogInFailure(user_name) == DB::Authentication::SHA256_PASSWORD) + if (session->getAuthenticationTypeOrLogInFailure(user_name) == DB::AuthenticationType::SHA256_PASSWORD) { authPluginSSL(); } diff --git a/src/Server/MySQLHandler.h b/src/Server/MySQLHandler.h index 12be8c12921..7ef212bf36e 100644 --- a/src/Server/MySQLHandler.h +++ b/src/Server/MySQLHandler.h @@ -9,9 +9,7 @@ #include #include "IServer.h" -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL # include diff --git a/src/Server/MySQLHandlerFactory.h b/src/Server/MySQLHandlerFactory.h index df7bd794b16..106fdfdf341 100644 --- a/src/Server/MySQLHandlerFactory.h +++ b/src/Server/MySQLHandlerFactory.h @@ -5,9 +5,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL # include diff --git a/src/Server/PostgreSQLHandler.cpp b/src/Server/PostgreSQLHandler.cpp index 472bf421ce7..fee4ace3452 100644 --- a/src/Server/PostgreSQLHandler.cpp +++ b/src/Server/PostgreSQLHandler.cpp @@ -10,9 +10,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #if USE_SSL # include diff --git a/src/Server/PostgreSQLHandler.h b/src/Server/PostgreSQLHandler.h index ca74b78a109..ded9616296a 100644 --- a/src/Server/PostgreSQLHandler.h +++ b/src/Server/PostgreSQLHandler.h @@ -6,6 +6,10 @@ #include #include "IServer.h" +#if !defined(ARCADIA_BUILD) +# include +#endif + #if USE_SSL # include #endif diff --git a/src/Server/PostgreSQLHandlerFactory.h b/src/Server/PostgreSQLHandlerFactory.h index 4550e9ee8e9..9103cbaad90 100644 --- a/src/Server/PostgreSQLHandlerFactory.h +++ b/src/Server/PostgreSQLHandlerFactory.h @@ -6,6 +6,10 @@ #include #include +#if !defined(ARCADIA_BUILD) +# include +#endif + namespace DB { diff --git a/src/Server/ProtocolServerAdapter.h b/src/Server/ProtocolServerAdapter.h index 2e3d67d081f..04c46b53356 100644 --- a/src/Server/ProtocolServerAdapter.h +++ b/src/Server/ProtocolServerAdapter.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #include #include diff --git a/src/Server/TCPHandler.cpp b/src/Server/TCPHandler.cpp index 729cb33371a..f85bd24a275 100644 --- a/src/Server/TCPHandler.cpp +++ b/src/Server/TCPHandler.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -53,9 +54,10 @@ #include "Core/Protocol.h" #include "TCPHandler.h" -#if !defined(ARCADIA_BUILD) -# include -#endif +#include + +using namespace std::literals; + namespace CurrentMetrics { @@ -1126,6 +1128,11 @@ void TCPHandler::receiveHello() client_info.client_version_patch = client_version_patch; client_info.client_tcp_protocol_version = client_tcp_protocol_version; + client_info.connection_client_version_major = client_version_major; + client_info.connection_client_version_minor = client_version_minor; + client_info.connection_client_version_patch = client_version_patch; + client_info.connection_tcp_protocol_version = client_tcp_protocol_version; + is_interserver_mode = (user == USER_INTERSERVER_MARKER); if (is_interserver_mode) { @@ -1841,7 +1848,7 @@ void TCPHandler::run() catch (Poco::Exception & e) { /// Timeout - not an error. - if (!strcmp(e.what(), "Timeout")) + if (e.what() == "Timeout"sv) { LOG_DEBUG(log, "Poco::Exception. Code: {}, e.code() = {}, e.displayText() = {}, e.what() = {}", ErrorCodes::POCO_EXCEPTION, e.code(), e.displayText(), e.what()); } diff --git a/src/Storages/AlterCommands.cpp b/src/Storages/AlterCommands.cpp index 1d057d1bb10..c5101f162ee 100644 --- a/src/Storages/AlterCommands.cpp +++ b/src/Storages/AlterCommands.cpp @@ -205,6 +205,13 @@ std::optional AlterCommand::parse(const ASTAlterCommand * command_ command.sample_by = command_ast->sample_by; return command; } + else if (command_ast->type == ASTAlterCommand::REMOVE_SAMPLE_BY) + { + AlterCommand command; + command.ast = command_ast->clone(); + command.type = AlterCommand::REMOVE_SAMPLE_BY; + return command; + } else if (command_ast->type == ASTAlterCommand::ADD_INDEX) { AlterCommand command; @@ -463,6 +470,10 @@ void AlterCommand::apply(StorageInMemoryMetadata & metadata, ContextPtr context) { metadata.sampling_key.recalculateWithNewAST(sample_by, metadata.columns, context); } + else if (type == REMOVE_SAMPLE_BY) + { + metadata.sampling_key = {}; + } else if (type == COMMENT_COLUMN) { metadata.columns.modify(column_name, @@ -745,7 +756,7 @@ bool AlterCommand::isRequireMutationStage(const StorageInMemoryMetadata & metada return false; /// We remove properties on metadata level - if (isRemovingProperty() || type == REMOVE_TTL) + if (isRemovingProperty() || type == REMOVE_TTL || type == REMOVE_SAMPLE_BY) return false; if (type == DROP_COLUMN || type == DROP_INDEX || type == DROP_PROJECTION || type == RENAME_COLUMN) @@ -1208,6 +1219,10 @@ void AlterCommands::validate(const StorageInMemoryMetadata & metadata, ContextPt { throw Exception{"Table doesn't have any table TTL expression, cannot remove", ErrorCodes::BAD_ARGUMENTS}; } + else if (command.type == AlterCommand::REMOVE_SAMPLE_BY && !metadata.hasSamplingKey()) + { + throw Exception{"Table doesn't have SAMPLE BY, cannot remove", ErrorCodes::BAD_ARGUMENTS}; + } /// Collect default expressions for MODIFY and ADD comands if (command.type == AlterCommand::MODIFY_COLUMN || command.type == AlterCommand::ADD_COLUMN) diff --git a/src/Storages/AlterCommands.h b/src/Storages/AlterCommands.h index 046238bd5f5..dce6b496741 100644 --- a/src/Storages/AlterCommands.h +++ b/src/Storages/AlterCommands.h @@ -45,7 +45,8 @@ struct AlterCommand RENAME_COLUMN, REMOVE_TTL, MODIFY_DATABASE_SETTING, - COMMENT_TABLE + COMMENT_TABLE, + REMOVE_SAMPLE_BY, }; /// Which property user wants to remove from column diff --git a/src/Storages/ExternalDataSourceConfiguration.cpp b/src/Storages/ExternalDataSourceConfiguration.cpp index 00c41069101..71be37e4b5b 100644 --- a/src/Storages/ExternalDataSourceConfiguration.cpp +++ b/src/Storages/ExternalDataSourceConfiguration.cpp @@ -47,10 +47,11 @@ void ExternalDataSourceConfiguration::set(const ExternalDataSourceConfiguration database = conf.database; table = conf.table; schema = conf.schema; + addresses_expr = conf.addresses_expr; } -std::optional getExternalDataSourceConfiguration(const ASTs & args, ContextPtr context, bool is_database_engine) +std::optional getExternalDataSourceConfiguration(const ASTs & args, ContextPtr context, bool is_database_engine, bool throw_on_no_collection) { if (args.empty()) throw Exception(ErrorCodes::BAD_ARGUMENTS, "External data source must have arguments"); @@ -64,7 +65,14 @@ std::optional getExternalDataSourceConfiguration(const const auto & config_prefix = fmt::format("named_collections.{}", collection->name()); if (!config.has(config_prefix)) + { + /// For table function remote we do not throw on no collection, because then we consider first arg + /// as cluster definition from config. + if (!throw_on_no_collection) + return std::nullopt; + throw Exception(ErrorCodes::BAD_ARGUMENTS, "There is no collection named `{}` in config", collection->name()); + } configuration.host = config.getString(config_prefix + ".host", ""); configuration.port = config.getInt(config_prefix + ".port", 0); @@ -73,15 +81,19 @@ std::optional getExternalDataSourceConfiguration(const configuration.database = config.getString(config_prefix + ".database", ""); configuration.table = config.getString(config_prefix + ".table", ""); configuration.schema = config.getString(config_prefix + ".schema", ""); + configuration.addresses_expr = config.getString(config_prefix + ".addresses_expr", ""); - if ((args.size() == 1) && (configuration.host.empty() || configuration.port == 0 - || configuration.username.empty() || configuration.password.empty() + if (!configuration.addresses_expr.empty() && !configuration.host.empty()) + throw Exception(ErrorCodes::BAD_ARGUMENTS, "Cannot have `addresses_expr` and `host`, `port` in configuration at the same time"); + + if ((args.size() == 1) && ((configuration.addresses_expr.empty() && (configuration.host.empty() || configuration.port == 0)) || configuration.database.empty() || (configuration.table.empty() && !is_database_engine))) { throw Exception(ErrorCodes::BAD_ARGUMENTS, "Named collection of connection parameters is missing some of the parameters and no key-value arguments are added"); } + /// Check key-value arguments. for (size_t i = 1; i < args.size(); ++i) { if (const auto * ast_function = typeid_cast(args[i].get())) @@ -92,24 +104,40 @@ std::optional getExternalDataSourceConfiguration(const throw Exception(ErrorCodes::BAD_ARGUMENTS, "Expected key-value defined argument"); auto arg_name = function_args[0]->as()->name(); - auto arg_value = evaluateConstantExpressionOrIdentifierAsLiteral(function_args[1], context)->as()->value; + if (function_args[1]->as()) + { + non_common_args.emplace_back(std::make_pair(arg_name, function_args[1])); + continue; + } - if (arg_name == "host") - configuration.host = arg_value.safeGet(); - else if (arg_name == "port") - configuration.port = arg_value.safeGet(); - else if (arg_name == "user") - configuration.username = arg_value.safeGet(); - else if (arg_name == "password") - configuration.password = arg_value.safeGet(); - else if (arg_name == "database") - configuration.database = arg_value.safeGet(); - else if (arg_name == "table") - configuration.table = arg_value.safeGet(); - else if (arg_name == "schema") - configuration.schema = arg_value.safeGet(); + auto arg_value_ast = evaluateConstantExpressionOrIdentifierAsLiteral(function_args[1], context); + auto * arg_value_literal = arg_value_ast->as(); + if (arg_value_literal) + { + auto arg_value = arg_value_literal->value; + if (arg_name == "host") + configuration.host = arg_value.safeGet(); + else if (arg_name == "port") + configuration.port = arg_value.safeGet(); + else if (arg_name == "user") + configuration.username = arg_value.safeGet(); + else if (arg_name == "password") + configuration.password = arg_value.safeGet(); + else if (arg_name == "database") + configuration.database = arg_value.safeGet(); + else if (arg_name == "table") + configuration.table = arg_value.safeGet(); + else if (arg_name == "schema") + configuration.schema = arg_value.safeGet(); + else if (arg_name == "addresses_expr") + configuration.addresses_expr = arg_value.safeGet(); + else + non_common_args.emplace_back(std::make_pair(arg_name, arg_value_ast)); + } else - non_common_args.emplace_back(std::make_pair(arg_name, arg_value)); + { + non_common_args.emplace_back(std::make_pair(arg_name, arg_value_ast)); + } } else { @@ -269,9 +297,13 @@ std::optional getURLBasedDataSourceConfiguration(const } } else - non_common_args.emplace_back(std::make_pair(key, config.getString(config_prefix + '.' + key))); + { + auto value = config.getString(config_prefix + '.' + key); + non_common_args.emplace_back(std::make_pair(key, std::make_shared(value))); + } } + /// Check key-value arguments. for (size_t i = 1; i < args.size(); ++i) { if (const auto * ast_function = typeid_cast(args[i].get())) @@ -282,7 +314,8 @@ std::optional getURLBasedDataSourceConfiguration(const throw Exception(ErrorCodes::BAD_ARGUMENTS, "Expected key-value defined argument"); auto arg_name = function_args[0]->as()->name(); - auto arg_value = evaluateConstantExpressionOrIdentifierAsLiteral(function_args[1], context)->as()->value; + auto arg_value_ast = evaluateConstantExpressionOrIdentifierAsLiteral(function_args[1], context); + auto arg_value = arg_value_ast->as()->value; if (arg_name == "url") configuration.url = arg_value.safeGet(); @@ -293,7 +326,7 @@ std::optional getURLBasedDataSourceConfiguration(const else if (arg_name == "structure") configuration.structure = arg_value.safeGet(); else - non_common_args.emplace_back(std::make_pair(arg_name, arg_value)); + non_common_args.emplace_back(std::make_pair(arg_name, arg_value_ast)); } else { diff --git a/src/Storages/ExternalDataSourceConfiguration.h b/src/Storages/ExternalDataSourceConfiguration.h index 5f88653807b..e3b589b1bb4 100644 --- a/src/Storages/ExternalDataSourceConfiguration.h +++ b/src/Storages/ExternalDataSourceConfiguration.h @@ -19,6 +19,7 @@ struct ExternalDataSourceConfiguration String schema; std::vector> addresses; /// Failover replicas. + String addresses_expr; String toString() const; @@ -45,7 +46,7 @@ struct StorageMongoDBConfiguration : ExternalDataSourceConfiguration }; -using StorageSpecificArgs = std::vector>; +using StorageSpecificArgs = std::vector>; struct ExternalDataSourceConfig { @@ -63,7 +64,7 @@ struct ExternalDataSourceConfig * Any key-value engine argument except common (`host`, `port`, `username`, `password`, `database`) * is returned in EngineArgs struct. */ -std::optional getExternalDataSourceConfiguration(const ASTs & args, ContextPtr context, bool is_database_engine = false); +std::optional getExternalDataSourceConfiguration(const ASTs & args, ContextPtr context, bool is_database_engine = false, bool throw_on_no_collection = true); std::optional getExternalDataSourceConfiguration( const Poco::Util::AbstractConfiguration & dict_config, const String & dict_config_prefix, ContextPtr context); diff --git a/src/Storages/FileLog/Buffer_fwd.h b/src/Storages/FileLog/Buffer_fwd.h new file mode 100644 index 00000000000..ec644aa7d36 --- /dev/null +++ b/src/Storages/FileLog/Buffer_fwd.h @@ -0,0 +1,10 @@ +#pragma once + +#include + +namespace DB +{ +class ReadBufferFromFileLog; + +using ReadBufferFromFileLogPtr = std::shared_ptr; +} diff --git a/src/Storages/FileLog/DirectoryWatcherBase.cpp b/src/Storages/FileLog/DirectoryWatcherBase.cpp new file mode 100644 index 00000000000..f2737219fd8 --- /dev/null +++ b/src/Storages/FileLog/DirectoryWatcherBase.cpp @@ -0,0 +1,148 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace DB +{ +namespace ErrorCodes +{ + extern const int FILE_DOESNT_EXIST; + extern const int BAD_FILE_TYPE; + extern const int IO_SETUP_ERROR; +} + +static constexpr int buffer_size = 4096; + +DirectoryWatcherBase::DirectoryWatcherBase( + FileLogDirectoryWatcher & owner_, const std::string & path_, ContextPtr context_, int event_mask_) + : WithContext(context_) + , owner(owner_) + , path(path_) + , event_mask(event_mask_) + , milliseconds_to_wait(owner.storage.getFileLogSettings()->poll_directory_watch_events_backoff_init.totalMilliseconds()) +{ + if (!std::filesystem::exists(path)) + throw Exception(ErrorCodes::FILE_DOESNT_EXIST, "Path {} does not exist", path); + + if (!std::filesystem::is_directory(path)) + throw Exception(ErrorCodes::BAD_FILE_TYPE, "Path {} is not a directory", path); + + fd = inotify_init(); + if (fd == -1) + throwFromErrno("Cannot initialize inotify", ErrorCodes::IO_SETUP_ERROR); + + watch_task = getContext()->getSchedulePool().createTask("directory_watch", [this] { watchFunc(); }); + start(); +} + +void DirectoryWatcherBase::watchFunc() +{ + int mask = 0; + if (eventMask() & DirectoryWatcherBase::DW_ITEM_ADDED) + mask |= IN_CREATE; + if (eventMask() & DirectoryWatcherBase::DW_ITEM_REMOVED) + mask |= IN_DELETE; + if (eventMask() & DirectoryWatcherBase::DW_ITEM_MODIFIED) + mask |= IN_MODIFY; + if (eventMask() & DirectoryWatcherBase::DW_ITEM_MOVED_FROM) + mask |= IN_MOVED_FROM; + if (eventMask() & DirectoryWatcherBase::DW_ITEM_MOVED_TO) + mask |= IN_MOVED_TO; + + int wd = inotify_add_watch(fd, path.c_str(), mask); + if (wd == -1) + { + owner.onError(Exception(ErrorCodes::IO_SETUP_ERROR, "Watch directory {} failed", path)); + throwFromErrnoWithPath("Watch directory {} failed", path, ErrorCodes::IO_SETUP_ERROR); + } + + std::string buffer; + buffer.resize(buffer_size); + pollfd pfd; + pfd.fd = fd; + pfd.events = POLLIN; + while (!stopped) + { + const auto & settings = owner.storage.getFileLogSettings(); + if (poll(&pfd, 1, milliseconds_to_wait) > 0 && pfd.revents & POLLIN) + { + milliseconds_to_wait = settings->poll_directory_watch_events_backoff_init.totalMilliseconds(); + int n = read(fd, buffer.data(), buffer.size()); + int i = 0; + if (n > 0) + { + while (n > 0) + { + struct inotify_event * p_event = reinterpret_cast(buffer.data() + i); + + if (p_event->len > 0) + { + if ((p_event->mask & IN_CREATE) && (eventMask() & DirectoryWatcherBase::DW_ITEM_ADDED)) + { + DirectoryWatcherBase::DirectoryEvent ev(p_event->name, DirectoryWatcherBase::DW_ITEM_ADDED); + owner.onItemAdded(ev); + } + if ((p_event->mask & IN_DELETE) && (eventMask() & DirectoryWatcherBase::DW_ITEM_REMOVED)) + { + DirectoryWatcherBase::DirectoryEvent ev(p_event->name, DirectoryWatcherBase::DW_ITEM_REMOVED); + owner.onItemRemoved(ev); + } + if ((p_event->mask & IN_MODIFY) && (eventMask() & DirectoryWatcherBase::DW_ITEM_MODIFIED)) + { + DirectoryWatcherBase::DirectoryEvent ev(p_event->name, DirectoryWatcherBase::DW_ITEM_MODIFIED); + owner.onItemModified(ev); + } + if ((p_event->mask & IN_MOVED_FROM) && (eventMask() & DirectoryWatcherBase::DW_ITEM_MOVED_FROM)) + { + DirectoryWatcherBase::DirectoryEvent ev(p_event->name, DirectoryWatcherBase::DW_ITEM_MOVED_FROM); + owner.onItemMovedFrom(ev); + } + if ((p_event->mask & IN_MOVED_TO) && (eventMask() & DirectoryWatcherBase::DW_ITEM_MOVED_TO)) + { + DirectoryWatcherBase::DirectoryEvent ev(p_event->name, DirectoryWatcherBase::DW_ITEM_MOVED_TO); + owner.onItemMovedTo(ev); + } + } + + i += sizeof(inotify_event) + p_event->len; + n -= sizeof(inotify_event) + p_event->len; + } + } + + /// Wake up reader thread + owner.storage.wakeUp(); + } + else + { + if (milliseconds_to_wait < static_cast(settings->poll_directory_watch_events_backoff_max.totalMilliseconds())) + milliseconds_to_wait *= settings->poll_directory_watch_events_backoff_factor.value; + } + } +} + +DirectoryWatcherBase::~DirectoryWatcherBase() +{ + stop(); + close(fd); +} + +void DirectoryWatcherBase::start() +{ + if (watch_task) + watch_task->activateAndSchedule(); +} + +void DirectoryWatcherBase::stop() +{ + stopped = true; + if (watch_task) + watch_task->deactivate(); +} + +} diff --git a/src/Storages/FileLog/DirectoryWatcherBase.h b/src/Storages/FileLog/DirectoryWatcherBase.h new file mode 100644 index 00000000000..a640f686c8a --- /dev/null +++ b/src/Storages/FileLog/DirectoryWatcherBase.h @@ -0,0 +1,108 @@ +#pragma once + +#include + +#include +#include +#include + +namespace DB +{ +class FileLogDirectoryWatcher; + +class DirectoryWatcherBase : WithContext +{ + /// Most of code in this class is copy from the Poco project: + /// https://github.com/ClickHouse-Extras/poco/blob/clickhouse/Foundation/src/DirectoryWatcher.cpp + /// This class is used to get notifications about changes + /// to the filesystem, more precisely, to a specific + /// directory. Changes to a directory are reported via + /// events. + /// + /// A thread will be created that watches the specified + /// directory for changes. Events are reported in the context + /// of this thread. + /// + /// Note that changes to files in subdirectories of the watched + /// directory are not reported. Separate DirectoryWatcher objects + /// must be created for these directories if they should be watched. +public: + enum DirectoryEventType + { + DW_ITEM_ADDED = 1, + /// A new item has been created and added to the directory. + + DW_ITEM_REMOVED = 2, + /// An item has been removed from the directory. + + DW_ITEM_MODIFIED = 4, + /// An item has been modified. + + DW_ITEM_MOVED_FROM = 8, + /// An item has been renamed or moved. This event delivers the old name. + + DW_ITEM_MOVED_TO = 16 + /// An item has been renamed or moved. This event delivers the new name. + }; + + enum DirectoryEventMask + { + /// Enables all event types. + DW_FILTER_ENABLE_ALL = 31, + + /// Disables all event types. + DW_FILTER_DISABLE_ALL = 0 + }; + + struct DirectoryEvent + { + DirectoryEvent(const std::string & f, DirectoryEventType ev) : path(f), event(ev) { } + + /// The directory or file that has been changed. + const std::string path; + /// The kind of event. + DirectoryEventType event; + }; + + + DirectoryWatcherBase() = delete; + DirectoryWatcherBase(const DirectoryWatcherBase &) = delete; + DirectoryWatcherBase & operator=(const DirectoryWatcherBase &) = delete; + + /// Creates a DirectoryWatcher for the directory given in path. + /// To enable only specific events, an eventMask can be specified by + /// OR-ing the desired event IDs (e.g., DW_ITEM_ADDED | DW_ITEM_MODIFIED). + explicit DirectoryWatcherBase( + FileLogDirectoryWatcher & owner_, const std::string & path_, ContextPtr context_, int event_mask_ = DW_FILTER_ENABLE_ALL); + + ~DirectoryWatcherBase(); + + /// Returns the value of the eventMask passed to the constructor. + int eventMask() const { return event_mask; } + + /// Returns the directory being watched. + const std::string & directory() const; + + void watchFunc(); + +protected: + void start(); + void stop(); + +private: + FileLogDirectoryWatcher & owner; + + using TaskThread = BackgroundSchedulePool::TaskHolder; + TaskThread watch_task; + + std::atomic stopped{false}; + + + const std::string path; + int event_mask; + uint64_t milliseconds_to_wait; + + int fd; +}; + +} diff --git a/src/Storages/FileLog/FileLogDirectoryWatcher.cpp b/src/Storages/FileLog/FileLogDirectoryWatcher.cpp new file mode 100644 index 00000000000..192721f9f3c --- /dev/null +++ b/src/Storages/FileLog/FileLogDirectoryWatcher.cpp @@ -0,0 +1,139 @@ +#include + +namespace DB +{ +FileLogDirectoryWatcher::FileLogDirectoryWatcher(const std::string & path_, StorageFileLog & storage_, ContextPtr context_) + : path(path_) + , storage(storage_) + , log(&Poco::Logger::get("FileLogDirectoryWatcher(" + path + ")")) + , dw(std::make_unique(*this, path, context_)) +{ +} + +FileLogDirectoryWatcher::Events FileLogDirectoryWatcher::getEventsAndReset() +{ + std::lock_guard lock(mutex); + Events res; + res.swap(events); + return res; +} + +FileLogDirectoryWatcher::Error FileLogDirectoryWatcher::getErrorAndReset() +{ + std::lock_guard lock(mutex); + Error old_error = error; + error = {}; + return old_error; +} + +const std::string & FileLogDirectoryWatcher::getPath() const +{ + return path; +} + +void FileLogDirectoryWatcher::onItemAdded(DirectoryWatcherBase::DirectoryEvent ev) +{ + std::lock_guard lock(mutex); + + EventInfo info{ev.event, "onItemAdded"}; + std::string event_path = ev.path; + + if (auto it = events.find(event_path); it != events.end()) + { + it->second.file_events.emplace_back(info); + } + else + { + events.emplace(event_path, FileEvents{.file_events = std::vector{info}}); + } +} + + +void FileLogDirectoryWatcher::onItemRemoved(DirectoryWatcherBase::DirectoryEvent ev) +{ + std::lock_guard lock(mutex); + + EventInfo info{ev.event, "onItemRemoved"}; + std::string event_path = ev.path; + + if (auto it = events.find(event_path); it != events.end()) + { + it->second.file_events.emplace_back(info); + } + else + { + events.emplace(event_path, FileEvents{.file_events = std::vector{info}}); + } +} + +/// Optimize for MODIFY event, during a streamToViews period, since the log files +/// are append only, there are may a lots of MODIFY events produced for one file. +/// For example, appending 10000 logs into one file will result in 10000 MODIFY event. +/// So, if we record all of these events, it will use a lot of memory, and then we +/// need to handle it one by one in StorageFileLog::updateFileInfos, this is unnecessary +/// because it is equal to just record and handle one MODIY event +void FileLogDirectoryWatcher::onItemModified(DirectoryWatcherBase::DirectoryEvent ev) +{ + std::lock_guard lock(mutex); + + auto event_path = ev.path; + EventInfo info{ev.event, "onItemModified"}; + if (auto it = events.find(event_path); it != events.end()) + { + /// Already have MODIFY event for this file + if (it->second.received_modification_event) + return; + else + { + it->second.received_modification_event = true; + it->second.file_events.emplace_back(info); + } + } + else + { + events.emplace(event_path, FileEvents{.received_modification_event = true, .file_events = std::vector{info}}); + } +} + +void FileLogDirectoryWatcher::onItemMovedFrom(DirectoryWatcherBase::DirectoryEvent ev) +{ + std::lock_guard lock(mutex); + + EventInfo info{ev.event, "onItemMovedFrom"}; + std::string event_path = ev.path; + + if (auto it = events.find(event_path); it != events.end()) + { + it->second.file_events.emplace_back(info); + } + else + { + events.emplace(event_path, FileEvents{.file_events = std::vector{info}}); + } +} + +void FileLogDirectoryWatcher::onItemMovedTo(DirectoryWatcherBase::DirectoryEvent ev) +{ + std::lock_guard lock(mutex); + + EventInfo info{ev.event, "onItemMovedTo"}; + std::string event_path = ev.path; + + if (auto it = events.find(event_path); it != events.end()) + { + it->second.file_events.emplace_back(info); + } + else + { + events.emplace(event_path, FileEvents{.file_events = std::vector{info}}); + } +} + +void FileLogDirectoryWatcher::onError(Exception e) +{ + std::lock_guard lock(mutex); + LOG_ERROR(log, "Error happened during watching directory: {}", error.error_msg); + error.has_error = true; + error.error_msg = e.message(); +} +} diff --git a/src/Storages/FileLog/FileLogDirectoryWatcher.h b/src/Storages/FileLog/FileLogDirectoryWatcher.h new file mode 100644 index 00000000000..0b0c86397aa --- /dev/null +++ b/src/Storages/FileLog/FileLogDirectoryWatcher.h @@ -0,0 +1,77 @@ +#pragma once + +#include + +#include + +#include +#include + +namespace DB +{ +class StorageFileLog; + +class FileLogDirectoryWatcher +{ +public: + struct EventInfo + { + DirectoryWatcherBase::DirectoryEventType type; + std::string callback; + }; + + struct FileEvents + { + bool received_modification_event = false; + std::vector file_events; + }; + + using Events = std::unordered_map; + + struct Error + { + bool has_error = false; + std::string error_msg = {}; + }; + + FileLogDirectoryWatcher(const std::string & path_, StorageFileLog & storage_, ContextPtr context_); + ~FileLogDirectoryWatcher() = default; + + Events getEventsAndReset(); + + Error getErrorAndReset(); + + const std::string & getPath() const; + +private: + friend class DirectoryWatcherBase; + /// Here must pass by value, otherwise will lead to stack-use-of-scope + void onItemAdded(DirectoryWatcherBase::DirectoryEvent ev); + void onItemRemoved(DirectoryWatcherBase::DirectoryEvent ev); + void onItemModified(DirectoryWatcherBase::DirectoryEvent ev); + void onItemMovedFrom(DirectoryWatcherBase::DirectoryEvent ev); + void onItemMovedTo(DirectoryWatcherBase::DirectoryEvent ev); + void onError(Exception); + + const std::string path; + + StorageFileLog & storage; + + /// Note, in order to avoid data race found by fuzzer, put events before dw, + /// such that when this class destruction, dw will be destructed before events. + /// The data race is because dw create a separate thread to monitor file events + /// and put into events, then if we destruct events first, the monitor thread still + /// running, it may access events during events destruction, leads to data race. + /// And we should put other members before dw as well, because all of them can be + /// accessed in thread created by dw. + Events events; + + Poco::Logger * log; + + std::mutex mutex; + + Error error; + + std::unique_ptr dw; +}; +} diff --git a/src/Storages/FileLog/FileLogSettings.cpp b/src/Storages/FileLog/FileLogSettings.cpp new file mode 100644 index 00000000000..2cd42c35870 --- /dev/null +++ b/src/Storages/FileLog/FileLogSettings.cpp @@ -0,0 +1,41 @@ +#include +#include +#include +#include +#include + + +namespace DB +{ + +namespace ErrorCodes +{ + extern const int UNKNOWN_SETTING; +} + +IMPLEMENT_SETTINGS_TRAITS(FileLogSettingsTraits, LIST_OF_FILELOG_SETTINGS) + +void FileLogSettings::loadFromQuery(ASTStorage & storage_def) +{ + if (storage_def.settings) + { + try + { + applyChanges(storage_def.settings->changes); + } + catch (Exception & e) + { + if (e.code() == ErrorCodes::UNKNOWN_SETTING) + e.addMessage("for storage " + storage_def.engine->name); + throw; + } + } + else + { + auto settings_ast = std::make_shared(); + settings_ast->is_standalone = false; + storage_def.set(storage_def.settings, settings_ast); + } +} + +} diff --git a/src/Storages/FileLog/FileLogSettings.h b/src/Storages/FileLog/FileLogSettings.h new file mode 100644 index 00000000000..865727bd864 --- /dev/null +++ b/src/Storages/FileLog/FileLogSettings.h @@ -0,0 +1,37 @@ +#pragma once + +#include +#include + + +namespace DB +{ +class ASTStorage; + + +#define FILELOG_RELATED_SETTINGS(M) \ + /* default is stream_poll_timeout_ms */ \ + M(Milliseconds, poll_timeout_ms, 0, "Timeout for single poll from StorageFileLog.", 0) \ + M(UInt64, poll_max_batch_size, 0, "Maximum amount of messages to be polled in a single StorageFileLog poll.", 0) \ + M(UInt64, max_block_size, 0, "Number of row collected by poll(s) for flushing data from StorageFileLog.", 0) \ + M(UInt64, max_threads, 0, "Number of max threads to parse files, default is 0, which means the number will be max(1, physical_cpu_cores / 4)", 0) \ + M(Milliseconds, poll_directory_watch_events_backoff_init, 500, "The initial sleep value for watch directory thread.", 0) \ + M(Milliseconds, poll_directory_watch_events_backoff_max, 32000, "The max sleep value for watch directory thread.", 0) \ + M(UInt64, poll_directory_watch_events_backoff_factor, 2, "The speed of backoff, exponential by default", 0) + +#define LIST_OF_FILELOG_SETTINGS(M) \ + FILELOG_RELATED_SETTINGS(M) \ + FORMAT_FACTORY_SETTINGS(M) + +DECLARE_SETTINGS_TRAITS(FileLogSettingsTraits, LIST_OF_FILELOG_SETTINGS) + + +/** Settings for the FileLog engine. + * Could be loaded from a CREATE TABLE query (SETTINGS clause). + */ +struct FileLogSettings : public BaseSettings +{ + void loadFromQuery(ASTStorage & storage_def); +}; + +} diff --git a/src/Storages/FileLog/FileLogSource.cpp b/src/Storages/FileLog/FileLogSource.cpp new file mode 100644 index 00000000000..a8da34f3204 --- /dev/null +++ b/src/Storages/FileLog/FileLogSource.cpp @@ -0,0 +1,143 @@ +#include +#include +#include +#include +#include +#include +#include + +namespace DB +{ +static constexpr auto MAX_FAILED_POLL_ATTEMPTS = 10; + +FileLogSource::FileLogSource( + StorageFileLog & storage_, + const StorageMetadataPtr & metadata_snapshot_, + const ContextPtr & context_, + const Names & columns, + size_t max_block_size_, + size_t poll_time_out_, + size_t stream_number_, + size_t max_streams_number_) + : SourceWithProgress(metadata_snapshot_->getSampleBlockForColumns(columns, storage_.getVirtuals(), storage_.getStorageID())) + , storage(storage_) + , metadata_snapshot(metadata_snapshot_) + , context(context_) + , column_names(columns) + , max_block_size(max_block_size_) + , poll_time_out(poll_time_out_) + , stream_number(stream_number_) + , max_streams_number(max_streams_number_) + , non_virtual_header(metadata_snapshot_->getSampleBlockNonMaterialized()) + , virtual_header( + metadata_snapshot->getSampleBlockForColumns(storage.getVirtualColumnNames(), storage.getVirtuals(), storage.getStorageID())) +{ + buffer = std::make_unique(storage, max_block_size, poll_time_out, context, stream_number_, max_streams_number_); + + const auto & file_infos = storage.getFileInfos(); + + size_t files_per_stream = file_infos.file_names.size() / max_streams_number; + start = stream_number * files_per_stream; + end = stream_number == max_streams_number - 1 ? file_infos.file_names.size() : (stream_number + 1) * files_per_stream; + + storage.increaseStreams(); +} + +FileLogSource::~FileLogSource() +{ + try + { + if (!finished) + onFinish(); + } + catch (...) + { + tryLogCurrentException(__PRETTY_FUNCTION__); + } + storage.reduceStreams(); +} + +void FileLogSource::onFinish() +{ + storage.closeFilesAndStoreMeta(start, end); + finished = true; +} + +Chunk FileLogSource::generate() +{ + /// Store metas of last written chunk into disk + storage.storeMetas(start, end); + + if (!buffer || buffer->noRecords()) + { + /// There is no onFinish for ISource, we call it + /// when no records return to close files + onFinish(); + return {}; + } + + MutableColumns virtual_columns = virtual_header.cloneEmptyColumns(); + + auto input_format + = FormatFactory::instance().getInputFormat(storage.getFormatName(), *buffer, non_virtual_header, context, max_block_size); + + StreamingFormatExecutor executor(non_virtual_header, input_format); + + size_t total_rows = 0; + size_t failed_poll_attempts = 0; + + Stopwatch watch; + while (true) + { + size_t new_rows = 0; + if (buffer->poll()) + new_rows = executor.execute(); + + if (new_rows) + { + auto file_name = buffer->getFileName(); + auto offset = buffer->getOffset(); + for (size_t i = 0; i < new_rows; ++i) + { + virtual_columns[0]->insert(file_name); + virtual_columns[1]->insert(offset); + } + total_rows = total_rows + new_rows; + } + else /// poll succeed, but parse failed + { + ++failed_poll_attempts; + } + + if (!buffer->hasMorePolledRecords() + && ((total_rows >= max_block_size) || watch.elapsedMilliseconds() > poll_time_out + || failed_poll_attempts >= MAX_FAILED_POLL_ATTEMPTS)) + { + break; + } + } + + if (total_rows == 0) + { + onFinish(); + return {}; + } + + auto result_block = non_virtual_header.cloneWithColumns(executor.getResultColumns()); + auto virtual_block = virtual_header.cloneWithColumns(std::move(virtual_columns)); + + for (const auto & column : virtual_block.getColumnsWithTypeAndName()) + result_block.insert(column); + + auto converting_dag = ActionsDAG::makeConvertingActions( + result_block.cloneEmpty().getColumnsWithTypeAndName(), + getPort().getHeader().getColumnsWithTypeAndName(), + ActionsDAG::MatchColumnsMode::Name); + + auto converting_actions = std::make_shared(std::move(converting_dag)); + converting_actions->execute(result_block); + + return Chunk(result_block.getColumns(), result_block.rows()); +} + +} diff --git a/src/Storages/FileLog/FileLogSource.h b/src/Storages/FileLog/FileLogSource.h new file mode 100644 index 00000000000..c9fd1cc5a79 --- /dev/null +++ b/src/Storages/FileLog/FileLogSource.h @@ -0,0 +1,60 @@ +#pragma once + +#include +#include +#include + +namespace Poco +{ + class Logger; +} +namespace DB +{ +class FileLogSource : public SourceWithProgress +{ +public: + FileLogSource( + StorageFileLog & storage_, + const StorageMetadataPtr & metadata_snapshot_, + const ContextPtr & context_, + const Names & columns, + size_t max_block_size_, + size_t poll_time_out_, + size_t stream_number_, + size_t max_streams_number_); + + String getName() const override { return "FileLog"; } + + bool noRecords() { return !buffer || buffer->noRecords(); } + + void onFinish(); + + virtual ~FileLogSource() override; + +protected: + Chunk generate() override; + +private: + StorageFileLog & storage; + StorageMetadataPtr metadata_snapshot; + ContextPtr context; + Names column_names; + UInt64 max_block_size; + + size_t poll_time_out; + + size_t stream_number; + size_t max_streams_number; + + std::unique_ptr buffer; + + Block non_virtual_header; + Block virtual_header; + + /// The start pos and end pos of files responsible by this stream, + /// does not include end + size_t start; + size_t end; +}; + +} diff --git a/src/Storages/FileLog/ReadBufferFromFileLog.cpp b/src/Storages/FileLog/ReadBufferFromFileLog.cpp new file mode 100644 index 00000000000..86caac57a53 --- /dev/null +++ b/src/Storages/FileLog/ReadBufferFromFileLog.cpp @@ -0,0 +1,175 @@ +#include +#include +#include + +#include + +#include +#include + +namespace DB +{ +namespace ErrorCodes +{ + extern const int CANNOT_READ_ALL_DATA; +} + +ReadBufferFromFileLog::ReadBufferFromFileLog( + StorageFileLog & storage_, + size_t max_batch_size, + size_t poll_timeout_, + ContextPtr context_, + size_t stream_number_, + size_t max_streams_number_) + : ReadBuffer(nullptr, 0) + , log(&Poco::Logger::get("ReadBufferFromFileLog " + toString(stream_number_))) + , storage(storage_) + , batch_size(max_batch_size) + , poll_timeout(poll_timeout_) + , context(context_) + , stream_number(stream_number_) + , max_streams_number(max_streams_number_) +{ + current = records.begin(); + allowed = false; +} + +bool ReadBufferFromFileLog::poll() +{ + if (hasMorePolledRecords()) + { + allowed = true; + return true; + } + + auto new_records = pollBatch(batch_size); + if (new_records.empty()) + { + buffer_status = BufferStatus::NO_RECORD_RETURNED; + LOG_TRACE(log, "No new records to read"); + return false; + } + else + { + records = std::move(new_records); + current = records.begin(); + + LOG_TRACE(log, "Polled batch of {} records. ", records.size()); + + buffer_status = BufferStatus::POLLED_OK; + allowed = true; + return true; + } +} + +ReadBufferFromFileLog::Records ReadBufferFromFileLog::pollBatch(size_t batch_size_) +{ + Records new_records; + new_records.reserve(batch_size_); + + readNewRecords(new_records, batch_size); + if (new_records.size() == batch_size_ || stream_out) + return new_records; + + Stopwatch watch; + while (watch.elapsedMilliseconds() < poll_timeout && new_records.size() != batch_size_) + { + readNewRecords(new_records, batch_size); + /// All ifstrem reach end, no need to wait for timeout, + /// since file status can not be updated during a streamToViews + if (stream_out) + break; + } + + return new_records; +} + +void ReadBufferFromFileLog::readNewRecords(ReadBufferFromFileLog::Records & new_records, size_t batch_size_) +{ + size_t need_records_size = batch_size_ - new_records.size(); + size_t read_records_size = 0; + + auto & file_infos = storage.getFileInfos(); + + size_t files_per_stream = file_infos.file_names.size() / max_streams_number; + size_t start = stream_number * files_per_stream; + size_t end = stream_number == max_streams_number - 1 ? file_infos.file_names.size() : (stream_number + 1) * files_per_stream; + + for (size_t i = start; i < end; ++i) + { + const auto & file_name = file_infos.file_names[i]; + + auto & file_ctx = StorageFileLog::findInMap(file_infos.context_by_name, file_name); + if (file_ctx.status == StorageFileLog::FileStatus::NO_CHANGE) + continue; + + auto & file_meta = StorageFileLog::findInMap(file_infos.meta_by_inode, file_ctx.inode); + + if (!file_ctx.reader) + throw Exception(ErrorCodes::CANNOT_READ_ALL_DATA, "Ifstream for file {} is not initialized", file_meta.file_name); + + auto & reader = file_ctx.reader.value(); + StorageFileLog::assertStreamGood(reader); + + Record record; + while (read_records_size < need_records_size) + { + /// Need to get offset before reading record from stream + auto offset = reader.tellg(); + if (static_cast(offset) >= file_meta.last_open_end) + break; + record.offset = offset; + StorageFileLog::assertStreamGood(reader); + + record.file_name = file_name; + + + std::getline(reader, record.data); + StorageFileLog::assertStreamGood(reader); + + new_records.emplace_back(record); + ++read_records_size; + } + + UInt64 current_position = reader.tellg(); + StorageFileLog::assertStreamGood(reader); + + file_meta.last_writen_position = current_position; + + /// stream reach to end + if (current_position == file_meta.last_open_end) + { + file_ctx.status = StorageFileLog::FileStatus::NO_CHANGE; + } + + /// All ifstream reach end + if (i == end - 1 && (file_ctx.status == StorageFileLog::FileStatus::NO_CHANGE)) + { + stream_out = true; + } + + if (read_records_size == need_records_size) + { + break; + } + } +} + +bool ReadBufferFromFileLog::nextImpl() +{ + if (!allowed || !hasMorePolledRecords()) + return false; + + auto * new_position = const_cast(current->data.data()); + BufferBase::set(new_position, current->data.size(), 0); + allowed = false; + + current_file = current->file_name; + current_offset = current->offset; + + ++current; + + return true; +} + +} diff --git a/src/Storages/FileLog/ReadBufferFromFileLog.h b/src/Storages/FileLog/ReadBufferFromFileLog.h new file mode 100644 index 00000000000..d581ead951e --- /dev/null +++ b/src/Storages/FileLog/ReadBufferFromFileLog.h @@ -0,0 +1,91 @@ +#pragma once + +#include +#include +#include + +#include +#include + +namespace Poco +{ + class Logger; +} + +namespace DB +{ +class ReadBufferFromFileLog : public ReadBuffer +{ +public: + ReadBufferFromFileLog( + StorageFileLog & storage_, + size_t max_batch_size, + size_t poll_timeout_, + ContextPtr context_, + size_t stream_number_, + size_t max_streams_number_); + + ~ReadBufferFromFileLog() override = default; + + auto pollTimeout() const { return poll_timeout; } + + bool hasMorePolledRecords() const { return current != records.end(); } + + bool poll(); + + bool noRecords() { return buffer_status == BufferStatus::NO_RECORD_RETURNED; } + + auto getFileName() const { return current_file; } + auto getOffset() const { return current_offset; } + +private: + enum class BufferStatus + { + INIT, + NO_RECORD_RETURNED, + POLLED_OK, + }; + + BufferStatus buffer_status = BufferStatus::INIT; + + Poco::Logger * log; + + StorageFileLog & storage; + + bool stream_out = false; + + size_t batch_size; + size_t poll_timeout; + + ContextPtr context; + + size_t stream_number; + size_t max_streams_number; + + bool allowed = true; + + using RecordData = std::string; + struct Record + { + RecordData data; + std::string file_name; + /// Offset is the start of a row, which is needed for virtual columns. + UInt64 offset; + }; + using Records = std::vector; + + Records records; + Records::const_iterator current; + + String current_file; + UInt64 current_offset = 0; + + using TaskThread = BackgroundSchedulePool::TaskHolder; + + Records pollBatch(size_t batch_size_); + + void readNewRecords(Records & new_records, size_t batch_size_); + + bool nextImpl() override; +}; +} diff --git a/src/Storages/FileLog/StorageFileLog.cpp b/src/Storages/FileLog/StorageFileLog.cpp new file mode 100644 index 00000000000..1ba16fc821c --- /dev/null +++ b/src/Storages/FileLog/StorageFileLog.cpp @@ -0,0 +1,978 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace DB +{ + +namespace ErrorCodes +{ + extern const int NUMBER_OF_ARGUMENTS_DOESNT_MATCH; + extern const int BAD_ARGUMENTS; + extern const int CANNOT_STAT; + extern const int BAD_FILE_TYPE; + extern const int CANNOT_READ_ALL_DATA; + extern const int LOGICAL_ERROR; + extern const int TABLE_METADATA_ALREADY_EXISTS; + extern const int CANNOT_SELECT; + extern const int QUERY_NOT_ALLOWED; +} + +namespace +{ + const auto MAX_THREAD_WORK_DURATION_MS = 60000; +} + +StorageFileLog::StorageFileLog( + const StorageID & table_id_, + ContextPtr context_, + const ColumnsDescription & columns_, + const String & path_, + const String & format_name_, + std::unique_ptr settings, + const String & comment, + bool attach) + : IStorage(table_id_) + , WithContext(context_->getGlobalContext()) + , filelog_settings(std::move(settings)) + , path(path_) + , format_name(format_name_) + , log(&Poco::Logger::get("StorageFileLog (" + table_id_.table_name + ")")) + , milliseconds_to_wait(filelog_settings->poll_directory_watch_events_backoff_init.totalMilliseconds()) +{ + StorageInMemoryMetadata storage_metadata; + storage_metadata.setColumns(columns_); + storage_metadata.setComment(comment); + setInMemoryMetadata(storage_metadata); + + try + { + loadMetaFiles(attach); + loadFiles(); + + assert(file_infos.file_names.size() == file_infos.meta_by_inode.size()); + assert(file_infos.file_names.size() == file_infos.context_by_name.size()); + + if (path_is_directory) + directory_watch = std::make_unique(root_data_path, *this, getContext()); + + auto thread = getContext()->getSchedulePool().createTask(log->name(), [this] { threadFunc(); }); + task = std::make_shared(std::move(thread)); + } + catch (...) + { + if (!attach) + throw; + tryLogCurrentException(__PRETTY_FUNCTION__); + } +} + +void StorageFileLog::loadMetaFiles(bool attach) +{ + const auto & storage = getStorageID(); + root_meta_path + = std::filesystem::path(getContext()->getPath()) / ".filelog_storage_metadata" / storage.getDatabaseName() / storage.getTableName(); + + /// Attach table + if (attach) + { + /// Meta file may lost, log and create directory + if (!std::filesystem::exists(root_meta_path)) + { + /// Create root_meta_path directory when store meta data + LOG_ERROR(log, "Metadata files of table {} are lost.", getStorageID().getTableName()); + } + /// Load all meta info to file_infos; + deserialize(); + } + /// Create table, just create meta data directory + else + { + if (std::filesystem::exists(root_meta_path)) + { + throw Exception( + ErrorCodes::TABLE_METADATA_ALREADY_EXISTS, + "Metadata files already exist by path: {}, remove them manually if it is intended", + root_meta_path); + } + std::filesystem::create_directories(root_meta_path); + } +} + +void StorageFileLog::loadFiles() +{ + if (!fileOrSymlinkPathStartsWith(path, getContext()->getUserFilesPath())) + { + throw Exception( + ErrorCodes::BAD_ARGUMENTS, "The absolute data path should be inside `user_files_path`({})", getContext()->getUserFilesPath()); + } + + auto absolute_path = std::filesystem::absolute(path); + absolute_path = absolute_path.lexically_normal(); /// Normalize path. + + if (std::filesystem::is_regular_file(absolute_path)) + { + path_is_directory = false; + root_data_path = absolute_path.parent_path(); + + file_infos.file_names.push_back(absolute_path.filename()); + } + else if (std::filesystem::is_directory(absolute_path)) + { + root_data_path = absolute_path; + /// Just consider file with depth 1 + for (const auto & dir_entry : std::filesystem::directory_iterator{absolute_path}) + { + if (dir_entry.is_regular_file()) + { + file_infos.file_names.push_back(dir_entry.path().filename()); + } + } + } + else + { + throw Exception(ErrorCodes::BAD_ARGUMENTS, "The path {} neither a regular file, nor a directory", absolute_path.c_str()); + } + + /// Get files inode + for (const auto & file : file_infos.file_names) + { + auto inode = getInode(getFullDataPath(file)); + file_infos.context_by_name.emplace(file, FileContext{.inode = inode}); + } + + /// Update file meta or create file meta + for (const auto & [file, ctx] : file_infos.context_by_name) + { + if (auto it = file_infos.meta_by_inode.find(ctx.inode); it != file_infos.meta_by_inode.end()) + { + /// data file have been renamed, need update meta file's name + if (it->second.file_name != file) + { + std::filesystem::rename(getFullMetaPath(it->second.file_name), getFullMetaPath(file)); + it->second.file_name = file; + } + } + /// New file + else + { + FileMeta meta{file, 0, 0}; + file_infos.meta_by_inode.emplace(ctx.inode, meta); + } + } + + /// Clear unneeded meta file, because data files may be deleted + if (file_infos.meta_by_inode.size() > file_infos.context_by_name.size()) + { + InodeToFileMeta valid_metas; + valid_metas.reserve(file_infos.context_by_name.size()); + for (const auto & [inode, meta] : file_infos.meta_by_inode) + { + /// Note, here we need to use inode to judge does the meta file is valid. + /// In the case that when a file deleted, then we create new file with the + /// same name, it will have different inode number with stored meta file, + /// so the stored meta file is invalid + if (auto it = file_infos.context_by_name.find(meta.file_name); + it != file_infos.context_by_name.end() && it->second.inode == inode) + valid_metas.emplace(inode, meta); + /// Delete meta file from filesystem + else + std::filesystem::remove(getFullMetaPath(meta.file_name)); + } + file_infos.meta_by_inode.swap(valid_metas); + } +} + +void StorageFileLog::serialize() const +{ + if (!std::filesystem::exists(root_meta_path)) + { + std::filesystem::create_directories(root_meta_path); + } + for (const auto & [inode, meta] : file_infos.meta_by_inode) + { + auto full_name = getFullMetaPath(meta.file_name); + if (!std::filesystem::exists(full_name)) + { + FS::createFile(full_name); + } + else + { + checkOffsetIsValid(full_name, meta.last_writen_position); + } + WriteBufferFromFile out(full_name); + writeIntText(inode, out); + writeChar('\n', out); + writeIntText(meta.last_writen_position, out); + } +} + +void StorageFileLog::serialize(UInt64 inode, const FileMeta & file_meta) const +{ + if (!std::filesystem::exists(root_meta_path)) + { + std::filesystem::create_directories(root_meta_path); + } + auto full_name = getFullMetaPath(file_meta.file_name); + if (!std::filesystem::exists(full_name)) + { + FS::createFile(full_name); + } + else + { + checkOffsetIsValid(full_name, file_meta.last_writen_position); + } + WriteBufferFromFile out(full_name); + writeIntText(inode, out); + writeChar('\n', out); + writeIntText(file_meta.last_writen_position, out); +} + +void StorageFileLog::deserialize() +{ + if (!std::filesystem::exists(root_meta_path)) + return; + /// In case of single file (not a watched directory), + /// iterated directory always has one file inside. + for (const auto & dir_entry : std::filesystem::directory_iterator{root_meta_path}) + { + if (!dir_entry.is_regular_file()) + { + throw Exception( + ErrorCodes::BAD_FILE_TYPE, + "The file {} under {} is not a regular file when deserializing meta files", + dir_entry.path().c_str(), + root_meta_path); + } + + ReadBufferFromFile in(dir_entry.path().c_str()); + FileMeta meta; + UInt64 inode, last_written_pos; + + if (!tryReadIntText(inode, in)) + { + throw Exception(ErrorCodes::CANNOT_READ_ALL_DATA, "Read meta file {} failed", dir_entry.path().c_str()); + } + assertChar('\n', in); + if (!tryReadIntText(last_written_pos, in)) + { + throw Exception(ErrorCodes::CANNOT_READ_ALL_DATA, "Read meta file {} failed", dir_entry.path().c_str()); + } + + meta.file_name = dir_entry.path().filename(); + meta.last_writen_position = last_written_pos; + + file_infos.meta_by_inode.emplace(inode, meta); + } +} + +UInt64 StorageFileLog::getInode(const String & file_name) +{ + struct stat file_stat; + if (stat(file_name.c_str(), &file_stat)) + { + throw Exception(ErrorCodes::CANNOT_STAT, "Can not get stat info of file {}", file_name); + } + return file_stat.st_ino; +} + +Pipe StorageFileLog::read( + const Names & column_names, + const StorageMetadataPtr & metadata_snapshot, + SelectQueryInfo & /* query_info */, + ContextPtr local_context, + QueryProcessingStage::Enum /* processed_stage */, + size_t /* max_block_size */, + unsigned /* num_streams */) +{ + /// If there are MVs depended on this table, we just forbid reading + if (has_dependent_mv) + { + throw Exception( + ErrorCodes::QUERY_NOT_ALLOWED, + "Can not make `SELECT` query from table {}, because it has attached dependencies. Remove dependent materialized views if " + "needed", + getStorageID().getTableName()); + } + + std::lock_guard lock(file_infos_mutex); + if (running_streams) + { + throw Exception("Another select query is running on this table, need to wait it finish.", ErrorCodes::CANNOT_SELECT); + } + + updateFileInfos(); + + /// No files to parse + if (file_infos.file_names.empty()) + { + LOG_WARNING(log, "There is a idle table named {}, no files need to parse.", getName()); + return Pipe{}; + } + + auto modified_context = Context::createCopy(local_context); + + auto max_streams_number = std::min(filelog_settings->max_threads, file_infos.file_names.size()); + + /// Each stream responsible for closing it's files and store meta + openFilesAndSetPos(); + + Pipes pipes; + pipes.reserve(max_streams_number); + for (size_t stream_number = 0; stream_number < max_streams_number; ++stream_number) + { + pipes.emplace_back(std::make_shared( + *this, + metadata_snapshot, + modified_context, + column_names, + getMaxBlockSize(), + getPollTimeoutMillisecond(), + stream_number, + max_streams_number)); + } + + return Pipe::unitePipes(std::move(pipes)); +} + +void StorageFileLog::increaseStreams() +{ + running_streams += 1; +} + +void StorageFileLog::reduceStreams() +{ + running_streams -= 1; +} + +void StorageFileLog::drop() +{ + try + { + if (std::filesystem::exists(root_meta_path)) + std::filesystem::remove_all(root_meta_path); + } + catch (...) + { + tryLogCurrentException(__PRETTY_FUNCTION__); + } +} + +void StorageFileLog::startup() +{ + try + { + if (task) + { + task->holder->activateAndSchedule(); + } + } + catch (...) + { + tryLogCurrentException(__PRETTY_FUNCTION__); + } +} + +void StorageFileLog::shutdown() +{ + try + { + if (task) + { + task->stream_cancelled = true; + + /// Reader thread may wait for wake up + wakeUp(); + + LOG_TRACE(log, "Waiting for cleanup"); + task->holder->deactivate(); + } + /// If no reading call and threadFunc, the log files will never + /// be opened, also just leave the work of close files and + /// store meta to streams. because if we close files in here, + /// may result in data race with unfinishing reading pipeline + } + catch (...) + { + tryLogCurrentException(__PRETTY_FUNCTION__); + task->holder->deactivate(); + } +} + +void StorageFileLog::assertStreamGood(const std::ifstream & reader) +{ + if (!reader.good()) + { + throw Exception(ErrorCodes::CANNOT_READ_ALL_DATA, "Stream is in bad state"); + } +} + +void StorageFileLog::openFilesAndSetPos() +{ + for (const auto & file : file_infos.file_names) + { + auto & file_ctx = findInMap(file_infos.context_by_name, file); + if (file_ctx.status != FileStatus::NO_CHANGE) + { + file_ctx.reader.emplace(getFullDataPath(file)); + auto & reader = file_ctx.reader.value(); + assertStreamGood(reader); + + reader.seekg(0, reader.end); + assertStreamGood(reader); + + auto file_end = reader.tellg(); + assertStreamGood(reader); + + auto & meta = findInMap(file_infos.meta_by_inode, file_ctx.inode); + if (meta.last_writen_position > static_cast(file_end)) + { + throw Exception( + ErrorCodes::CANNOT_READ_ALL_DATA, + "Last saved offsset for File {} is bigger than file size ({} > {})", + file, + meta.last_writen_position, + file_end); + } + /// update file end at the moment, used in ReadBuffer and serialize + meta.last_open_end = file_end; + + reader.seekg(meta.last_writen_position); + assertStreamGood(reader); + } + } + serialize(); +} + +void StorageFileLog::closeFilesAndStoreMeta(size_t start, size_t end) +{ + assert(start >= 0); + assert(start < end); + assert(end <= file_infos.file_names.size()); + + for (size_t i = start; i < end; ++i) + { + auto & file_ctx = findInMap(file_infos.context_by_name, file_infos.file_names[i]); + + if (file_ctx.reader) + { + if (file_ctx.reader->is_open()) + file_ctx.reader->close(); + } + + auto & meta = findInMap(file_infos.meta_by_inode, file_ctx.inode); + serialize(file_ctx.inode, meta); + } +} + +void StorageFileLog::storeMetas(size_t start, size_t end) +{ + assert(start >= 0); + assert(start < end); + assert(end <= file_infos.file_names.size()); + + for (size_t i = start; i < end; ++i) + { + auto & file_ctx = findInMap(file_infos.context_by_name, file_infos.file_names[i]); + + auto & meta = findInMap(file_infos.meta_by_inode, file_ctx.inode); + serialize(file_ctx.inode, meta); + } +} + +void StorageFileLog::checkOffsetIsValid(const String & full_name, UInt64 offset) +{ + ReadBufferFromFile in(full_name); + UInt64 _, last_written_pos; + + if (!tryReadIntText(_, in)) + { + throw Exception(ErrorCodes::CANNOT_READ_ALL_DATA, "Read meta file {} failed", full_name); + } + assertChar('\n', in); + if (!tryReadIntText(last_written_pos, in)) + { + throw Exception(ErrorCodes::CANNOT_READ_ALL_DATA, "Read meta file {} failed", full_name); + } + if (last_written_pos > offset) + throw Exception( + ErrorCodes::LOGICAL_ERROR, "Last stored last_written_pos in meta file {} is bigger than current last_written_pos", full_name); +} + +size_t StorageFileLog::getMaxBlockSize() const +{ + return filelog_settings->max_block_size.changed ? filelog_settings->max_block_size.value + : getContext()->getSettingsRef().max_insert_block_size.value; +} + +size_t StorageFileLog::getPollMaxBatchSize() const +{ + size_t batch_size = filelog_settings->poll_max_batch_size.changed ? filelog_settings->poll_max_batch_size.value + : getContext()->getSettingsRef().max_block_size.value; + return std::min(batch_size, getMaxBlockSize()); +} + +size_t StorageFileLog::getPollTimeoutMillisecond() const +{ + return filelog_settings->poll_timeout_ms.changed ? filelog_settings->poll_timeout_ms.totalMilliseconds() + : getContext()->getSettingsRef().stream_poll_timeout_ms.totalMilliseconds(); +} + +bool StorageFileLog::checkDependencies(const StorageID & table_id) +{ + // Check if all dependencies are attached + auto dependencies = DatabaseCatalog::instance().getDependencies(table_id); + if (dependencies.empty()) + return true; + + for (const auto & storage : dependencies) + { + auto table = DatabaseCatalog::instance().tryGetTable(storage, getContext()); + if (!table) + return false; + + // If it materialized view, check it's target table + auto * materialized_view = dynamic_cast(table.get()); + if (materialized_view && !materialized_view->tryGetTargetTable()) + return false; + + // Check all its dependencies + if (!checkDependencies(storage)) + return false; + } + + return true; +} + +size_t StorageFileLog::getTableDependentCount() const +{ + auto table_id = getStorageID(); + // Check if at least one direct dependency is attached + return DatabaseCatalog::instance().getDependencies(table_id).size(); +} + +void StorageFileLog::threadFunc() +{ + bool reschedule = false; + try + { + auto table_id = getStorageID(); + + auto dependencies_count = getTableDependentCount(); + + if (dependencies_count) + { + has_dependent_mv = true; + auto start_time = std::chrono::steady_clock::now(); + + // Keep streaming as long as there are attached views and streaming is not cancelled + while (!task->stream_cancelled) + { + if (!checkDependencies(table_id)) + { + /// For this case, we can not wait for watch thread to wake up + reschedule = true; + break; + } + + LOG_DEBUG(log, "Started streaming to {} attached views", dependencies_count); + + if (streamToViews()) + { + LOG_TRACE(log, "Stream stalled. Reschedule."); + if (milliseconds_to_wait + < static_cast(filelog_settings->poll_directory_watch_events_backoff_max.totalMilliseconds())) + milliseconds_to_wait *= filelog_settings->poll_directory_watch_events_backoff_factor.value; + break; + } + else + { + milliseconds_to_wait = filelog_settings->poll_directory_watch_events_backoff_init.totalMilliseconds(); + } + + auto ts = std::chrono::steady_clock::now(); + auto duration = std::chrono::duration_cast(ts-start_time); + if (duration.count() > MAX_THREAD_WORK_DURATION_MS) + { + LOG_TRACE(log, "Thread work duration limit exceeded. Reschedule."); + reschedule = true; + break; + } + } + } + } + catch (...) + { + tryLogCurrentException(__PRETTY_FUNCTION__); + } + + // Wait for attached views + if (!task->stream_cancelled) + { + if (path_is_directory) + { + if (!getTableDependentCount() || reschedule) + task->holder->scheduleAfter(milliseconds_to_wait); + else + { + std::unique_lock lock(mutex); + /// Waiting for watch directory thread to wake up + cv.wait(lock, [this] { return has_new_events; }); + has_new_events = false; + + if (task->stream_cancelled) + return; + task->holder->schedule(); + } + } + else + task->holder->scheduleAfter(milliseconds_to_wait); + } +} + +bool StorageFileLog::streamToViews() +{ + std::lock_guard lock(file_infos_mutex); + if (running_streams) + { + LOG_INFO(log, "Another select query is running on this table, need to wait it finish."); + return true; + } + + Stopwatch watch; + + auto table_id = getStorageID(); + auto table = DatabaseCatalog::instance().getTable(table_id, getContext()); + if (!table) + throw Exception("Engine table " + table_id.getNameForLogs() + " doesn't exist", ErrorCodes::LOGICAL_ERROR); + auto metadata_snapshot = getInMemoryMetadataPtr(); + + auto max_streams_number = std::min(filelog_settings->max_threads.value, file_infos.file_names.size()); + /// No files to parse + if (max_streams_number == 0) + { + LOG_INFO(log, "There is a idle table named {}, no files need to parse.", getName()); + return updateFileInfos(); + } + + // Create an INSERT query for streaming data + auto insert = std::make_shared(); + insert->table_id = table_id; + + auto new_context = Context::createCopy(getContext()); + + InterpreterInsertQuery interpreter(insert, new_context, false, true, true); + auto block_io = interpreter.execute(); + + /// Each stream responsible for closing it's files and store meta + openFilesAndSetPos(); + + Pipes pipes; + pipes.reserve(max_streams_number); + for (size_t stream_number = 0; stream_number < max_streams_number; ++stream_number) + { + pipes.emplace_back(std::make_shared( + *this, + metadata_snapshot, + new_context, + block_io.pipeline.getHeader().getNames(), + getPollMaxBatchSize(), + getPollTimeoutMillisecond(), + stream_number, + max_streams_number)); + } + + auto input= Pipe::unitePipes(std::move(pipes)); + + assertBlocksHaveEqualStructure(input.getHeader(), block_io.pipeline.getHeader(), "StorageFileLog streamToViews"); + + size_t rows = 0; + { + block_io.pipeline.complete(std::move(input)); + block_io.pipeline.setProgressCallback([&](const Progress & progress) { rows += progress.read_rows.load(); }); + CompletedPipelineExecutor executor(block_io.pipeline); + executor.execute(); + } + + UInt64 milliseconds = watch.elapsedMilliseconds(); + LOG_DEBUG(log, "Pushing {} rows to {} took {} ms.", rows, table_id.getNameForLogs(), milliseconds); + + return updateFileInfos(); +} + +void StorageFileLog::wakeUp() +{ + std::unique_lock lock(mutex); + has_new_events = true; + lock.unlock(); + cv.notify_one(); +} + +void registerStorageFileLog(StorageFactory & factory) +{ + auto creator_fn = [](const StorageFactory::Arguments & args) + { + ASTs & engine_args = args.engine_args; + size_t args_count = engine_args.size(); + + bool has_settings = args.storage_def->settings; + + auto filelog_settings = std::make_unique(); + if (has_settings) + { + filelog_settings->loadFromQuery(*args.storage_def); + } + + auto physical_cpu_cores = getNumberOfPhysicalCPUCores(); + auto num_threads = filelog_settings->max_threads.value; + + if (!num_threads) /// Default + { + num_threads = std::max(unsigned(1), physical_cpu_cores / 4); + filelog_settings->set("max_threads", num_threads); + } + else if (num_threads > physical_cpu_cores) + { + throw Exception(ErrorCodes::BAD_ARGUMENTS, "Number of threads to parse files can not be bigger than {}", physical_cpu_cores); + } + else if (num_threads < 1) + { + throw Exception("Number of threads to parse files can not be lower than 1", ErrorCodes::BAD_ARGUMENTS); + } + + if (filelog_settings->max_block_size.changed && filelog_settings->max_block_size.value < 1) + { + throw Exception("filelog_max_block_size can not be lower than 1", ErrorCodes::BAD_ARGUMENTS); + } + + if (filelog_settings->poll_max_batch_size.changed && filelog_settings->poll_max_batch_size.value < 1) + { + throw Exception("filelog_poll_max_batch_size can not be lower than 1", ErrorCodes::BAD_ARGUMENTS); + } + + size_t init_sleep_time = filelog_settings->poll_directory_watch_events_backoff_init.totalMilliseconds(); + size_t max_sleep_time = filelog_settings->poll_directory_watch_events_backoff_max.totalMilliseconds(); + if (init_sleep_time > max_sleep_time) + { + throw Exception( + "poll_directory_watch_events_backoff_init can not be greater than poll_directory_watch_events_backoff_max", + ErrorCodes::BAD_ARGUMENTS); + } + + if (filelog_settings->poll_directory_watch_events_backoff_factor.changed + && !filelog_settings->poll_directory_watch_events_backoff_factor.value) + throw Exception("poll_directory_watch_events_backoff_factor can not be 0", ErrorCodes::BAD_ARGUMENTS); + + if (args_count != 2) + throw Exception( + "Arguments size of StorageFileLog should be 2, path and format name", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); + + auto path_ast = evaluateConstantExpressionAsLiteral(engine_args[0], args.getContext()); + auto format_ast = evaluateConstantExpressionAsLiteral(engine_args[1], args.getContext()); + + auto path = path_ast->as().value.safeGet(); + auto format = format_ast->as().value.safeGet(); + + return StorageFileLog::create( + args.table_id, + args.getContext(), + args.columns, + path, + format, + std::move(filelog_settings), + args.comment, + args.attach); + }; + + factory.registerStorage( + "FileLog", + creator_fn, + StorageFactory::StorageFeatures{ + .supports_settings = true, + }); +} + +bool StorageFileLog::updateFileInfos() +{ + if (!directory_watch) + { + /// For table just watch one file, we can not use directory monitor to watch it + if (!path_is_directory) + { + assert(file_infos.file_names.size() == file_infos.meta_by_inode.size()); + assert(file_infos.file_names.size() == file_infos.context_by_name.size()); + assert(file_infos.file_names.size() == 1); + + if (auto it = file_infos.context_by_name.find(file_infos.file_names[0]); it != file_infos.context_by_name.end()) + { + it->second.status = FileStatus::UPDATED; + return true; + } + } + return false; + } + /// Do not need to hold file_status lock, since it will be holded + /// by caller when call this function + auto error = directory_watch->getErrorAndReset(); + if (error.has_error) + LOG_ERROR(log, "Error happened during watching directory {}: {}", directory_watch->getPath(), error.error_msg); + + /// These file infos should always have same size(one for one) before update and after update + assert(file_infos.file_names.size() == file_infos.meta_by_inode.size()); + assert(file_infos.file_names.size() == file_infos.context_by_name.size()); + + auto events = directory_watch->getEventsAndReset(); + + for (const auto & [file_name, event_infos] : events) + { + String file_path = getFullDataPath(file_name); + for (const auto & event_info : event_infos.file_events) + { + switch (event_info.type) + { + case DirectoryWatcherBase::DW_ITEM_ADDED: + { + LOG_TRACE(log, "New event {} watched, file_name: {}", event_info.callback, file_name); + /// Check if it is a regular file, and new file may be renamed or removed + if (std::filesystem::is_regular_file(file_path)) + { + auto inode = getInode(file_path); + + file_infos.file_names.push_back(file_name); + + if (auto it = file_infos.meta_by_inode.find(inode); it != file_infos.meta_by_inode.end()) + it->second = FileMeta{.file_name = file_name}; + else + file_infos.meta_by_inode.emplace(inode, FileMeta{.file_name = file_name}); + + if (auto it = file_infos.context_by_name.find(file_name); it != file_infos.context_by_name.end()) + it->second = FileContext{.status = FileStatus::OPEN, .inode = inode}; + else + file_infos.context_by_name.emplace(file_name, FileContext{.inode = inode}); + } + break; + } + + case DirectoryWatcherBase::DW_ITEM_MODIFIED: + { + LOG_TRACE(log, "New event {} watched, file_name: {}", event_info.callback, file_name); + /// When new file added and appended, it has two event: DW_ITEM_ADDED + /// and DW_ITEM_MODIFIED, since the order of these two events in the + /// sequence is uncentain, so we may can not find it in file_infos, just + /// skip it, the file info will be handled in DW_ITEM_ADDED case. + if (auto it = file_infos.context_by_name.find(file_name); it != file_infos.context_by_name.end()) + it->second.status = FileStatus::UPDATED; + break; + } + + case DirectoryWatcherBase::DW_ITEM_REMOVED: + case DirectoryWatcherBase::DW_ITEM_MOVED_FROM: + { + LOG_TRACE(log, "New event {} watched, file_name: {}", event_info.callback, file_name); + if (auto it = file_infos.context_by_name.find(file_name); it != file_infos.context_by_name.end()) + it->second.status = FileStatus::REMOVED; + break; + } + case DirectoryWatcherBase::DW_ITEM_MOVED_TO: + { + LOG_TRACE(log, "New event {} watched, file_name: {}", event_info.callback, file_name); + + /// Similar to DW_ITEM_ADDED, but if it removed from an old file + /// should obtain old meta file and rename meta file + if (std::filesystem::is_regular_file(file_path)) + { + file_infos.file_names.push_back(file_name); + auto inode = getInode(file_path); + + if (auto it = file_infos.context_by_name.find(file_name); it != file_infos.context_by_name.end()) + it->second = FileContext{.inode = inode}; + else + file_infos.context_by_name.emplace(file_name, FileContext{.inode = inode}); + + /// File has been renamed, we should also rename meta file + if (auto it = file_infos.meta_by_inode.find(inode); it != file_infos.meta_by_inode.end()) + { + auto old_name = it->second.file_name; + it->second.file_name = file_name; + if (std::filesystem::exists(getFullMetaPath(old_name))) + std::filesystem::rename(getFullMetaPath(old_name), getFullMetaPath(file_name)); + } + /// May move from other place, adding new meta info + else + file_infos.meta_by_inode.emplace(inode, FileMeta{.file_name = file_name}); + } + } + } + } + } + std::vector valid_files; + + /// Remove file infos with REMOVE status + for (const auto & file_name : file_infos.file_names) + { + if (auto it = file_infos.context_by_name.find(file_name); it != file_infos.context_by_name.end()) + { + if (it->second.status == FileStatus::REMOVED) + { + /// We need to check that this inode does not hold by other file(mv), + /// otherwise, we can not destroy it. + auto inode = it->second.inode; + /// If it's now hold by other file, than the file_name should has + /// been changed during updating file_infos + if (auto meta = file_infos.meta_by_inode.find(inode); + meta != file_infos.meta_by_inode.end() && meta->second.file_name == file_name) + file_infos.meta_by_inode.erase(meta); + + if (std::filesystem::exists(getFullMetaPath(file_name))) + std::filesystem::remove(getFullMetaPath(file_name)); + file_infos.context_by_name.erase(it); + } + else + { + valid_files.push_back(file_name); + } + } + } + file_infos.file_names.swap(valid_files); + + /// These file infos should always have same size(one for one) + assert(file_infos.file_names.size() == file_infos.meta_by_inode.size()); + assert(file_infos.file_names.size() == file_infos.context_by_name.size()); + + return events.empty() || file_infos.file_names.empty(); +} + +NamesAndTypesList StorageFileLog::getVirtuals() const +{ + return NamesAndTypesList{{"_filename", std::make_shared()}, {"_offset", std::make_shared()}}; +} + +Names StorageFileLog::getVirtualColumnNames() +{ + return {"_filename", "_offset"}; +} +} diff --git a/src/Storages/FileLog/StorageFileLog.h b/src/Storages/FileLog/StorageFileLog.h new file mode 100644 index 00000000000..e1d95ae736f --- /dev/null +++ b/src/Storages/FileLog/StorageFileLog.h @@ -0,0 +1,215 @@ +#pragma once + +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +namespace DB +{ +namespace ErrorCodes +{ + extern const int LOGICAL_ERROR; +} + +class FileLogDirectoryWatcher; + +class StorageFileLog final : public shared_ptr_helper, public IStorage, WithContext +{ + friend struct shared_ptr_helper; + +public: + + using Files = std::vector; + + std::string getName() const override { return "FileLog"; } + + bool noPushingToViews() const override { return true; } + + void startup() override; + void shutdown() override; + + Pipe read( + const Names & column_names, + const StorageMetadataPtr & /*metadata_snapshot*/, + SelectQueryInfo & query_info, + ContextPtr context, + QueryProcessingStage::Enum processed_stage, + size_t max_block_size, + unsigned num_streams) override; + + void drop() override; + + /// We need to call drop() immediately to remove meta data directory, + /// otherwise, if another filelog table with same name created before + /// the table be dropped finally, then its meta data directory will + /// be deleted by this table drop finally + bool dropTableImmediately() override { return true; } + + const auto & getFormatName() const { return format_name; } + + enum class FileStatus + { + OPEN, /// first time open file after table start up + NO_CHANGE, + UPDATED, + REMOVED, + }; + + struct FileContext + { + FileStatus status = FileStatus::OPEN; + UInt64 inode{}; + std::optional reader = std::nullopt; + }; + + struct FileMeta + { + String file_name; + UInt64 last_writen_position = 0; + UInt64 last_open_end = 0; + }; + + using InodeToFileMeta = std::unordered_map; + using FileNameToContext = std::unordered_map; + + struct FileInfos + { + InodeToFileMeta meta_by_inode; + FileNameToContext context_by_name; + /// file names without path + Names file_names; + }; + + auto & getFileInfos() { return file_infos; } + + String getFullMetaPath(const String & file_name) const { return std::filesystem::path(root_meta_path) / file_name; } + String getFullDataPath(const String & file_name) const { return std::filesystem::path(root_data_path) / file_name; } + + NamesAndTypesList getVirtuals() const override; + + static Names getVirtualColumnNames(); + + static UInt64 getInode(const String & file_name); + + void openFilesAndSetPos(); + + /// Used in FileLogSource when finish generating all blocks. + /// Each stream responsible for close its files and store meta. + void closeFilesAndStoreMeta(size_t start, size_t end); + + /// Used in FileLogSource after generating every block + void storeMetas(size_t start, size_t end); + + static void assertStreamGood(const std::ifstream & reader); + + template + static V & findInMap(std::unordered_map & map, const K & key) + { + if (auto it = map.find(key); it != map.end()) + return it->second; + else + throw Exception(ErrorCodes::LOGICAL_ERROR, "The key {} doesn't exist.", key); + } + + void increaseStreams(); + void reduceStreams(); + + void wakeUp(); + + const auto & getFileLogSettings() const { return filelog_settings; } + +protected: + StorageFileLog( + const StorageID & table_id_, + ContextPtr context_, + const ColumnsDescription & columns_, + const String & path_, + const String & format_name_, + std::unique_ptr settings, + const String & comment, + bool attach); + +private: + std::unique_ptr filelog_settings; + + const String path; + bool path_is_directory = true; + + /// If path argument of the table is a regular file, it equals to user_files_path + /// otherwise, it equals to user_files_path/ + path_argument/, e.g. path + String root_data_path; + String root_meta_path; + + FileInfos file_infos; + + const String format_name; + Poco::Logger * log; + + uint64_t milliseconds_to_wait; + + /// In order to avoid data race, using a naive trick to forbid execute two select + /// simultaneously, although read is not useful in this engine. Using an atomic + /// variable to records current unfinishing streams, then if have unfinishing streams, + /// later select should forbid to execute. + std::atomic running_streams = 0; + + std::mutex mutex; + bool has_new_events = false; + std::condition_variable cv; + + bool has_dependent_mv = false; + + std::mutex file_infos_mutex; + + struct TaskContext + { + BackgroundSchedulePool::TaskHolder holder; + std::atomic stream_cancelled {false}; + explicit TaskContext(BackgroundSchedulePool::TaskHolder&& task_) : holder(std::move(task_)) + { + } + }; + std::shared_ptr task; + + std::unique_ptr directory_watch = nullptr; + + void loadFiles(); + + void loadMetaFiles(bool attach); + + void threadFunc(); + + size_t getPollMaxBatchSize() const; + size_t getMaxBlockSize() const; + size_t getPollTimeoutMillisecond() const; + + bool streamToViews(); + bool checkDependencies(const StorageID & table_id); + + bool updateFileInfos(); + + size_t getTableDependentCount() const; + + /// Used in shutdown() + void serialize() const; + /// Used in FileSource closeFileAndStoreMeta(file_name); + void serialize(UInt64 inode, const FileMeta & file_meta) const; + + void deserialize(); + static void checkOffsetIsValid(const String & full_name, UInt64 offset); +}; + +} diff --git a/src/Storages/HDFS/HDFSCommon.h b/src/Storages/HDFS/HDFSCommon.h index 0c007afdcfe..877bf7dd74f 100644 --- a/src/Storages/HDFS/HDFSCommon.h +++ b/src/Storages/HDFS/HDFSCommon.h @@ -1,15 +1,13 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_HDFS #include #include #include -#include // Y_IGNORE +#include #include #include diff --git a/src/Storages/HDFS/ReadBufferFromHDFS.cpp b/src/Storages/HDFS/ReadBufferFromHDFS.cpp index 96d67ad0e08..2fc72c58b64 100644 --- a/src/Storages/HDFS/ReadBufferFromHDFS.cpp +++ b/src/Storages/HDFS/ReadBufferFromHDFS.cpp @@ -15,6 +15,7 @@ namespace ErrorCodes extern const int CANNOT_OPEN_FILE; extern const int CANNOT_SEEK_THROUGH_FILE; extern const int SEEK_POSITION_OUT_OF_BOUND; + extern const int LOGICAL_ERROR; } ReadBufferFromHDFS::~ReadBufferFromHDFS() = default; @@ -33,16 +34,18 @@ struct ReadBufferFromHDFS::ReadBufferFromHDFSImpl : public BufferWithOwnMemory(buf_size_) , hdfs_uri(hdfs_uri_) , hdfs_file_path(hdfs_file_path_) , builder(createHDFSBuilder(hdfs_uri_, config_)) + , read_until_position(read_until_position_) { std::lock_guard lock(hdfs_init_mutex); @@ -79,7 +82,23 @@ struct ReadBufferFromHDFS::ReadBufferFromHDFSImpl : public BufferWithOwnMemory {})", offset, read_until_position - 1); + + num_bytes_to_read = read_until_position - offset; + } + else + { + num_bytes_to_read = internal_buffer.size(); + } + + int bytes_read = hdfsRead(fs.get(), fin, internal_buffer.begin(), num_bytes_to_read); if (bytes_read < 0) throw Exception(ErrorCodes::NETWORK_ERROR, "Fail to read from HDFS: {}, file path: {}. Error: {}", @@ -125,9 +144,9 @@ ReadBufferFromHDFS::ReadBufferFromHDFS( const String & hdfs_uri_, const String & hdfs_file_path_, const Poco::Util::AbstractConfiguration & config_, - size_t buf_size_) + size_t buf_size_, size_t read_until_position_) : SeekableReadBuffer(nullptr, 0) - , impl(std::make_unique(hdfs_uri_, hdfs_file_path_, config_, buf_size_)) + , impl(std::make_unique(hdfs_uri_, hdfs_file_path_, config_, buf_size_, read_until_position_)) { } diff --git a/src/Storages/HDFS/ReadBufferFromHDFS.h b/src/Storages/HDFS/ReadBufferFromHDFS.h index 035a55bd0fa..6c112ac5bb4 100644 --- a/src/Storages/HDFS/ReadBufferFromHDFS.h +++ b/src/Storages/HDFS/ReadBufferFromHDFS.h @@ -1,15 +1,13 @@ #pragma once -#if !defined(ARCADIA_BUILD) - #include -#endif +#include #if USE_HDFS #include #include #include #include -#include // Y_IGNORE +#include #include #include #include @@ -27,7 +25,9 @@ struct ReadBufferFromHDFSImpl; public: ReadBufferFromHDFS(const String & hdfs_uri_, const String & hdfs_file_path_, - const Poco::Util::AbstractConfiguration & config_, size_t buf_size_ = DBMS_DEFAULT_BUFFER_SIZE); + const Poco::Util::AbstractConfiguration & config_, + size_t buf_size_ = DBMS_DEFAULT_BUFFER_SIZE, + size_t read_until_position_ = 0); ~ReadBufferFromHDFS() override; diff --git a/src/Storages/HDFS/StorageHDFS.h b/src/Storages/HDFS/StorageHDFS.h index 6ff8bb3f13f..9020a091782 100644 --- a/src/Storages/HDFS/StorageHDFS.h +++ b/src/Storages/HDFS/StorageHDFS.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_HDFS diff --git a/src/Storages/HDFS/WriteBufferFromHDFS.h b/src/Storages/HDFS/WriteBufferFromHDFS.h index 174a308d3ed..e9ee2fc2d51 100644 --- a/src/Storages/HDFS/WriteBufferFromHDFS.h +++ b/src/Storages/HDFS/WriteBufferFromHDFS.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) - #include -#endif +#include #if USE_HDFS #include diff --git a/src/Storages/IStorage.cpp b/src/Storages/IStorage.cpp index 7c158794caf..021335fea1f 100644 --- a/src/Storages/IStorage.cpp +++ b/src/Storages/IStorage.cpp @@ -60,27 +60,31 @@ TableLockHolder IStorage::lockForShare(const String & query_id, const std::chron return result; } -TableLockHolder IStorage::lockForAlter(const String & query_id, const std::chrono::milliseconds & acquire_timeout) +IStorage::AlterLockHolder IStorage::lockForAlter(const std::chrono::milliseconds & acquire_timeout) { - TableLockHolder result = tryLockTimed(alter_lock, RWLockImpl::Write, query_id, acquire_timeout); + AlterLockHolder lock{alter_lock, std::defer_lock}; + + if (!lock.try_lock_for(acquire_timeout)) + throw Exception(ErrorCodes::DEADLOCK_AVOIDED, + "Locking attempt for ALTER on \"{}\" has timed out! ({} ms) " + "Possible deadlock avoided. Client should retry.", + getStorageID().getFullTableName(), std::to_string(acquire_timeout.count())); if (is_dropped) throw Exception("Table is dropped", ErrorCodes::TABLE_IS_DROPPED); - return result; + return lock; } TableExclusiveLockHolder IStorage::lockExclusively(const String & query_id, const std::chrono::milliseconds & acquire_timeout) { TableExclusiveLockHolder result; - result.alter_lock = tryLockTimed(alter_lock, RWLockImpl::Write, query_id, acquire_timeout); + result.drop_lock = tryLockTimed(drop_lock, RWLockImpl::Write, query_id, acquire_timeout); if (is_dropped) throw Exception("Table is dropped", ErrorCodes::TABLE_IS_DROPPED); - result.drop_lock = tryLockTimed(drop_lock, RWLockImpl::Write, query_id, acquire_timeout); - return result; } @@ -126,7 +130,7 @@ Pipe IStorage::alterPartition( throw Exception("Partition operations are not supported by storage " + getName(), ErrorCodes::NOT_IMPLEMENTED); } -void IStorage::alter(const AlterCommands & params, ContextPtr context, TableLockHolder &) +void IStorage::alter(const AlterCommands & params, ContextPtr context, AlterLockHolder &) { auto table_id = getStorageID(); StorageInMemoryMetadata new_metadata = getInMemoryMetadata(); @@ -214,7 +218,7 @@ bool IStorage::isStaticStorage() const return false; } -BackupEntries IStorage::backup(const ASTs &, ContextPtr) const +BackupEntries IStorage::backup(const ASTs &, ContextPtr) { throw Exception("Table engine " + getName() + " doesn't support backups", ErrorCodes::NOT_IMPLEMENTED); } diff --git a/src/Storages/IStorage.h b/src/Storages/IStorage.h index 74e17442fe8..fa5f2c28b06 100644 --- a/src/Storages/IStorage.h +++ b/src/Storages/IStorage.h @@ -205,7 +205,7 @@ public: NameDependencies getDependentViewsByColumn(ContextPtr context) const; /// Prepares entries to backup data of the storage. - virtual BackupEntries backup(const ASTs & partitions, ContextPtr context) const; + virtual BackupEntries backup(const ASTs & partitions, ContextPtr context); /// Extract data from the backup and put it to the storage. virtual RestoreDataTasks restoreFromBackup(const BackupPtr & backup, const String & data_path_in_backup, const ASTs & partitions, ContextMutablePtr context); @@ -238,7 +238,8 @@ public: /// Lock table for alter. This lock must be acuqired in ALTER queries to be /// sure, that we execute only one simultaneous alter. Doesn't affect share lock. - TableLockHolder lockForAlter(const String & query_id, const std::chrono::milliseconds & acquire_timeout); + using AlterLockHolder = std::unique_lock; + AlterLockHolder lockForAlter(const std::chrono::milliseconds & acquire_timeout); /// Lock table exclusively. This lock must be acquired if you want to be /// sure, that no other thread (SELECT, merge, ALTER, etc.) doing something @@ -417,7 +418,7 @@ public: /** ALTER tables in the form of column changes that do not affect the change * to Storage or its parameters. Executes under alter lock (lockForAlter). */ - virtual void alter(const AlterCommands & params, ContextPtr context, TableLockHolder & alter_lock_holder); + virtual void alter(const AlterCommands & params, ContextPtr context, AlterLockHolder & alter_lock_holder); /** Checks that alter commands can be applied to storage. For example, columns can be modified, * or primary key can be changes, etc. @@ -467,6 +468,12 @@ public: throw Exception("Mutations are not supported by storage " + getName(), ErrorCodes::NOT_IMPLEMENTED); } + /// Cancel a part move to shard. + virtual CancellationCode killPartMoveToShard(const UUID & /*task_uuid*/) + { + throw Exception("Part moves between shards are not supported by storage " + getName(), ErrorCodes::NOT_IMPLEMENTED); + } + /** If the table have to do some complicated work on startup, * that must be postponed after creation of table object * (like launching some background threads), @@ -585,13 +592,14 @@ public: /// Does not takes underlying Storage (if any) into account. virtual std::optional lifetimeBytes() const { return {}; } + /// Should table->drop be called at once or with delay (in case of atomic database engine). + /// Needed for integration engines, when there must be no delay for calling drop() method. + virtual bool dropTableImmediately() { return false; } + private: - /// Lock required for alter queries (lockForAlter). Always taken for write - /// (actually can be replaced with std::mutex, but for consistency we use - /// RWLock). Allows to execute only one simultaneous alter query. Also it - /// should be taken by DROP-like queries, to be sure, that all alters are - /// finished. - mutable RWLock alter_lock = RWLockImpl::create(); + /// Lock required for alter queries (lockForAlter). + /// Allows to execute only one simultaneous alter query. + mutable std::timed_mutex alter_lock; /// Lock required for drop queries. Every thread that want to ensure, that /// table is not dropped have to table this lock for read (lockForShare). diff --git a/src/Storages/Kafka/StorageKafka.cpp b/src/Storages/Kafka/StorageKafka.cpp index 39688060b0a..25384db043f 100644 --- a/src/Storages/Kafka/StorageKafka.cpp +++ b/src/Storages/Kafka/StorageKafka.cpp @@ -408,7 +408,7 @@ ConsumerBufferPtr StorageKafka::createReadBuffer(const size_t consumer_number) } conf.set("client.software.name", VERSION_NAME); conf.set("client.software.version", VERSION_DESCRIBE); - conf.set("auto.offset.reset", "smallest"); // If no offset stored for this group, read all messages from the start + conf.set("auto.offset.reset", "earliest"); // If no offset stored for this group, read all messages from the start // that allows to prevent fast draining of the librdkafka queue // during building of single insert block. Improves performance diff --git a/src/Storages/LiveView/StorageLiveView.cpp b/src/Storages/LiveView/StorageLiveView.cpp index ec748d4d43a..e3e6b4382f4 100644 --- a/src/Storages/LiveView/StorageLiveView.cpp +++ b/src/Storages/LiveView/StorageLiveView.cpp @@ -41,7 +41,7 @@ limitations under the License. */ #include #include #include -#include +#include #include diff --git a/src/Storages/MergeTree/DataPartsExchange.cpp b/src/Storages/MergeTree/DataPartsExchange.cpp index a1df4a13e6a..8960a208680 100644 --- a/src/Storages/MergeTree/DataPartsExchange.cpp +++ b/src/Storages/MergeTree/DataPartsExchange.cpp @@ -344,7 +344,7 @@ void Service::sendPartFromDiskRemoteMeta(const MergeTreeData::DataPartPtr & part writeStringBinary(it.first, out); writeBinary(file_size, out); - auto file_in = createReadBufferFromFileBase(metadata_file, {}, 0); + auto file_in = createReadBufferFromFileBase(metadata_file, /* settings= */ {}); HashingWriteBuffer hashing_out(out); copyDataWithThrottler(*file_in, hashing_out, blocker.getCounter(), data.getSendsThrottler()); if (blocker.isCancelled()) diff --git a/src/Storages/MergeTree/IMergeTreeDataPart.h b/src/Storages/MergeTree/IMergeTreeDataPart.h index c889d76c2b4..f0dff289ced 100644 --- a/src/Storages/MergeTree/IMergeTreeDataPart.h +++ b/src/Storages/MergeTree/IMergeTreeDataPart.h @@ -97,6 +97,8 @@ public: virtual bool isStoredOnDisk() const = 0; + virtual bool isStoredOnRemoteDisk() const = 0; + virtual bool supportsVerticalMerge() const { return false; } /// NOTE: Returns zeros if column files are not found in checksums. diff --git a/src/Storages/MergeTree/IMergeTreeDataPartWriter.cpp b/src/Storages/MergeTree/IMergeTreeDataPartWriter.cpp index 83fd9692e49..3d6b12efdf1 100644 --- a/src/Storages/MergeTree/IMergeTreeDataPartWriter.cpp +++ b/src/Storages/MergeTree/IMergeTreeDataPartWriter.cpp @@ -49,7 +49,7 @@ IMergeTreeDataPartWriter::IMergeTreeDataPartWriter( , columns_list(columns_list_) , settings(settings_) , index_granularity(index_granularity_) - , with_final_mark(storage.getSettings()->write_final_mark && settings.can_use_adaptive_granularity) + , with_final_mark(settings.can_use_adaptive_granularity) { } diff --git a/src/Storages/MergeTree/IMergeTreeReader.h b/src/Storages/MergeTree/IMergeTreeReader.h index 696cc2f105b..28334b9a8bb 100644 --- a/src/Storages/MergeTree/IMergeTreeReader.h +++ b/src/Storages/MergeTree/IMergeTreeReader.h @@ -30,8 +30,10 @@ public: const ValueSizeMap & avg_value_size_hints_ = ValueSizeMap{}); /// Return the number of rows has been read or zero if there is no columns to read. - /// If continue_reading is true, continue reading from last state, otherwise seek to from_mark - virtual size_t readRows(size_t from_mark, bool continue_reading, size_t max_rows_to_read, Columns & res_columns) = 0; + /// If continue_reading is true, continue reading from last state, otherwise seek to from_mark. + /// current_task_last mark is needed for asynchronous reading (mainly from remote fs). + virtual size_t readRows(size_t from_mark, size_t current_task_last_mark, + bool continue_reading, size_t max_rows_to_read, Columns & res_columns) = 0; virtual bool canReadIncompleteGranules() const = 0; diff --git a/src/Storages/MergeTree/KeyCondition.cpp b/src/Storages/MergeTree/KeyCondition.cpp index d53faf144f9..dda7f235d97 100644 --- a/src/Storages/MergeTree/KeyCondition.cpp +++ b/src/Storages/MergeTree/KeyCondition.cpp @@ -333,8 +333,9 @@ const KeyCondition::AtomMap KeyCondition::atom_map [] (RPNElement & out, const Field &) { out.function = RPNElement::FUNCTION_IS_NULL; - // When using NULL_LAST, isNull means [+Inf, +Inf] - out.range = Range(Field(POSITIVE_INFINITY)); + // isNull means +Inf (NULLS_LAST) or -Inf (NULLS_FIRST), + // which is equivalent to not in Range (-Inf, +Inf) + out.range = Range(); return true; } } @@ -2002,7 +2003,10 @@ BoolMask KeyCondition::checkInHyperrectangle( /// No need to apply monotonic functions as nulls are kept. bool intersects = element.range.intersectsRange(*key_range); bool contains = element.range.containsRange(*key_range); + rpn_stack.emplace_back(intersects, !contains); + if (element.function == RPNElement::FUNCTION_IS_NULL) + rpn_stack.back() = !rpn_stack.back(); } else if ( element.function == RPNElement::FUNCTION_IN_SET diff --git a/src/Storages/MergeTree/MarkRange.cpp b/src/Storages/MergeTree/MarkRange.cpp new file mode 100644 index 00000000000..7f097cd7106 --- /dev/null +++ b/src/Storages/MergeTree/MarkRange.cpp @@ -0,0 +1,14 @@ +#include "MarkRange.h" + +namespace DB +{ + +size_t getLastMark(const MarkRanges & ranges) +{ + size_t current_task_last_mark = 0; + for (const auto & mark_range : ranges) + current_task_last_mark = std::max(current_task_last_mark, mark_range.end); + return current_task_last_mark; +} + +} diff --git a/src/Storages/MergeTree/MarkRange.h b/src/Storages/MergeTree/MarkRange.h index 8380914a455..b46913db30c 100644 --- a/src/Storages/MergeTree/MarkRange.h +++ b/src/Storages/MergeTree/MarkRange.h @@ -8,8 +8,9 @@ namespace DB { -/** A pair of marks that defines the range of rows in a part. Specifically, the range has the form [begin * index_granularity, end * index_granularity). - */ +/** A pair of marks that defines the range of rows in a part. Specifically, + * the range has the form [begin * index_granularity, end * index_granularity). + */ struct MarkRange { size_t begin; @@ -21,5 +22,8 @@ struct MarkRange using MarkRanges = std::deque; +/** Get max range.end from ranges. + */ +size_t getLastMark(const MarkRanges & ranges); } diff --git a/src/Storages/MergeTree/MergeTreeBlockReadUtils.cpp b/src/Storages/MergeTree/MergeTreeBlockReadUtils.cpp index 93594dd4357..88f3052e833 100644 --- a/src/Storages/MergeTree/MergeTreeBlockReadUtils.cpp +++ b/src/Storages/MergeTree/MergeTreeBlockReadUtils.cpp @@ -260,8 +260,7 @@ MergeTreeReadTaskColumns getReadTaskColumns( const StorageMetadataPtr & metadata_snapshot, const MergeTreeData::DataPartPtr & data_part, const Names & required_columns, - const PrewhereInfoPtr & prewhere_info, - bool check_columns) + const PrewhereInfoPtr & prewhere_info) { Names column_names = required_columns; Names pre_column_names; @@ -308,18 +307,9 @@ MergeTreeReadTaskColumns getReadTaskColumns( MergeTreeReadTaskColumns result; - if (check_columns) - { - const auto & columns = metadata_snapshot->getColumns(); - result.pre_columns = columns.getByNames(ColumnsDescription::All, pre_column_names, true); - result.columns = columns.getByNames(ColumnsDescription::All, column_names, true); - } - else - { - result.pre_columns = data_part->getColumns().addTypes(pre_column_names); - result.columns = data_part->getColumns().addTypes(column_names); - } - + auto columns = metadata_snapshot->getColumns(); + result.pre_columns = columns.getByNames(ColumnsDescription::All, pre_column_names, true); + result.columns = columns.getByNames(ColumnsDescription::All, column_names, true); result.should_reorder = should_reorder; return result; diff --git a/src/Storages/MergeTree/MergeTreeBlockReadUtils.h b/src/Storages/MergeTree/MergeTreeBlockReadUtils.h index 4c4081bd83b..2dfe6fcf06d 100644 --- a/src/Storages/MergeTree/MergeTreeBlockReadUtils.h +++ b/src/Storages/MergeTree/MergeTreeBlockReadUtils.h @@ -78,8 +78,7 @@ MergeTreeReadTaskColumns getReadTaskColumns( const StorageMetadataPtr & metadata_snapshot, const MergeTreeData::DataPartPtr & data_part, const Names & required_columns, - const PrewhereInfoPtr & prewhere_info, - bool check_columns); + const PrewhereInfoPtr & prewhere_info); struct MergeTreeBlockSizePredictor { diff --git a/src/Storages/MergeTree/MergeTreeData.cpp b/src/Storages/MergeTree/MergeTreeData.cpp index ee55a6826c3..c5c14cd24a8 100644 --- a/src/Storages/MergeTree/MergeTreeData.cpp +++ b/src/Storages/MergeTree/MergeTreeData.cpp @@ -250,7 +250,7 @@ MergeTreeData::MergeTreeData( { /// This is for backward compatibility. checkSampleExpression(metadata_, attach || settings->compatibility_allow_sampling_expression_not_in_primary_key, - settings->check_sample_column_is_correct); + settings->check_sample_column_is_correct && !attach); } checkTTLExpressions(metadata_, metadata_); @@ -2211,7 +2211,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeData::createPart( void MergeTreeData::changeSettings( const ASTPtr & new_settings, - TableLockHolder & /* table_lock_holder */) + AlterLockHolder & /* table_lock_holder */) { if (new_settings) { @@ -2692,7 +2692,10 @@ MergeTreeData::DataPartsVector MergeTreeData::removePartsInRangeFromWorkingSet(c void MergeTreeData::forgetPartAndMoveToDetached(const MergeTreeData::DataPartPtr & part_to_detach, const String & prefix, bool restore_covered) { - LOG_INFO(log, "Renaming {} to {}{} and forgetting it.", part_to_detach->relative_path, prefix, part_to_detach->name); + if (prefix.empty()) + LOG_INFO(log, "Renaming {} to {} and forgetting it.", part_to_detach->relative_path, part_to_detach->name); + else + LOG_INFO(log, "Renaming {} to {}_{} and forgetting it.", part_to_detach->relative_path, prefix, part_to_detach->name); auto lock = lockParts(); @@ -3497,7 +3500,7 @@ Pipe MergeTreeData::alterPartition( } -BackupEntries MergeTreeData::backup(const ASTs & partitions, ContextPtr local_context) const +BackupEntries MergeTreeData::backup(const ASTs & partitions, ContextPtr local_context) { DataPartsVector data_parts; if (partitions.empty()) @@ -3519,7 +3522,7 @@ BackupEntries MergeTreeData::backupDataParts(const DataPartsVector & data_parts) auto temp_dir_it = temp_dirs.find(disk); if (temp_dir_it == temp_dirs.end()) - temp_dir_it = temp_dirs.emplace(disk, std::make_shared(disk, "tmp_backup_")).first; + temp_dir_it = temp_dirs.emplace(disk, std::make_shared(disk, "tmp/backup_")).first; auto temp_dir_owner = temp_dir_it->second; fs::path temp_dir = temp_dir_owner->getPath(); @@ -4531,7 +4534,7 @@ bool MergeTreeData::getQueryProcessingStageWithAggregateProjection( if (!settings.allow_experimental_projection_optimization || query_info.ignore_projections || query_info.is_projection_query) return false; - const auto & query_ptr = query_info.query; + const auto & query_ptr = query_info.original_query; if (auto * select = query_ptr->as(); select) { @@ -4549,8 +4552,12 @@ bool MergeTreeData::getQueryProcessingStageWithAggregateProjection( return false; InterpreterSelectQuery select( - query_ptr, query_context, SelectQueryOptions{QueryProcessingStage::WithMergeableState}.ignoreProjections().ignoreAlias()); + query_ptr, + query_context, + SelectQueryOptions{QueryProcessingStage::WithMergeableState}.ignoreProjections().ignoreAlias(), + query_info.sets /* prepared_sets */); const auto & analysis_result = select.getAnalysisResult(); + query_info.sets = std::move(select.getQueryAnalyzer()->getPreparedSets()); bool can_use_aggregate_projection = true; /// If the first stage of the query pipeline is more complex than Aggregating - Expression - Filter - ReadFromStorage, @@ -4894,6 +4901,8 @@ bool MergeTreeData::getQueryProcessingStageWithAggregateProjection( { selected_candidate->aggregation_keys = select.getQueryAnalyzer()->aggregationKeys(); selected_candidate->aggregate_descriptions = select.getQueryAnalyzer()->aggregates(); + selected_candidate->subqueries_for_sets + = std::make_shared(std::move(select.getQueryAnalyzer()->getSubqueriesForSets())); } query_info.projection = std::move(*selected_candidate); diff --git a/src/Storages/MergeTree/MergeTreeData.h b/src/Storages/MergeTree/MergeTreeData.h index 2ea6a89002c..1b617a2ec71 100644 --- a/src/Storages/MergeTree/MergeTreeData.h +++ b/src/Storages/MergeTree/MergeTreeData.h @@ -583,7 +583,7 @@ public: /// Change MergeTreeSettings void changeSettings( const ASTPtr & new_settings, - TableLockHolder & table_lock_holder); + AlterLockHolder & table_lock_holder); /// Should be called if part data is suspected to be corrupted. void reportBrokenPart(const String & name) const @@ -630,7 +630,7 @@ public: TableLockHolder & table_lock_holder); /// Prepares entries to backup data of the storage. - BackupEntries backup(const ASTs & partitions, ContextPtr context) const override; + BackupEntries backup(const ASTs & partitions, ContextPtr context) override; static BackupEntries backupDataParts(const DataPartsVector & data_parts); /// Extract data from the backup and put it to the storage. diff --git a/src/Storages/MergeTree/MergeTreeDataPartCompact.cpp b/src/Storages/MergeTree/MergeTreeDataPartCompact.cpp index ad1c2abeee7..c4c2e65547b 100644 --- a/src/Storages/MergeTree/MergeTreeDataPartCompact.cpp +++ b/src/Storages/MergeTree/MergeTreeDataPartCompact.cpp @@ -182,6 +182,11 @@ void MergeTreeDataPartCompact::checkConsistency(bool require_part_metadata) cons } } +bool MergeTreeDataPartCompact::isStoredOnRemoteDisk() const +{ + return volume->getDisk()->isRemote(); +} + MergeTreeDataPartCompact::~MergeTreeDataPartCompact() { removeIfNeeded(); diff --git a/src/Storages/MergeTree/MergeTreeDataPartCompact.h b/src/Storages/MergeTree/MergeTreeDataPartCompact.h index 2fcc7b7034b..38bfa11652a 100644 --- a/src/Storages/MergeTree/MergeTreeDataPartCompact.h +++ b/src/Storages/MergeTree/MergeTreeDataPartCompact.h @@ -56,6 +56,8 @@ public: bool isStoredOnDisk() const override { return true; } + bool isStoredOnRemoteDisk() const override; + bool hasColumnFiles(const NameAndTypePair & column) const override; String getFileNameForColumn(const NameAndTypePair & /* column */) const override { return DATA_FILE_NAME; } diff --git a/src/Storages/MergeTree/MergeTreeDataPartInMemory.h b/src/Storages/MergeTree/MergeTreeDataPartInMemory.h index 118340f0233..d1a0344859d 100644 --- a/src/Storages/MergeTree/MergeTreeDataPartInMemory.h +++ b/src/Storages/MergeTree/MergeTreeDataPartInMemory.h @@ -44,6 +44,7 @@ public: const MergeTreeIndexGranularity & computed_index_granularity) const override; bool isStoredOnDisk() const override { return false; } + bool isStoredOnRemoteDisk() const override { return false; } bool hasColumnFiles(const NameAndTypePair & column) const override { return !!getColumnPosition(column.name); } String getFileNameForColumn(const NameAndTypePair & /* column */) const override { return ""; } void renameTo(const String & new_relative_path, bool remove_new_dir_if_exists) const override; diff --git a/src/Storages/MergeTree/MergeTreeDataPartWide.cpp b/src/Storages/MergeTree/MergeTreeDataPartWide.cpp index 2f25cf7d12a..312f5b435d6 100644 --- a/src/Storages/MergeTree/MergeTreeDataPartWide.cpp +++ b/src/Storages/MergeTree/MergeTreeDataPartWide.cpp @@ -142,6 +142,11 @@ void MergeTreeDataPartWide::loadIndexGranularity() index_granularity.setInitialized(); } +bool MergeTreeDataPartWide::isStoredOnRemoteDisk() const +{ + return volume->getDisk()->isRemote(); +} + MergeTreeDataPartWide::~MergeTreeDataPartWide() { removeIfNeeded(); diff --git a/src/Storages/MergeTree/MergeTreeDataPartWide.h b/src/Storages/MergeTree/MergeTreeDataPartWide.h index a43396f8cd5..4796143e11d 100644 --- a/src/Storages/MergeTree/MergeTreeDataPartWide.h +++ b/src/Storages/MergeTree/MergeTreeDataPartWide.h @@ -50,6 +50,8 @@ public: bool isStoredOnDisk() const override { return true; } + bool isStoredOnRemoteDisk() const override; + bool supportsVerticalMerge() const override { return true; } String getFileNameForColumn(const NameAndTypePair & column) const override; diff --git a/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp b/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp index 55de92735c3..106bca97a38 100644 --- a/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp +++ b/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -374,6 +375,12 @@ QueryPlanPtr MergeTreeDataSelectExecutor::read( std::move(pipe), fmt::format("MergeTree(with {} projection {})", query_info.projection->desc->type, query_info.projection->desc->name)); plan->addStep(std::move(step)); + + if (query_info.projection->subqueries_for_sets && !query_info.projection->subqueries_for_sets->empty()) + { + SizeLimits limits(settings.max_rows_to_transfer, settings.max_bytes_to_transfer, settings.transfer_overflow_mode); + addCreatingSetsStep(*plan, std::move(*query_info.projection->subqueries_for_sets), limits, context); + } return plan; } diff --git a/src/Storages/MergeTree/MergeTreeIndexReader.cpp b/src/Storages/MergeTree/MergeTreeIndexReader.cpp index fd7358967f3..03a3b811de6 100644 --- a/src/Storages/MergeTree/MergeTreeIndexReader.cpp +++ b/src/Storages/MergeTree/MergeTreeIndexReader.cpp @@ -54,6 +54,7 @@ MergeTreeIndexReader::MergeTreeIndexReader( std::move(settings)); version = index_format.version; + stream->adjustForRange(MarkRange(0, getLastMark(all_mark_ranges_))); stream->seekToStart(); } diff --git a/src/Storages/MergeTree/MergeTreeIndexSet.cpp b/src/Storages/MergeTree/MergeTreeIndexSet.cpp index 60b9ddae329..a08ae4499f2 100644 --- a/src/Storages/MergeTree/MergeTreeIndexSet.cpp +++ b/src/Storages/MergeTree/MergeTreeIndexSet.cpp @@ -451,9 +451,9 @@ bool MergeTreeIndexConditionSet::checkASTUseless(const ASTPtr & node, bool atomi const ASTs & args = func->arguments->children; if (func->name == "and" || func->name == "indexHint") - return checkASTUseless(args[0], atomic) && checkASTUseless(args[1], atomic); + return std::all_of(args.begin(), args.end(), [this, atomic](const auto & arg) { return checkASTUseless(arg, atomic); }); else if (func->name == "or") - return checkASTUseless(args[0], atomic) || checkASTUseless(args[1], atomic); + return std::any_of(args.begin(), args.end(), [this, atomic](const auto & arg) { return checkASTUseless(arg, atomic); }); else if (func->name == "not") return checkASTUseless(args[0], atomic); else diff --git a/src/Storages/MergeTree/MergeTreePartInfo.h b/src/Storages/MergeTree/MergeTreePartInfo.h index 82fe0b860c8..b4c5687209b 100644 --- a/src/Storages/MergeTree/MergeTreePartInfo.h +++ b/src/Storages/MergeTree/MergeTreePartInfo.h @@ -139,7 +139,8 @@ struct DetachedPartInfo : public MergeTreePartInfo "clone", "attaching", "deleting", - "tmp-fetch" + "tmp-fetch", + "covered-by-broken", }); /// NOTE: It may parse part info incorrectly. diff --git a/src/Storages/MergeTree/MergeTreeRangeReader.cpp b/src/Storages/MergeTree/MergeTreeRangeReader.cpp index 2f6bc10e472..124f13b14a8 100644 --- a/src/Storages/MergeTree/MergeTreeRangeReader.cpp +++ b/src/Storages/MergeTree/MergeTreeRangeReader.cpp @@ -54,9 +54,21 @@ static void filterColumns(Columns & columns, const ColumnPtr & filter) } +static size_t getLastMark(const MergeTreeRangeReader::ReadResult::RangesInfo & ranges) +{ + size_t current_task_last_mark = 0; + for (const auto & mark_range : ranges) + current_task_last_mark = std::max(current_task_last_mark, mark_range.range.end); + return current_task_last_mark; +} + + MergeTreeRangeReader::DelayedStream::DelayedStream( - size_t from_mark, IMergeTreeReader * merge_tree_reader_) + size_t from_mark, + size_t current_task_last_mark_, + IMergeTreeReader * merge_tree_reader_) : current_mark(from_mark), current_offset(0), num_delayed_rows(0) + , current_task_last_mark(current_task_last_mark_) , merge_tree_reader(merge_tree_reader_) , index_granularity(&(merge_tree_reader->data_part->index_granularity)) , continue_reading(false), is_finished(false) @@ -73,7 +85,8 @@ size_t MergeTreeRangeReader::DelayedStream::readRows(Columns & columns, size_t n { if (num_rows) { - size_t rows_read = merge_tree_reader->readRows(current_mark, continue_reading, num_rows, columns); + size_t rows_read = merge_tree_reader->readRows( + current_mark, current_task_last_mark, continue_reading, num_rows, columns); continue_reading = true; /// Zero rows_read maybe either because reading has finished @@ -151,13 +164,13 @@ size_t MergeTreeRangeReader::DelayedStream::finalize(Columns & columns) MergeTreeRangeReader::Stream::Stream( - size_t from_mark, size_t to_mark, IMergeTreeReader * merge_tree_reader_) + size_t from_mark, size_t to_mark, size_t current_task_last_mark, IMergeTreeReader * merge_tree_reader_) : current_mark(from_mark), offset_after_current_mark(0) , last_mark(to_mark) , merge_tree_reader(merge_tree_reader_) , index_granularity(&(merge_tree_reader->data_part->index_granularity)) , current_mark_index_granularity(index_granularity->getMarkRows(from_mark)) - , stream(from_mark, merge_tree_reader) + , stream(from_mark, current_task_last_mark, merge_tree_reader) { size_t marks_count = index_granularity->getMarksCount(); if (from_mark >= marks_count) @@ -280,9 +293,9 @@ void MergeTreeRangeReader::ReadResult::adjustLastGranule() throw Exception("Can't adjust last granule because no granules were added.", ErrorCodes::LOGICAL_ERROR); if (num_rows_to_subtract > rows_per_granule.back()) - throw Exception("Can't adjust last granule because it has " + toString(rows_per_granule.back()) - + " rows, but try to subtract " + toString(num_rows_to_subtract) + " rows.", - ErrorCodes::LOGICAL_ERROR); + throw Exception(ErrorCodes::LOGICAL_ERROR, + "Can't adjust last granule because it has {} rows, but try to subtract {} rows.", + toString(rows_per_granule.back()), toString(num_rows_to_subtract)); rows_per_granule.back() -= num_rows_to_subtract; total_rows_per_granule -= num_rows_to_subtract; @@ -750,6 +763,8 @@ MergeTreeRangeReader::ReadResult MergeTreeRangeReader::startReadingChain(size_t ReadResult result; result.columns.resize(merge_tree_reader->getColumns().size()); + size_t current_task_last_mark = getLastMark(ranges); + /// Stream is lazy. result.num_added_rows is the number of rows added to block which is not equal to /// result.num_rows_read until call to stream.finalize(). Also result.num_added_rows may be less than /// result.num_rows_read if the last granule in range also the last in part (so we have to adjust last granule). @@ -760,7 +775,7 @@ MergeTreeRangeReader::ReadResult MergeTreeRangeReader::startReadingChain(size_t if (stream.isFinished()) { result.addRows(stream.finalize(result.columns)); - stream = Stream(ranges.front().begin, ranges.front().end, merge_tree_reader); + stream = Stream(ranges.front().begin, ranges.front().end, current_task_last_mark, merge_tree_reader); result.addRange(ranges.front()); ranges.pop_front(); } @@ -807,6 +822,7 @@ Columns MergeTreeRangeReader::continueReadingChain(ReadResult & result, size_t & const auto & rows_per_granule = result.rowsPerGranule(); const auto & started_ranges = result.startedRanges(); + size_t current_task_last_mark = getLastMark(started_ranges); size_t next_range_to_start = 0; auto size = rows_per_granule.size(); @@ -818,7 +834,7 @@ Columns MergeTreeRangeReader::continueReadingChain(ReadResult & result, size_t & num_rows += stream.finalize(columns); const auto & range = started_ranges[next_range_to_start].range; ++next_range_to_start; - stream = Stream(range.begin, range.end, merge_tree_reader); + stream = Stream(range.begin, range.end, current_task_last_mark, merge_tree_reader); } bool last = i + 1 == size; @@ -1044,10 +1060,15 @@ void MergeTreeRangeReader::executePrewhereActionsAndFilterColumns(ReadResult & r /// Filter in WHERE instead else { - auto type = getSampleBlock().getByName(prewhere_info->prewhere_column_name).type; - ColumnWithTypeAndName col(result.getFilterHolder()->convertToFullColumnIfConst(), std::make_shared(), ""); - result.columns[prewhere_column_pos] = castColumn(col, type); - result.clearFilter(); // Acting as a flag to not filter in PREWHERE + if (prewhere_info->remove_prewhere_column) + result.columns.erase(result.columns.begin() + prewhere_column_pos); + else + { + auto type = getSampleBlock().getByName(prewhere_info->prewhere_column_name).type; + ColumnWithTypeAndName col(result.getFilterHolder()->convertToFullColumnIfConst(), std::make_shared(), ""); + result.columns[prewhere_column_pos] = castColumn(col, type); + result.clearFilter(); // Acting as a flag to not filter in PREWHERE + } } } diff --git a/src/Storages/MergeTree/MergeTreeRangeReader.h b/src/Storages/MergeTree/MergeTreeRangeReader.h index d099d2475d2..c913b476b73 100644 --- a/src/Storages/MergeTree/MergeTreeRangeReader.h +++ b/src/Storages/MergeTree/MergeTreeRangeReader.h @@ -62,7 +62,7 @@ public: { public: DelayedStream() = default; - DelayedStream(size_t from_mark, IMergeTreeReader * merge_tree_reader); + DelayedStream(size_t from_mark, size_t current_task_last_mark_, IMergeTreeReader * merge_tree_reader); /// Read @num_rows rows from @from_mark starting from @offset row /// Returns the number of rows added to block. @@ -81,6 +81,8 @@ public: size_t current_offset = 0; /// Num of rows we have to read size_t num_delayed_rows = 0; + /// Last mark from all ranges of current task. + size_t current_task_last_mark = 0; /// Actual reader of data from disk IMergeTreeReader * merge_tree_reader = nullptr; @@ -99,7 +101,8 @@ public: { public: Stream() = default; - Stream(size_t from_mark, size_t to_mark, IMergeTreeReader * merge_tree_reader); + Stream(size_t from_mark, size_t to_mark, + size_t current_task_last_mark, IMergeTreeReader * merge_tree_reader); /// Returns the number of rows added to block. size_t read(Columns & columns, size_t num_rows, bool skip_remaining_rows_in_current_granule); @@ -122,6 +125,7 @@ public: /// Invariant: offset_after_current_mark + skipped_rows_after_offset < index_granularity size_t offset_after_current_mark = 0; + /// Last mark in current range. size_t last_mark = 0; IMergeTreeReader * merge_tree_reader = nullptr; diff --git a/src/Storages/MergeTree/MergeTreeReadPool.cpp b/src/Storages/MergeTree/MergeTreeReadPool.cpp index 4bb247f1369..09542c30636 100644 --- a/src/Storages/MergeTree/MergeTreeReadPool.cpp +++ b/src/Storages/MergeTree/MergeTreeReadPool.cpp @@ -25,7 +25,6 @@ MergeTreeReadPool::MergeTreeReadPool( const MergeTreeData & data_, const StorageMetadataPtr & metadata_snapshot_, const PrewhereInfoPtr & prewhere_info_, - const bool check_columns_, const Names & column_names_, const BackoffSettings & backoff_settings_, size_t preferred_block_size_bytes_, @@ -41,7 +40,7 @@ MergeTreeReadPool::MergeTreeReadPool( , parts_ranges{std::move(parts_)} { /// parts don't contain duplicate MergeTreeDataPart's. - const auto per_part_sum_marks = fillPerPartInfo(parts_ranges, check_columns_); + const auto per_part_sum_marks = fillPerPartInfo(parts_ranges); fillPerThreadInfo(threads_, sum_marks_, per_part_sum_marks, parts_ranges, min_marks_for_concurrent_read_); } @@ -89,8 +88,11 @@ MergeTreeReadTaskPtr MergeTreeReadPool::getTask(const size_t min_marks_to_read, auto & part = parts_with_idx[part_idx]; auto & marks_in_part = thread_tasks.sum_marks_in_parts.back(); - /// Get whole part to read if it is small enough. - auto need_marks = std::min(marks_in_part, min_marks_to_read); + size_t need_marks; + if (is_part_on_remote_disk[part_idx]) /// For better performance with remote disks + need_marks = marks_in_part; + else /// Get whole part to read if it is small enough. + need_marks = std::min(marks_in_part, min_marks_to_read); /// Do not leave too little rows in part for next time. if (marks_in_part > need_marks && @@ -187,15 +189,16 @@ void MergeTreeReadPool::profileFeedback(const ReadBufferFromFileBase::ProfileInf } -std::vector MergeTreeReadPool::fillPerPartInfo( - const RangesInDataParts & parts, const bool check_columns) +std::vector MergeTreeReadPool::fillPerPartInfo(const RangesInDataParts & parts) { std::vector per_part_sum_marks; Block sample_block = metadata_snapshot->getSampleBlock(); + is_part_on_remote_disk.resize(parts.size()); for (const auto i : collections::range(0, parts.size())) { const auto & part = parts[i]; + is_part_on_remote_disk[i] = part.data_part->isStoredOnRemoteDisk(); /// Read marks for every data part. size_t sum_marks = 0; @@ -204,7 +207,7 @@ std::vector MergeTreeReadPool::fillPerPartInfo( per_part_sum_marks.push_back(sum_marks); - auto task_columns = getReadTaskColumns(data, metadata_snapshot, part.data_part, column_names, prewhere_info, check_columns); + auto task_columns = getReadTaskColumns(data, metadata_snapshot, part.data_part, column_names, prewhere_info); auto size_predictor = !predict_block_size_bytes ? nullptr : MergeTreeBaseSelectProcessor::getSizePredictor(part.data_part, task_columns, sample_block); diff --git a/src/Storages/MergeTree/MergeTreeReadPool.h b/src/Storages/MergeTree/MergeTreeReadPool.h index 380b132b806..aac4d5016a2 100644 --- a/src/Storages/MergeTree/MergeTreeReadPool.h +++ b/src/Storages/MergeTree/MergeTreeReadPool.h @@ -73,7 +73,7 @@ public: const size_t threads_, const size_t sum_marks_, const size_t min_marks_for_concurrent_read_, RangesInDataParts && parts_, const MergeTreeData & data_, const StorageMetadataPtr & metadata_snapshot_, const PrewhereInfoPtr & prewhere_info_, - const bool check_columns_, const Names & column_names_, + const Names & column_names_, const BackoffSettings & backoff_settings_, size_t preferred_block_size_bytes_, const bool do_not_steal_tasks_ = false); @@ -88,8 +88,7 @@ public: Block getHeader() const; private: - std::vector fillPerPartInfo( - const RangesInDataParts & parts, const bool check_columns); + std::vector fillPerPartInfo(const RangesInDataParts & parts); void fillPerThreadInfo( const size_t threads, const size_t sum_marks, std::vector per_part_sum_marks, @@ -136,6 +135,8 @@ private: mutable std::mutex mutex; Poco::Logger * log = &Poco::Logger::get("MergeTreeReadPool"); + + std::vector is_part_on_remote_disk; }; using MergeTreeReadPoolPtr = std::shared_ptr; diff --git a/src/Storages/MergeTree/MergeTreeReaderCompact.cpp b/src/Storages/MergeTree/MergeTreeReaderCompact.cpp index 15c5795ee7b..f000b43f61a 100644 --- a/src/Storages/MergeTree/MergeTreeReaderCompact.cpp +++ b/src/Storages/MergeTree/MergeTreeReaderCompact.cpp @@ -100,8 +100,7 @@ MergeTreeReaderCompact::MergeTreeReaderCompact( std::make_unique( data_part->volume->getDisk()->readFile( full_data_path, - settings.read_settings, - 0), + settings.read_settings), /* allow_different_codecs = */ true); if (profile_callback_) @@ -121,7 +120,8 @@ MergeTreeReaderCompact::MergeTreeReaderCompact( } } -size_t MergeTreeReaderCompact::readRows(size_t from_mark, bool continue_reading, size_t max_rows_to_read, Columns & res_columns) +size_t MergeTreeReaderCompact::readRows( + size_t from_mark, size_t current_task_last_mark, bool continue_reading, size_t max_rows_to_read, Columns & res_columns) { if (continue_reading) from_mark = next_mark; @@ -157,7 +157,7 @@ size_t MergeTreeReaderCompact::readRows(size_t from_mark, bool continue_reading, auto & column = res_columns[pos]; size_t column_size_before_reading = column->size(); - readData(column_from_part, column, from_mark, *column_positions[pos], rows_to_read, read_only_offsets[pos]); + readData(column_from_part, column, from_mark, current_task_last_mark, *column_positions[pos], rows_to_read, read_only_offsets[pos]); size_t read_rows_in_column = column->size() - column_size_before_reading; if (read_rows_in_column != rows_to_read) @@ -192,7 +192,7 @@ size_t MergeTreeReaderCompact::readRows(size_t from_mark, bool continue_reading, void MergeTreeReaderCompact::readData( const NameAndTypePair & name_and_type, ColumnPtr & column, - size_t from_mark, size_t column_position, size_t rows_to_read, bool only_offsets) + size_t from_mark, size_t current_task_last_mark, size_t column_position, size_t rows_to_read, bool only_offsets) { const auto & [name, type] = name_and_type; @@ -204,6 +204,8 @@ void MergeTreeReaderCompact::readData( if (only_offsets && (substream_path.size() != 1 || substream_path[0].type != ISerialization::Substream::ArraySizes)) return nullptr; + /// For asynchronous reading from remote fs. + data_buffer->setReadUntilPosition(marks_loader.getMark(current_task_last_mark).offset_in_compressed_file); return data_buffer; }; diff --git a/src/Storages/MergeTree/MergeTreeReaderCompact.h b/src/Storages/MergeTree/MergeTreeReaderCompact.h index dbfaa7868fa..350c8427eff 100644 --- a/src/Storages/MergeTree/MergeTreeReaderCompact.h +++ b/src/Storages/MergeTree/MergeTreeReaderCompact.h @@ -32,7 +32,8 @@ public: /// Return the number of rows has been read or zero if there is no columns to read. /// If continue_reading is true, continue reading from last state, otherwise seek to from_mark - size_t readRows(size_t from_mark, bool continue_reading, size_t max_rows_to_read, Columns & res_columns) override; + size_t readRows(size_t from_mark, size_t current_task_last_mark, + bool continue_reading, size_t max_rows_to_read, Columns & res_columns) override; bool canReadIncompleteGranules() const override { return false; } @@ -57,7 +58,7 @@ private: void seekToMark(size_t row_index, size_t column_index); void readData(const NameAndTypePair & name_and_type, ColumnPtr & column, size_t from_mark, - size_t column_position, size_t rows_to_read, bool only_offsets); + size_t current_task_last_mark, size_t column_position, size_t rows_to_read, bool only_offsets); /// Returns maximal value of granule size in compressed file from @mark_ranges. /// This value is used as size of read buffer. diff --git a/src/Storages/MergeTree/MergeTreeReaderInMemory.cpp b/src/Storages/MergeTree/MergeTreeReaderInMemory.cpp index 3e81fec5145..8a69183e858 100644 --- a/src/Storages/MergeTree/MergeTreeReaderInMemory.cpp +++ b/src/Storages/MergeTree/MergeTreeReaderInMemory.cpp @@ -37,7 +37,8 @@ MergeTreeReaderInMemory::MergeTreeReaderInMemory( } } -size_t MergeTreeReaderInMemory::readRows(size_t from_mark, bool continue_reading, size_t max_rows_to_read, Columns & res_columns) +size_t MergeTreeReaderInMemory::readRows( + size_t from_mark, size_t /* current_task_last_mark */, bool continue_reading, size_t max_rows_to_read, Columns & res_columns) { if (!continue_reading) total_rows_read = 0; diff --git a/src/Storages/MergeTree/MergeTreeReaderInMemory.h b/src/Storages/MergeTree/MergeTreeReaderInMemory.h index 4526b19c4a8..ff6eb92d9c3 100644 --- a/src/Storages/MergeTree/MergeTreeReaderInMemory.h +++ b/src/Storages/MergeTree/MergeTreeReaderInMemory.h @@ -23,7 +23,8 @@ public: /// Return the number of rows has been read or zero if there is no columns to read. /// If continue_reading is true, continue reading from last state, otherwise seek to from_mark - size_t readRows(size_t from_mark, bool continue_reading, size_t max_rows_to_read, Columns & res_columns) override; + size_t readRows(size_t from_mark, size_t current_tasl_last_mark, + bool continue_reading, size_t max_rows_to_read, Columns & res_columns) override; bool canReadIncompleteGranules() const override { return true; } diff --git a/src/Storages/MergeTree/MergeTreeReaderStream.cpp b/src/Storages/MergeTree/MergeTreeReaderStream.cpp index f225ecae8fa..c679d6eb869 100644 --- a/src/Storages/MergeTree/MergeTreeReaderStream.cpp +++ b/src/Storages/MergeTree/MergeTreeReaderStream.cpp @@ -1,6 +1,7 @@ #include #include +#include #include @@ -13,21 +14,25 @@ namespace ErrorCodes extern const int CANNOT_READ_ALL_DATA; } - MergeTreeReaderStream::MergeTreeReaderStream( DiskPtr disk_, const String & path_prefix_, const String & data_file_extension_, size_t marks_count_, const MarkRanges & all_mark_ranges, const MergeTreeReaderSettings & settings, MarkCache * mark_cache_, - UncompressedCache * uncompressed_cache, size_t file_size, + UncompressedCache * uncompressed_cache, size_t file_size_, const MergeTreeIndexGranularityInfo * index_granularity_info_, const ReadBufferFromFileBase::ProfileCallback & profile_callback, clockid_t clock_type) - : disk(std::move(disk_)), path_prefix(path_prefix_), data_file_extension(data_file_extension_), marks_count(marks_count_) - , mark_cache(mark_cache_), save_marks_in_cache(settings.save_marks_in_cache) - , index_granularity_info(index_granularity_info_) - , marks_loader(disk, mark_cache, index_granularity_info->getMarksFilePath(path_prefix), - marks_count, *index_granularity_info, save_marks_in_cache) + : disk(std::move(disk_)) + , path_prefix(path_prefix_) + , data_file_extension(data_file_extension_) + , marks_count(marks_count_) + , file_size(file_size_) + , mark_cache(mark_cache_) + , save_marks_in_cache(settings.save_marks_in_cache) + , index_granularity_info(index_granularity_info_) + , marks_loader(disk, mark_cache, index_granularity_info->getMarksFilePath(path_prefix), + marks_count, *index_granularity_info, save_marks_in_cache) { /// Compute the size of the buffer. size_t max_mark_range_bytes = 0; @@ -37,43 +42,20 @@ MergeTreeReaderStream::MergeTreeReaderStream( { size_t left_mark = mark_range.begin; size_t right_mark = mark_range.end; - - /// NOTE: if we are reading the whole file, then right_mark == marks_count - /// and we will use max_read_buffer_size for buffer size, thus avoiding the need to load marks. - - /// If the end of range is inside the block, we will need to read it too. - if (right_mark < marks_count && marks_loader.getMark(right_mark).offset_in_decompressed_block > 0) - { - auto indices = collections::range(right_mark, marks_count); - auto it = std::upper_bound(indices.begin(), indices.end(), right_mark, [this](size_t i, size_t j) - { - return marks_loader.getMark(i).offset_in_compressed_file < marks_loader.getMark(j).offset_in_compressed_file; - }); - - right_mark = (it == indices.end() ? marks_count : *it); - } - - size_t mark_range_bytes; - - /// If there are no marks after the end of range, just use file size - if (right_mark >= marks_count - || (right_mark + 1 == marks_count - && marks_loader.getMark(right_mark).offset_in_compressed_file == marks_loader.getMark(mark_range.end).offset_in_compressed_file)) - { - mark_range_bytes = file_size - (left_mark < marks_count ? marks_loader.getMark(left_mark).offset_in_compressed_file : 0); - } - else - { - mark_range_bytes = marks_loader.getMark(right_mark).offset_in_compressed_file - marks_loader.getMark(left_mark).offset_in_compressed_file; - } + auto [right_offset, mark_range_bytes] = getRightOffsetAndBytesRange(left_mark, right_mark); max_mark_range_bytes = std::max(max_mark_range_bytes, mark_range_bytes); sum_mark_range_bytes += mark_range_bytes; } + std::optional estimated_sum_mark_range_bytes; + if (sum_mark_range_bytes) + estimated_sum_mark_range_bytes.emplace(sum_mark_range_bytes); + /// Avoid empty buffer. May happen while reading dictionary for DataTypeLowCardinality. /// For example: part has single dictionary and all marks point to the same position. ReadSettings read_settings = settings.read_settings; + read_settings.must_read_until_position = true; if (max_mark_range_bytes != 0) read_settings = read_settings.adjustBufferSize(max_mark_range_bytes); @@ -86,12 +68,12 @@ MergeTreeReaderStream::MergeTreeReaderStream( { auto buffer = std::make_unique( fullPath(disk, path_prefix + data_file_extension), - [this, sum_mark_range_bytes, read_settings]() + [this, estimated_sum_mark_range_bytes, read_settings]() { return disk->readFile( path_prefix + data_file_extension, read_settings, - sum_mark_range_bytes); + estimated_sum_mark_range_bytes); }, uncompressed_cache); @@ -110,7 +92,7 @@ MergeTreeReaderStream::MergeTreeReaderStream( disk->readFile( path_prefix + data_file_extension, read_settings, - sum_mark_range_bytes)); + estimated_sum_mark_range_bytes)); if (profile_callback) buffer->setProfileCallback(profile_callback, clock_type); @@ -124,6 +106,45 @@ MergeTreeReaderStream::MergeTreeReaderStream( } +std::pair MergeTreeReaderStream::getRightOffsetAndBytesRange(size_t left_mark, size_t right_mark) +{ + /// NOTE: if we are reading the whole file, then right_mark == marks_count + /// and we will use max_read_buffer_size for buffer size, thus avoiding the need to load marks. + + /// If the end of range is inside the block, we will need to read it too. + size_t result_right_mark = right_mark; + if (right_mark < marks_count && marks_loader.getMark(right_mark).offset_in_decompressed_block > 0) + { + auto indices = collections::range(right_mark, marks_count); + auto it = std::upper_bound(indices.begin(), indices.end(), right_mark, [this](size_t i, size_t j) + { + return marks_loader.getMark(i).offset_in_compressed_file < marks_loader.getMark(j).offset_in_compressed_file; + }); + + result_right_mark = (it == indices.end() ? marks_count : *it); + } + + size_t right_offset; + size_t mark_range_bytes; + + /// If there are no marks after the end of range, just use file size + if (result_right_mark >= marks_count + || (result_right_mark + 1 == marks_count + && marks_loader.getMark(result_right_mark).offset_in_compressed_file == marks_loader.getMark(right_mark).offset_in_compressed_file)) + { + right_offset = file_size; + mark_range_bytes = right_offset - (left_mark < marks_count ? marks_loader.getMark(left_mark).offset_in_compressed_file : 0); + } + else + { + right_offset = marks_loader.getMark(result_right_mark).offset_in_compressed_file; + mark_range_bytes = right_offset - marks_loader.getMark(left_mark).offset_in_compressed_file; + } + + return std::make_pair(right_offset, mark_range_bytes); +} + + void MergeTreeReaderStream::seekToMark(size_t index) { MarkInCompressedFile mark = marks_loader.getMark(index); @@ -168,4 +189,25 @@ void MergeTreeReaderStream::seekToStart() } } + +void MergeTreeReaderStream::adjustForRange(MarkRange range) +{ + auto [right_offset, mark_range_bytes] = getRightOffsetAndBytesRange(range.begin, range.end); + if (!right_offset) + { + if (cached_buffer) + cached_buffer->setReadUntilEnd(); + if (non_cached_buffer) + non_cached_buffer->setReadUntilEnd(); + } + else if (right_offset > last_right_offset) + { + last_right_offset = right_offset; + if (cached_buffer) + cached_buffer->setReadUntilPosition(last_right_offset); + if (non_cached_buffer) + non_cached_buffer->setReadUntilPosition(last_right_offset); + } +} + } diff --git a/src/Storages/MergeTree/MergeTreeReaderStream.h b/src/Storages/MergeTree/MergeTreeReaderStream.h index 32b9c45ccab..601abdc5f1e 100644 --- a/src/Storages/MergeTree/MergeTreeReaderStream.h +++ b/src/Storages/MergeTree/MergeTreeReaderStream.h @@ -23,25 +23,36 @@ public: const MarkRanges & all_mark_ranges, const MergeTreeReaderSettings & settings_, MarkCache * mark_cache, UncompressedCache * uncompressed_cache, - size_t file_size, const MergeTreeIndexGranularityInfo * index_granularity_info_, + size_t file_size_, const MergeTreeIndexGranularityInfo * index_granularity_info_, const ReadBufferFromFileBase::ProfileCallback & profile_callback, clockid_t clock_type); void seekToMark(size_t index); void seekToStart(); + /** + * Does buffer need to know something about mark ranges bounds it is going to read? + * (In case of MergeTree* tables). Mostly needed for reading from remote fs. + */ + void adjustForRange(MarkRange range); + ReadBuffer * data_buffer; private: + std::pair getRightOffsetAndBytesRange(size_t left_mark, size_t right_mark); + DiskPtr disk; std::string path_prefix; std::string data_file_extension; size_t marks_count; + size_t file_size; MarkCache * mark_cache; bool save_marks_in_cache; + size_t last_right_offset = 0; + const MergeTreeIndexGranularityInfo * index_granularity_info; std::unique_ptr cached_buffer; diff --git a/src/Storages/MergeTree/MergeTreeReaderWide.cpp b/src/Storages/MergeTree/MergeTreeReaderWide.cpp index 29cc45a5c60..50650ef66e5 100644 --- a/src/Storages/MergeTree/MergeTreeReaderWide.cpp +++ b/src/Storages/MergeTree/MergeTreeReaderWide.cpp @@ -61,7 +61,8 @@ MergeTreeReaderWide::MergeTreeReaderWide( } -size_t MergeTreeReaderWide::readRows(size_t from_mark, bool continue_reading, size_t max_rows_to_read, Columns & res_columns) +size_t MergeTreeReaderWide::readRows( + size_t from_mark, size_t current_task_last_mark, bool continue_reading, size_t max_rows_to_read, Columns & res_columns) { size_t read_rows = 0; try @@ -83,7 +84,7 @@ size_t MergeTreeReaderWide::readRows(size_t from_mark, bool continue_reading, si try { auto & cache = caches[column_from_part.getNameInStorage()]; - prefetch(column_from_part, from_mark, continue_reading, cache, prefetched_streams); + prefetch(column_from_part, from_mark, continue_reading, current_task_last_mark, cache, prefetched_streams); } catch (Exception & e) { @@ -113,7 +114,7 @@ size_t MergeTreeReaderWide::readRows(size_t from_mark, bool continue_reading, si auto & cache = caches[column_from_part.getNameInStorage()]; readData( - column_from_part, column, from_mark, continue_reading, + column_from_part, column, from_mark, continue_reading, current_task_last_mark, max_rows_to_read, cache, /* was_prefetched =*/ !prefetched_streams.empty()); /// For elements of Nested, column_size_before_reading may be greater than column size @@ -195,6 +196,7 @@ static ReadBuffer * getStream( MergeTreeReaderWide::FileStreams & streams, const NameAndTypePair & name_and_type, size_t from_mark, bool seek_to_mark, + size_t current_task_last_mark, ISerialization::SubstreamsCache & cache) { /// If substream have already been read. @@ -208,6 +210,7 @@ static ReadBuffer * getStream( return nullptr; MergeTreeReaderStream & stream = *it->second; + stream.adjustForRange(MarkRange(seek_to_start ? 0 : from_mark, current_task_last_mark)); if (seek_to_start) stream.seekToStart(); @@ -222,6 +225,7 @@ void MergeTreeReaderWide::prefetch( const NameAndTypePair & name_and_type, size_t from_mark, bool continue_reading, + size_t current_task_last_mark, ISerialization::SubstreamsCache & cache, std::unordered_set & prefetched_streams) { @@ -235,7 +239,7 @@ void MergeTreeReaderWide::prefetch( if (!prefetched_streams.count(stream_name)) { bool seek_to_mark = !continue_reading; - if (ReadBuffer * buf = getStream(false, substream_path, streams, name_and_type, from_mark, seek_to_mark, cache)) + if (ReadBuffer * buf = getStream(false, substream_path, streams, name_and_type, from_mark, seek_to_mark, current_task_last_mark, cache)) buf->prefetch(); prefetched_streams.insert(stream_name); @@ -246,8 +250,8 @@ void MergeTreeReaderWide::prefetch( void MergeTreeReaderWide::readData( const NameAndTypePair & name_and_type, ColumnPtr & column, - size_t from_mark, bool continue_reading, size_t max_rows_to_read, - ISerialization::SubstreamsCache & cache, bool was_prefetched) + size_t from_mark, bool continue_reading, size_t current_task_last_mark, + size_t max_rows_to_read, ISerialization::SubstreamsCache & cache, bool was_prefetched) { double & avg_value_size_hint = avg_value_size_hints[name_and_type.name]; ISerialization::DeserializeBinaryBulkSettings deserialize_settings; @@ -260,7 +264,7 @@ void MergeTreeReaderWide::readData( { deserialize_settings.getter = [&](const ISerialization::SubstreamPath & substream_path) { - return getStream(/* seek_to_start = */true, substream_path, streams, name_and_type, from_mark, /* seek_to_mark = */false, cache); + return getStream(/* seek_to_start = */true, substream_path, streams, name_and_type, from_mark, /* seek_to_mark = */false, current_task_last_mark, cache); }; serialization->deserializeBinaryBulkStatePrefix(deserialize_settings, deserialize_binary_bulk_state_map[name]); } @@ -271,7 +275,7 @@ void MergeTreeReaderWide::readData( return getStream( /* seek_to_start = */false, substream_path, streams, name_and_type, from_mark, - seek_to_mark, cache); + seek_to_mark, current_task_last_mark, cache); }; deserialize_settings.continuous_reading = continue_reading; auto & deserialize_state = deserialize_binary_bulk_state_map[name]; diff --git a/src/Storages/MergeTree/MergeTreeReaderWide.h b/src/Storages/MergeTree/MergeTreeReaderWide.h index 08d743370a9..e27dd85643b 100644 --- a/src/Storages/MergeTree/MergeTreeReaderWide.h +++ b/src/Storages/MergeTree/MergeTreeReaderWide.h @@ -28,7 +28,8 @@ public: /// Return the number of rows has been read or zero if there is no columns to read. /// If continue_reading is true, continue reading from last state, otherwise seek to from_mark - size_t readRows(size_t from_mark, bool continue_reading, size_t max_rows_to_read, Columns & res_columns) override; + size_t readRows(size_t from_mark, size_t current_task_last_mark, + bool continue_reading, size_t max_rows_to_read, Columns & res_columns) override; bool canReadIncompleteGranules() const override { return true; } @@ -45,7 +46,7 @@ private: void readData( const NameAndTypePair & name_and_type, ColumnPtr & column, - size_t from_mark, bool continue_reading, size_t max_rows_to_read, + size_t from_mark, bool continue_reading, size_t current_task_last_mark, size_t max_rows_to_read, ISerialization::SubstreamsCache & cache, bool was_prefetched); /// Make next readData more simple by calling 'prefetch' of all related ReadBuffers (column streams). @@ -53,6 +54,7 @@ private: const NameAndTypePair & name_and_type, size_t from_mark, bool continue_reading, + size_t current_task_last_mark, ISerialization::SubstreamsCache & cache, std::unordered_set & prefetched_streams); /// if stream was already prefetched do nothing }; diff --git a/src/Storages/MergeTree/MergeTreeSelectProcessor.cpp b/src/Storages/MergeTree/MergeTreeSelectProcessor.cpp index 98077605f89..203ce7a57d2 100644 --- a/src/Storages/MergeTree/MergeTreeSelectProcessor.cpp +++ b/src/Storages/MergeTree/MergeTreeSelectProcessor.cpp @@ -19,7 +19,6 @@ MergeTreeSelectProcessor::MergeTreeSelectProcessor( bool use_uncompressed_cache_, const PrewhereInfoPtr & prewhere_info_, ExpressionActionsSettings actions_settings, - bool check_columns_, const MergeTreeReaderSettings & reader_settings_, const Names & virt_column_names_, size_t part_index_in_query_, @@ -35,7 +34,6 @@ MergeTreeSelectProcessor::MergeTreeSelectProcessor( all_mark_ranges(std::move(mark_ranges_)), part_index_in_query(part_index_in_query_), has_limit_below_one_block(has_limit_below_one_block_), - check_columns(check_columns_), total_rows(data_part->index_granularity.getRowsCountInRanges(all_mark_ranges)) { addTotalRowsApprox(total_rows); @@ -46,7 +44,7 @@ void MergeTreeSelectProcessor::initializeReaders() { task_columns = getReadTaskColumns( storage, metadata_snapshot, data_part, - required_columns, prewhere_info, check_columns); + required_columns, prewhere_info); /// Will be used to distinguish between PREWHERE and WHERE columns when applying filter const auto & column_names = task_columns.columns.getNames(); diff --git a/src/Storages/MergeTree/MergeTreeSelectProcessor.h b/src/Storages/MergeTree/MergeTreeSelectProcessor.h index ea4cd349cba..f9b19f9f692 100644 --- a/src/Storages/MergeTree/MergeTreeSelectProcessor.h +++ b/src/Storages/MergeTree/MergeTreeSelectProcessor.h @@ -28,7 +28,6 @@ public: bool use_uncompressed_cache, const PrewhereInfoPtr & prewhere_info, ExpressionActionsSettings actions_settings, - bool check_columns_, const MergeTreeReaderSettings & reader_settings, const Names & virt_column_names = {}, size_t part_index_in_query_ = 0, @@ -66,7 +65,6 @@ protected: /// It reduces amount of read data for queries with small LIMIT. bool has_limit_below_one_block = false; - bool check_columns; size_t total_rows = 0; }; diff --git a/src/Storages/MergeTree/MergeTreeSequentialSource.cpp b/src/Storages/MergeTree/MergeTreeSequentialSource.cpp index 9ea9383c7f0..df8d6a7c127 100644 --- a/src/Storages/MergeTree/MergeTreeSequentialSource.cpp +++ b/src/Storages/MergeTree/MergeTreeSequentialSource.cpp @@ -78,7 +78,8 @@ try const auto & sample = reader->getColumns(); Columns columns(sample.size()); - size_t rows_read = reader->readRows(current_mark, continue_reading, rows_to_read, columns); + /// TODO: pass stream size instead of zero? + size_t rows_read = reader->readRows(current_mark, 0, continue_reading, rows_to_read, columns); if (rows_read) { diff --git a/src/Storages/MergeTree/MergeTreeSettings.h b/src/Storages/MergeTree/MergeTreeSettings.h index e7c2ee1f73c..3401eb46e87 100644 --- a/src/Storages/MergeTree/MergeTreeSettings.h +++ b/src/Storages/MergeTree/MergeTreeSettings.h @@ -116,7 +116,6 @@ struct Settings; M(Int64, merge_with_recompression_ttl_timeout, 3600 * 4, "Minimal time in seconds, when merge with recompression TTL can be repeated.", 0) \ M(Bool, ttl_only_drop_parts, false, "Only drop altogether the expired parts and not partially prune them.", 0) \ M(Bool, materialize_ttl_recalculate_only, false, "Only recalculate ttl info when MATERIALIZE TTL", 0) \ - M(Bool, write_final_mark, true, "Write final mark after end of column (0 - disabled, do nothing if index_granularity_bytes=0)", 0) \ M(Bool, enable_mixed_granularity_parts, true, "Enable parts with adaptive and non adaptive granularity", 0) \ M(MaxThreads, max_part_loading_threads, 0, "The number of threads to load data parts at startup.", 0) \ M(MaxThreads, max_part_removal_threads, 0, "The number of threads for concurrent removal of inactive data parts. One is usually enough, but in 'Google Compute Environment SSD Persistent Disks' file removal (unlink) operation is extraordinarily slow and you probably have to increase this number (recommended is up to 16).", 0) \ @@ -143,7 +142,8 @@ struct Settings; M(UInt64, replicated_max_parallel_sends, 0, "Obsolete setting, does nothing.", 0) \ M(UInt64, replicated_max_parallel_sends_for_table, 0, "Obsolete setting, does nothing.", 0) \ M(UInt64, replicated_max_parallel_fetches, 0, "Obsolete setting, does nothing.", 0) \ - M(UInt64, replicated_max_parallel_fetches_for_table, 0, "Obsolete setting, does nothing.", 0) + M(UInt64, replicated_max_parallel_fetches_for_table, 0, "Obsolete setting, does nothing.", 0) \ + M(Bool, write_final_mark, true, "Obsolete setting, does nothing.", 0) /// Settings that should not change after the creation of a table. #define APPLY_FOR_IMMUTABLE_MERGE_TREE_SETTINGS(M) \ M(index_granularity) @@ -164,7 +164,7 @@ struct MergeTreeSettings : public BaseSettings /// We check settings after storage creation static bool isReadonlySetting(const String & name) { - return name == "index_granularity" || name == "index_granularity_bytes" || name == "write_final_mark" + return name == "index_granularity" || name == "index_granularity_bytes" || name == "enable_mixed_granularity_parts"; } diff --git a/src/Storages/MergeTree/MergeTreeWriteAheadLog.cpp b/src/Storages/MergeTree/MergeTreeWriteAheadLog.cpp index 28f25296a7b..9323249946a 100644 --- a/src/Storages/MergeTree/MergeTreeWriteAheadLog.cpp +++ b/src/Storages/MergeTree/MergeTreeWriteAheadLog.cpp @@ -118,7 +118,7 @@ MergeTreeData::MutableDataPartsVector MergeTreeWriteAheadLog::restore(const Stor std::unique_lock lock(write_mutex); MergeTreeData::MutableDataPartsVector parts; - auto in = disk->readFile(path, {}, 0); + auto in = disk->readFile(path, {}); NativeReader block_in(*in, 0); NameSet dropped_parts; diff --git a/src/Storages/MergeTree/PartMovesBetweenShardsOrchestrator.cpp b/src/Storages/MergeTree/PartMovesBetweenShardsOrchestrator.cpp index c227febbbc2..b3a17250549 100644 --- a/src/Storages/MergeTree/PartMovesBetweenShardsOrchestrator.cpp +++ b/src/Storages/MergeTree/PartMovesBetweenShardsOrchestrator.cpp @@ -1,13 +1,20 @@ #include #include #include -#include #include #include #include namespace DB { + +namespace ErrorCodes +{ + extern const int BAD_ARGUMENTS; + extern const int LOGICAL_ERROR; + extern const int TIMEOUT_EXCEEDED; +} + PartMovesBetweenShardsOrchestrator::PartMovesBetweenShardsOrchestrator(StorageReplicatedMergeTree & storage_) : storage(storage_) , zookeeper_path(storage.zookeeper_path) @@ -27,16 +34,17 @@ void PartMovesBetweenShardsOrchestrator::run() if (need_stop) return; - auto sleep_ms = 10; + /// Don't poll ZooKeeper too often. + auto sleep_ms = 3 * 1000; try { - fetchStateFromZK(); + syncStateFromZK(); + /// Schedule for immediate re-execution as likely there is more work + /// to be done. if (step()) - fetchStateFromZK(); - else - sleep_ms = 3 * 1000; + task->schedule(); } catch (...) { @@ -54,11 +62,11 @@ void PartMovesBetweenShardsOrchestrator::shutdown() LOG_TRACE(log, "PartMovesBetweenShardsOrchestrator thread finished"); } -void PartMovesBetweenShardsOrchestrator::fetchStateFromZK() +void PartMovesBetweenShardsOrchestrator::syncStateFromZK() { std::lock_guard lock(state_mutex); - entries.clear(); + std::vector new_entries; auto zk = storage.getZooKeeper(); @@ -76,8 +84,11 @@ void PartMovesBetweenShardsOrchestrator::fetchStateFromZK() e.version = stat.version; e.znode_name = task_name; - entries[task_name] = std::move(e); + new_entries.push_back(std::move(e)); } + + // Replace in-memory state. + entries = new_entries; } bool PartMovesBetweenShardsOrchestrator::step() @@ -93,7 +104,7 @@ bool PartMovesBetweenShardsOrchestrator::step() { std::lock_guard lock(state_mutex); - for (auto const & entry : entries | boost::adaptors::map_values) + for (auto const & entry : entries) { if (entry.state.value == EntryState::DONE || entry.state.value == EntryState::CANCELLED) continue; @@ -128,11 +139,21 @@ bool PartMovesBetweenShardsOrchestrator::step() throw; } + LOG_DEBUG(log, "stepEntry on task {} from state {} (rollback: {}), try: {}", + entry_to_process->znode_name, + entry_to_process->state.toString(), + entry_to_process->rollback, + entry_to_process->num_tries); + try { /// Use the same ZooKeeper connection. If we'd lost the lock then connection /// will become expired and all consequent operations will fail. - stepEntry(entry_to_process.value(), zk); + Entry new_entry = stepEntry(entry_to_process.value(), zk); + new_entry.last_exception_msg = ""; + new_entry.num_tries = 0; + new_entry.update_time = std::time(nullptr); + zk->set(new_entry.znode_path, new_entry.toString(), new_entry.version); } catch (...) { @@ -140,6 +161,7 @@ bool PartMovesBetweenShardsOrchestrator::step() Entry entry_copy = entry_to_process.value(); entry_copy.last_exception_msg = getCurrentExceptionMessage(false); + entry_copy.num_tries += 1; entry_copy.update_time = std::time(nullptr); zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version); @@ -149,276 +171,537 @@ bool PartMovesBetweenShardsOrchestrator::step() return true; } -void PartMovesBetweenShardsOrchestrator::stepEntry(const Entry & entry, zkutil::ZooKeeperPtr zk) +PartMovesBetweenShardsOrchestrator::Entry PartMovesBetweenShardsOrchestrator::stepEntry(Entry entry, zkutil::ZooKeeperPtr zk) { switch (entry.state.value) { - case EntryState::DONE: - break; - + case EntryState::DONE: [[fallthrough]]; case EntryState::CANCELLED: - break; + throw Exception(ErrorCodes::LOGICAL_ERROR, "Can't stepEntry after terminal state. This is a bug."); case EntryState::TODO: { - /// State transition. - Entry entry_copy = entry; - entry_copy.state = EntryState::SYNC_SOURCE; - entry_copy.update_time = std::time(nullptr); - zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version); + if (entry.rollback) + { + removePins(entry, zk); + entry.state = EntryState::CANCELLED; + return entry; + } + /// The forward transition happens implicitly when task is created by `StorageReplicatedMergeTree::movePartitionToShard`. + else + throw Exception(ErrorCodes::LOGICAL_ERROR, "Unexpected entry state ({}) in stepEntry. This is a bug.", entry.state.toString()); } - break; case EntryState::SYNC_SOURCE: { + if (entry.rollback) { - /// Log entry. - Coordination::Requests ops; - ops.emplace_back(zkutil::makeCheckRequest(entry.znode_path, entry.version)); - - ReplicatedMergeTreeLogEntryData log_entry; - log_entry.type = ReplicatedMergeTreeLogEntryData::SYNC_PINNED_PART_UUIDS; - log_entry.create_time = std::time(nullptr); - log_entry.source_replica = storage.replica_name; - ops.emplace_back(zkutil::makeSetRequest(zookeeper_path + "/log", "", -1)); - ops.emplace_back(zkutil::makeCreateRequest( - zookeeper_path + "/log/log-", log_entry.toString(), zkutil::CreateMode::PersistentSequential)); - - Coordination::Responses responses; - Coordination::Error rc = zk->tryMulti(ops, responses); - zkutil::KeeperMultiException::check(rc, ops, responses); - - String log_znode_path = dynamic_cast(*responses.back()).path_created; - log_entry.znode_name = log_znode_path.substr(log_znode_path.find_last_of('/') + 1); - - /// This wait in background schedule pool is useless. It'd be - /// better to have some notification which will call `step` - /// function when all replicated will finish. TODO. - storage.waitForAllReplicasToProcessLogEntry(zookeeper_path, log_entry, -1); + entry.state = EntryState::TODO; + return entry; } - + else { - /// State transition. - Entry entry_copy = entry; - entry_copy.state = EntryState::SYNC_DESTINATION; - entry_copy.update_time = std::time(nullptr); - zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version); + ReplicatedMergeTreeLogEntryData sync_source_log_entry; + + String sync_source_log_entry_barrier_path = fs::path(entry.znode_path) / ("log_" + entry.state.toString()); + Coordination::Stat sync_source_log_entry_stat; + String sync_source_log_entry_str; + if (zk->tryGet(sync_source_log_entry_barrier_path, sync_source_log_entry_str, &sync_source_log_entry_stat)) + { + LOG_DEBUG(log, "Log entry was already created will check the existing one."); + + sync_source_log_entry = *ReplicatedMergeTreeLogEntry::parse(sync_source_log_entry_str, sync_source_log_entry_stat); + } + else + { + /// Log entry. + Coordination::Requests ops; + ops.emplace_back(zkutil::makeCheckRequest(entry.znode_path, entry.version)); + + sync_source_log_entry.type = ReplicatedMergeTreeLogEntryData::SYNC_PINNED_PART_UUIDS; + sync_source_log_entry.log_entry_id = sync_source_log_entry_barrier_path; + sync_source_log_entry.create_time = std::time(nullptr); + sync_source_log_entry.source_replica = storage.replica_name; + + ops.emplace_back(zkutil::makeCreateRequest(sync_source_log_entry_barrier_path, sync_source_log_entry.toString(), -1)); + ops.emplace_back(zkutil::makeSetRequest(zookeeper_path + "/log", "", -1)); + ops.emplace_back(zkutil::makeCreateRequest( + zookeeper_path + "/log/log-", sync_source_log_entry.toString(), zkutil::CreateMode::PersistentSequential)); + + Coordination::Responses responses; + Coordination::Error rc = zk->tryMulti(ops, responses); + zkutil::KeeperMultiException::check(rc, ops, responses); + + String log_znode_path = dynamic_cast(*responses.back()).path_created; + sync_source_log_entry.znode_name = log_znode_path.substr(log_znode_path.find_last_of('/') + 1); + + LOG_DEBUG(log, "Pushed log entry: {}", log_znode_path); + } + + Strings unwaited = storage.tryWaitForAllReplicasToProcessLogEntry(zookeeper_path, sync_source_log_entry, 1); + if (!unwaited.empty()) + throw Exception(ErrorCodes::TIMEOUT_EXCEEDED, "Some replicas haven't processed event: {}, will retry later.", toString(unwaited)); + + entry.state = EntryState::SYNC_DESTINATION; + return entry; } } - break; case EntryState::SYNC_DESTINATION: { + if (entry.rollback) { - /// Log entry. - Coordination::Requests ops; - ops.emplace_back(zkutil::makeCheckRequest(entry.znode_path, entry.version)); - - ReplicatedMergeTreeLogEntryData log_entry; - log_entry.type = ReplicatedMergeTreeLogEntryData::SYNC_PINNED_PART_UUIDS; - log_entry.create_time = std::time(nullptr); - log_entry.source_replica = storage.replica_name; - log_entry.source_shard = zookeeper_path; - - ops.emplace_back(zkutil::makeSetRequest(entry.to_shard + "/log", "", -1)); - ops.emplace_back(zkutil::makeCreateRequest( - entry.to_shard + "/log/log-", log_entry.toString(), zkutil::CreateMode::PersistentSequential)); - - Coordination::Responses responses; - Coordination::Error rc = zk->tryMulti(ops, responses); - zkutil::KeeperMultiException::check(rc, ops, responses); - - String log_znode_path = dynamic_cast(*responses.back()).path_created; - log_entry.znode_name = log_znode_path.substr(log_znode_path.find_last_of('/') + 1); - - storage.waitForAllReplicasToProcessLogEntry(entry.to_shard, log_entry, -1); - } - - { - /// State transition. Entry entry_copy = entry; - entry_copy.state = EntryState::DESTINATION_FETCH; - entry_copy.update_time = std::time(nullptr); - zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version); + entry_copy.state = EntryState::SYNC_SOURCE; + return entry_copy; + } + else + { + ReplicatedMergeTreeLogEntryData sync_destination_log_entry; + + String sync_destination_log_entry_barrier_path = fs::path(entry.znode_path) / ("log_" + entry.state.toString()); + Coordination::Stat sync_destination_log_entry_stat; + String sync_destination_log_entry_str; + if (zk->tryGet(sync_destination_log_entry_barrier_path, sync_destination_log_entry_str, &sync_destination_log_entry_stat)) + { + LOG_DEBUG(log, "Log entry was already created will check the existing one."); + + sync_destination_log_entry = *ReplicatedMergeTreeLogEntry::parse(sync_destination_log_entry_str, sync_destination_log_entry_stat); + } + else + { + /// Log entry. + Coordination::Requests ops; + ops.emplace_back(zkutil::makeCheckRequest(entry.znode_path, entry.version)); + + sync_destination_log_entry.type = ReplicatedMergeTreeLogEntryData::SYNC_PINNED_PART_UUIDS; + sync_destination_log_entry.log_entry_id = sync_destination_log_entry_barrier_path; + sync_destination_log_entry.create_time = std::time(nullptr); + sync_destination_log_entry.source_replica = storage.replica_name; + sync_destination_log_entry.source_shard = zookeeper_path; + + ops.emplace_back(zkutil::makeCreateRequest(sync_destination_log_entry_barrier_path, sync_destination_log_entry.toString(), -1)); + ops.emplace_back(zkutil::makeSetRequest(entry.to_shard + "/log", "", -1)); + ops.emplace_back(zkutil::makeCreateRequest( + entry.to_shard + "/log/log-", sync_destination_log_entry.toString(), zkutil::CreateMode::PersistentSequential)); + + Coordination::Responses responses; + Coordination::Error rc = zk->tryMulti(ops, responses); + zkutil::KeeperMultiException::check(rc, ops, responses); + + String log_znode_path = dynamic_cast(*responses.back()).path_created; + sync_destination_log_entry.znode_name = log_znode_path.substr(log_znode_path.find_last_of('/') + 1); + + LOG_DEBUG(log, "Pushed log entry: {}", log_znode_path); + } + + Strings unwaited = storage.tryWaitForAllReplicasToProcessLogEntry(entry.to_shard, sync_destination_log_entry, 1); + if (!unwaited.empty()) + throw Exception(ErrorCodes::TIMEOUT_EXCEEDED, "Some replicas haven't processed event: {}, will retry later.", toString(unwaited)); + + entry.state = EntryState::DESTINATION_FETCH; + return entry; } } - break; case EntryState::DESTINATION_FETCH: { - /// Make sure table structure doesn't change when there are part movements in progress. + + if (entry.rollback) { - Coordination::Requests ops; - ops.emplace_back(zkutil::makeCheckRequest(entry.znode_path, entry.version)); + // TODO(nv): Do we want to cleanup fetched data on the destination? + // Maybe leave it there and make sure a background cleanup will take + // care of it sometime later. - /// Log entry. - ReplicatedMergeTreeLogEntryData log_entry; - log_entry.type = ReplicatedMergeTreeLogEntryData::CLONE_PART_FROM_SHARD; - log_entry.create_time = std::time(nullptr); - log_entry.new_part_name = entry.part_name; - log_entry.source_replica = storage.replica_name; - log_entry.source_shard = zookeeper_path; - ops.emplace_back(zkutil::makeSetRequest(entry.to_shard + "/log", "", -1)); - ops.emplace_back(zkutil::makeCreateRequest( - entry.to_shard + "/log/log-", log_entry.toString(), zkutil::CreateMode::PersistentSequential)); - - Coordination::Responses responses; - Coordination::Error rc = zk->tryMulti(ops, responses); - zkutil::KeeperMultiException::check(rc, ops, responses); - - String log_znode_path = dynamic_cast(*responses.back()).path_created; - log_entry.znode_name = log_znode_path.substr(log_znode_path.find_last_of('/') + 1); - - storage.waitForAllReplicasToProcessLogEntry(entry.to_shard, log_entry, -1); + entry.state = EntryState::SYNC_DESTINATION; + return entry; } - + else { - /// State transition. - Entry entry_copy = entry; - entry_copy.state = EntryState::DESTINATION_ATTACH; - entry_copy.update_time = std::time(nullptr); - zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version); + /// Note: Table structure shouldn't be changed while there are part movements in progress. + + ReplicatedMergeTreeLogEntryData fetch_log_entry; + + String fetch_log_entry_barrier_path = fs::path(entry.znode_path) / ("log_" + entry.state.toString()); + Coordination::Stat fetch_log_entry_stat; + String fetch_log_entry_str; + if (zk->tryGet(fetch_log_entry_barrier_path, fetch_log_entry_str, &fetch_log_entry_stat)) + { + LOG_DEBUG(log, "Log entry was already created will check the existing one."); + + fetch_log_entry = *ReplicatedMergeTreeLogEntry::parse(fetch_log_entry_str, fetch_log_entry_stat); + } + else + { + Coordination::Requests ops; + ops.emplace_back(zkutil::makeCheckRequest(entry.znode_path, entry.version)); + + fetch_log_entry.type = ReplicatedMergeTreeLogEntryData::CLONE_PART_FROM_SHARD; + fetch_log_entry.log_entry_id = fetch_log_entry_barrier_path; + fetch_log_entry.create_time = std::time(nullptr); + fetch_log_entry.new_part_name = entry.part_name; + fetch_log_entry.source_replica = storage.replica_name; + fetch_log_entry.source_shard = zookeeper_path; + ops.emplace_back(zkutil::makeCreateRequest(fetch_log_entry_barrier_path, fetch_log_entry.toString(), -1)); + ops.emplace_back(zkutil::makeSetRequest(entry.to_shard + "/log", "", -1)); + ops.emplace_back(zkutil::makeCreateRequest( + entry.to_shard + "/log/log-", fetch_log_entry.toString(), zkutil::CreateMode::PersistentSequential)); + + Coordination::Responses responses; + Coordination::Error rc = zk->tryMulti(ops, responses); + zkutil::KeeperMultiException::check(rc, ops, responses); + + String log_znode_path = dynamic_cast(*responses.back()).path_created; + fetch_log_entry.znode_name = log_znode_path.substr(log_znode_path.find_last_of('/') + 1); + + LOG_DEBUG(log, "Pushed log entry: {}", log_znode_path); + } + + Strings unwaited = storage.tryWaitForAllReplicasToProcessLogEntry(entry.to_shard, fetch_log_entry, 1); + if (!unwaited.empty()) + throw Exception(ErrorCodes::TIMEOUT_EXCEEDED, "Some replicas haven't processed event: {}, will retry later.", toString(unwaited)); + + entry.state = EntryState::DESTINATION_ATTACH; + return entry; } } - break; case EntryState::DESTINATION_ATTACH: { - /// There is a chance that attach on destination will fail and this task will be left in the queue forever. + String attach_log_entry_barrier_path = fs::path(entry.znode_path) / ("log_" + entry.state.toString()); + + if (entry.rollback) { + Coordination::Stat attach_log_entry_stat; + String attach_log_entry_str; + if (!zk->tryGet(attach_log_entry_barrier_path, attach_log_entry_str, &attach_log_entry_stat)) + { + LOG_DEBUG(log, "Log entry for DESTINATION_ATTACH not found. Not sending DROP_RANGE log entry."); + + // ATTACH_PART wasn't issued, nothing to revert. + entry.state = EntryState::DESTINATION_FETCH; + return entry; + } + else + { + // Need to remove ATTACH_PART from the queue or drop data. + // Similar to `StorageReplicatedMergeTree::dropPart` w/o extra + // checks as we know drop shall be possible. + ReplicatedMergeTreeLogEntryData attach_rollback_log_entry; + + String attach_rollback_log_entry_barrier_path = fs::path(entry.znode_path) / ("log_" + entry.state.toString() + "_rollback"); + Coordination::Stat attach_rollback_log_entry_stat; + String attach_rollback_log_entry_str; + if (zk->tryGet(attach_rollback_log_entry_barrier_path, attach_rollback_log_entry_str, &attach_rollback_log_entry_stat)) + { + LOG_DEBUG(log, "Log entry was already created will check the existing one."); + + attach_rollback_log_entry = *ReplicatedMergeTreeLogEntry::parse(attach_rollback_log_entry_str, attach_rollback_log_entry_stat); + } + else + { + const auto attach_log_entry = ReplicatedMergeTreeLogEntry::parse(attach_log_entry_str, attach_log_entry_stat); + + Coordination::Requests ops; + ops.emplace_back(zkutil::makeCheckRequest(entry.znode_path, entry.version)); + + auto drop_part_info = MergeTreePartInfo::fromPartName(attach_log_entry->new_part_name, storage.format_version); + + storage.getClearBlocksInPartitionOps( + ops, *zk, drop_part_info.partition_id, drop_part_info.min_block, drop_part_info.max_block); + size_t clear_block_ops_size = ops.size(); + + attach_rollback_log_entry.type = ReplicatedMergeTreeLogEntryData::DROP_RANGE; + attach_rollback_log_entry.log_entry_id = attach_rollback_log_entry_barrier_path; + attach_rollback_log_entry.source_replica = storage.replica_name; + attach_rollback_log_entry.source_shard = zookeeper_path; + + attach_rollback_log_entry.new_part_name = getPartNamePossiblyFake(storage.format_version, drop_part_info); + attach_rollback_log_entry.create_time = time(nullptr); + + ops.emplace_back(zkutil::makeCreateRequest(attach_rollback_log_entry_barrier_path, attach_rollback_log_entry.toString(), -1)); + ops.emplace_back(zkutil::makeCreateRequest( + entry.to_shard + "/log/log-", attach_rollback_log_entry.toString(), zkutil::CreateMode::PersistentSequential)); + ops.emplace_back(zkutil::makeSetRequest(entry.to_shard + "/log", "", -1)); + Coordination::Responses responses; + Coordination::Error rc = zk->tryMulti(ops, responses); + zkutil::KeeperMultiException::check(rc, ops, responses); + + String log_znode_path + = dynamic_cast(*responses[clear_block_ops_size]).path_created; + attach_rollback_log_entry.znode_name = log_znode_path.substr(log_znode_path.find_last_of('/') + 1); + + LOG_DEBUG(log, "Pushed log entry: {}", log_znode_path); + } + + Strings unwaited = storage.tryWaitForAllReplicasToProcessLogEntry(entry.to_shard, attach_rollback_log_entry, 1); + if (!unwaited.empty()) + throw Exception(ErrorCodes::TIMEOUT_EXCEEDED, "Some replicas haven't processed event: {}, will retry later.", toString(unwaited)); + + entry.state = EntryState::DESTINATION_FETCH; + return entry; + } + } + else + { + /// There is a chance that attach on destination will fail and this task will be left in the queue forever. + Coordination::Requests ops; ops.emplace_back(zkutil::makeCheckRequest(entry.znode_path, entry.version)); auto part = storage.getActiveContainingPart(entry.part_name); + /// Allocating block number in other replicas zookeeper path /// TODO Maybe we can do better. - auto block_number_lock = storage.allocateBlockNumber(part->info.partition_id, zk, "", entry.to_shard); - auto block_number = block_number_lock->getNumber(); + auto block_number_lock = storage.allocateBlockNumber(part->info.partition_id, zk, attach_log_entry_barrier_path, entry.to_shard); - auto part_info = part->info; - part_info.min_block = block_number; - part_info.max_block = block_number; - part_info.level = 0; - part_info.mutation = 0; - - /// Attach log entry (all replicas already fetched part) ReplicatedMergeTreeLogEntryData log_entry; - log_entry.type = ReplicatedMergeTreeLogEntryData::ATTACH_PART; - log_entry.part_checksum = part->checksums.getTotalChecksumHex(); - log_entry.create_time = std::time(nullptr); - log_entry.new_part_name = part_info.getPartName(); - ops.emplace_back(zkutil::makeSetRequest(entry.to_shard + "/log", "", -1)); - ops.emplace_back(zkutil::makeCreateRequest( - entry.to_shard + "/log/log-", log_entry.toString(), zkutil::CreateMode::PersistentSequential)); - Coordination::Responses responses; - Coordination::Error rc = zk->tryMulti(ops, responses); - zkutil::KeeperMultiException::check(rc, ops, responses); + if (block_number_lock) + { + auto block_number = block_number_lock->getNumber(); - String log_znode_path = dynamic_cast(*responses.back()).path_created; - log_entry.znode_name = log_znode_path.substr(log_znode_path.find_last_of('/') + 1); + auto part_info = part->info; + part_info.min_block = block_number; + part_info.max_block = block_number; + part_info.level = 0; + part_info.mutation = 0; - storage.waitForAllReplicasToProcessLogEntry(entry.to_shard, log_entry, -1); - } + /// Attach log entry (all replicas already fetched part) + log_entry.type = ReplicatedMergeTreeLogEntryData::ATTACH_PART; + log_entry.log_entry_id = attach_log_entry_barrier_path; + log_entry.part_checksum = part->checksums.getTotalChecksumHex(); + log_entry.create_time = std::time(nullptr); + log_entry.new_part_name = part_info.getPartName(); - { - /// State transition. - Entry entry_copy = entry; - entry_copy.state = EntryState::SOURCE_DROP_PRE_DELAY; - entry_copy.update_time = std::time(nullptr); - zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version); + ops.emplace_back(zkutil::makeCreateRequest(attach_log_entry_barrier_path, log_entry.toString(), -1)); + ops.emplace_back(zkutil::makeSetRequest(entry.to_shard + "/log", "", -1)); + ops.emplace_back(zkutil::makeCreateRequest( + entry.to_shard + "/log/log-", log_entry.toString(), zkutil::CreateMode::PersistentSequential)); + + Coordination::Responses responses; + Coordination::Error rc = zk->tryMulti(ops, responses); + zkutil::KeeperMultiException::check(rc, ops, responses); + + String log_znode_path = dynamic_cast(*responses.back()).path_created; + log_entry.znode_name = log_znode_path.substr(log_znode_path.find_last_of('/') + 1); + + LOG_DEBUG(log, "Pushed log entry: {}", log_znode_path); + } + else + { + LOG_DEBUG(log, "Log entry was already created will check the existing one."); + + Coordination::Stat stat; + String log_entry_str = zk->get(attach_log_entry_barrier_path, &stat); + log_entry = *ReplicatedMergeTreeLogEntry::parse(log_entry_str, stat); + } + + Strings unwaited = storage.tryWaitForAllReplicasToProcessLogEntry(entry.to_shard, log_entry, 1); + if (!unwaited.empty()) + throw Exception(ErrorCodes::TIMEOUT_EXCEEDED, "Some replicas haven't processed event: {}, will retry later.", toString(unwaited)); + + + entry.dst_part_name = log_entry.new_part_name; + entry.state = EntryState::SOURCE_DROP_PRE_DELAY; + return entry; } } - break; case EntryState::SOURCE_DROP_PRE_DELAY: { - std::this_thread::sleep_for(std::chrono::seconds(storage.getSettings()->part_moves_between_shards_delay_seconds)); - - /// State transition. - Entry entry_copy = entry; - entry_copy.state = EntryState::SOURCE_DROP; - entry_copy.update_time = std::time(nullptr); - zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version); + if (entry.rollback) + { + entry.state = EntryState::DESTINATION_ATTACH; + return entry; + } + else + { + std::this_thread::sleep_for(std::chrono::seconds(storage.getSettings()->part_moves_between_shards_delay_seconds)); + entry.state = EntryState::SOURCE_DROP; + return entry; + } } - break; case EntryState::SOURCE_DROP: { + if (entry.rollback) + throw Exception(ErrorCodes::LOGICAL_ERROR, "It is not possible to rollback from this state. This is a bug."); + else { - ReplicatedMergeTreeLogEntry log_entry; - if (storage.dropPartImpl(zk, entry.part_name, log_entry, false, false)) - storage.waitForAllReplicasToProcessLogEntry(zookeeper_path, log_entry, -1); - } + // Can't use dropPartImpl directly as we need additional zk ops to remember the log entry + // for subsequent retries. - { - /// State transition. - Entry entry_copy = entry; - entry_copy.state = EntryState::SOURCE_DROP_POST_DELAY; - entry_copy.update_time = std::time(nullptr); - zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version); + ReplicatedMergeTreeLogEntryData source_drop_log_entry; + + String source_drop_log_entry_barrier_path = fs::path(entry.znode_path) / ("log_" + entry.state.toString()); + Coordination::Stat source_drop_log_entry_stat; + String source_drop_log_entry_str; + if (zk->tryGet(source_drop_log_entry_barrier_path, source_drop_log_entry_str, &source_drop_log_entry_stat)) + { + LOG_DEBUG(log, "Log entry was already created will check the existing one."); + + source_drop_log_entry = *ReplicatedMergeTreeLogEntry::parse(source_drop_log_entry_str, source_drop_log_entry_stat); + } + else + { + auto source_drop_part_info = MergeTreePartInfo::fromPartName(entry.part_name, storage.format_version); + + Coordination::Requests ops; + ops.emplace_back(zkutil::makeCheckRequest(entry.znode_path, entry.version)); + + storage.getClearBlocksInPartitionOps(ops, *zk, source_drop_part_info.partition_id, source_drop_part_info.min_block, source_drop_part_info.max_block); + + source_drop_log_entry.type = ReplicatedMergeTreeLogEntryData::DROP_RANGE; + source_drop_log_entry.log_entry_id = source_drop_log_entry_barrier_path; + source_drop_log_entry.create_time = std::time(nullptr); + source_drop_log_entry.new_part_name = getPartNamePossiblyFake(storage.format_version, source_drop_part_info); + source_drop_log_entry.source_replica = storage.replica_name; + + ops.emplace_back(zkutil::makeCreateRequest(source_drop_log_entry_barrier_path, source_drop_log_entry.toString(), -1)); + ops.emplace_back(zkutil::makeSetRequest(zookeeper_path + "/log", "", -1)); + ops.emplace_back(zkutil::makeCreateRequest( + zookeeper_path + "/log/log-", source_drop_log_entry.toString(), zkutil::CreateMode::PersistentSequential)); + + Coordination::Responses responses; + Coordination::Error rc = zk->tryMulti(ops, responses); + zkutil::KeeperMultiException::check(rc, ops, responses); + + String log_znode_path = dynamic_cast(*responses.back()).path_created; + source_drop_log_entry.znode_name = log_znode_path.substr(log_znode_path.find_last_of('/') + 1); + + LOG_DEBUG(log, "Pushed log entry: {}", log_znode_path); + } + + Strings unwaited = storage.tryWaitForAllReplicasToProcessLogEntry(zookeeper_path, source_drop_log_entry, 1); + if (!unwaited.empty()) + throw Exception(ErrorCodes::TIMEOUT_EXCEEDED, "Some replicas haven't processed event: {}, will retry later.", toString(unwaited)); + + entry.state = EntryState::SOURCE_DROP_POST_DELAY; + return entry; } } - break; case EntryState::SOURCE_DROP_POST_DELAY: { - std::this_thread::sleep_for(std::chrono::seconds(storage.getSettings()->part_moves_between_shards_delay_seconds)); - - /// State transition. - Entry entry_copy = entry; - entry_copy.state = EntryState::REMOVE_UUID_PIN; - entry_copy.update_time = std::time(nullptr); - zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version); + if (entry.rollback) + throw Exception(ErrorCodes::LOGICAL_ERROR, "It is not possible to rollback from this state. This is a bug."); + else + { + std::this_thread::sleep_for(std::chrono::seconds(storage.getSettings()->part_moves_between_shards_delay_seconds)); + entry.state = EntryState::REMOVE_UUID_PIN; + return entry; + } } - break; case EntryState::REMOVE_UUID_PIN: { + if (entry.rollback) + throw Exception(ErrorCodes::LOGICAL_ERROR, "It is not possible to rollback from this state. This is a bug."); + else { - PinnedPartUUIDs src_pins; - PinnedPartUUIDs dst_pins; + removePins(entry, zk); - { - String s = zk->get(zookeeper_path + "/pinned_part_uuids", &src_pins.stat); - src_pins.fromString(s); - } - - { - String s = zk->get(entry.to_shard + "/pinned_part_uuids", &dst_pins.stat); - dst_pins.fromString(s); - } - - src_pins.part_uuids.erase(entry.part_uuid); - dst_pins.part_uuids.erase(entry.part_uuid); - - Coordination::Requests ops; - ops.emplace_back(zkutil::makeSetRequest(zookeeper_path + "/pinned_part_uuids", src_pins.toString(), src_pins.stat.version)); - ops.emplace_back(zkutil::makeSetRequest(entry.to_shard + "/pinned_part_uuids", dst_pins.toString(), dst_pins.stat.version)); - - zk->multi(ops); + entry.state = EntryState::DONE; + return entry; } - - /// State transition. - Entry entry_copy = entry; - entry_copy.state = EntryState::DONE; - entry_copy.update_time = std::time(nullptr); - zk->set(entry_copy.znode_path, entry_copy.toString(), entry_copy.version); } - break; + } + + __builtin_unreachable(); +} + +void PartMovesBetweenShardsOrchestrator::removePins(const Entry & entry, zkutil::ZooKeeperPtr zk) +{ + PinnedPartUUIDs src_pins; + PinnedPartUUIDs dst_pins; + + { + String s = zk->get(zookeeper_path + "/pinned_part_uuids", &src_pins.stat); + src_pins.fromString(s); + } + + { + String s = zk->get(entry.to_shard + "/pinned_part_uuids", &dst_pins.stat); + dst_pins.fromString(s); + } + + dst_pins.part_uuids.erase(entry.part_uuid); + src_pins.part_uuids.erase(entry.part_uuid); + + Coordination::Requests ops; + ops.emplace_back(zkutil::makeSetRequest(zookeeper_path + "/pinned_part_uuids", src_pins.toString(), src_pins.stat.version)); + ops.emplace_back(zkutil::makeSetRequest(entry.to_shard + "/pinned_part_uuids", dst_pins.toString(), dst_pins.stat.version)); + + zk->multi(ops); +} + +CancellationCode PartMovesBetweenShardsOrchestrator::killPartMoveToShard(const UUID & task_uuid) +{ + while (true) + { + auto entry = getEntryByUUID(task_uuid); + + // If the task is in this state or any that follows it is too late to rollback + // since we can't be sure if the source data still exists. + auto not_possible_to_rollback_after_state = EntryState(EntryState::SOURCE_DROP); + if (entry.state.value >= not_possible_to_rollback_after_state.value) + { + LOG_DEBUG(log, "Can't kill move part between shards entry {} ({}) after state {}. Current state: {}.", + toString(entry.task_uuid), entry.znode_name, not_possible_to_rollback_after_state.toString(), entry.state.toString()); + return CancellationCode::CancelCannotBeSent; + } + + LOG_TRACE(log, "Will try to mark move part between shards entry {} ({}) for rollback.", + toString(entry.task_uuid), entry.znode_name); + + auto zk = storage.getZooKeeper(); + + // State transition. + entry.rollback = true; + entry.update_time = std::time(nullptr); + entry.num_tries = 0; + entry.last_exception_msg = ""; + + auto code = zk->trySet(entry.znode_path, entry.toString(), entry.version); + if (code == Coordination::Error::ZOK) + { + // Orchestrator will process it in background. + return CancellationCode::CancelSent; + } + else if (code == Coordination::Error::ZBADVERSION) + { + /// Node was updated meanwhile. We must re-read it and repeat all the actions. + continue; + } + else + throw Coordination::Exception(code, entry.znode_path); } } -std::vector PartMovesBetweenShardsOrchestrator::getEntries() const +std::vector PartMovesBetweenShardsOrchestrator::getEntries() { + // Force sync. Also catches parsing errors. + syncStateFromZK(); + std::lock_guard lock(state_mutex); - std::vector res; + return entries; +} - for (const auto & e : entries) - res.push_back(e.second); +PartMovesBetweenShardsOrchestrator::Entry PartMovesBetweenShardsOrchestrator::getEntryByUUID(const UUID & task_uuid) +{ + /// Need latest state in case user tries to kill a move observed on a different replica. + syncStateFromZK(); - return res; + std::lock_guard lock(state_mutex); + for (auto const & entry : entries) + { + if (entry.task_uuid == task_uuid) + return entry; + } + + throw Exception(ErrorCodes::BAD_ARGUMENTS, "Task with id {} not found", toString(task_uuid)); } String PartMovesBetweenShardsOrchestrator::Entry::toString() const @@ -431,12 +714,19 @@ String PartMovesBetweenShardsOrchestrator::Entry::toString() const json.set(JSON_KEY_PART_NAME, part_name); json.set(JSON_KEY_PART_UUID, DB::toString(part_uuid)); json.set(JSON_KEY_TO_SHARD, to_shard); + json.set(JSON_KEY_DST_PART_NAME, dst_part_name); json.set(JSON_KEY_STATE, state.toString()); + json.set(JSON_KEY_ROLLBACK, DB::toString(rollback)); json.set(JSON_KEY_LAST_EX_MSG, last_exception_msg); + json.set(JSON_KEY_NUM_TRIES, DB::toString(num_tries)); std::ostringstream oss; // STYLE_CHECK_ALLOW_STD_STRING_STREAM oss.exceptions(std::ios::failbit); - json.stringify(oss); + + // Always escape unicode to make last_exception_msg json safe. + // It may contain random binary data when exception is a parsing error + // of unexpected contents. + Poco::JSON::Stringifier::stringify(json, oss, 0, -1, Poco::JSON_WRAP_STRINGS | Poco::JSON_ESCAPE_UNICODE); return oss.str(); } @@ -452,8 +742,11 @@ void PartMovesBetweenShardsOrchestrator::Entry::fromString(const String & buf) part_name = json->getValue(JSON_KEY_PART_NAME); part_uuid = parseFromString(json->getValue(JSON_KEY_PART_UUID)); to_shard = json->getValue(JSON_KEY_TO_SHARD); + dst_part_name = json->getValue(JSON_KEY_DST_PART_NAME); state.value = EntryState::fromString(json->getValue(JSON_KEY_STATE)); + rollback = json->getValue(JSON_KEY_ROLLBACK); last_exception_msg = json->getValue(JSON_KEY_LAST_EX_MSG); + num_tries = json->getValue(JSON_KEY_NUM_TRIES); } } diff --git a/src/Storages/MergeTree/PartMovesBetweenShardsOrchestrator.h b/src/Storages/MergeTree/PartMovesBetweenShardsOrchestrator.h index a8d29d9866e..14ef91c0777 100644 --- a/src/Storages/MergeTree/PartMovesBetweenShardsOrchestrator.h +++ b/src/Storages/MergeTree/PartMovesBetweenShardsOrchestrator.h @@ -7,6 +7,7 @@ #include #include #include +#include namespace DB { @@ -18,14 +19,37 @@ namespace ErrorCodes class StorageReplicatedMergeTree; -/// Cross shard part movement workflow orchestration. +/** + * Cross shard part movement workflow orchestration. + * + * TODO(nv): + * * Usage of `format_version` when acting on the behalf of the remote shard. + * There needs to be sort of an API to coordinate with remote replicas. + * * Only one movement at a time can be coordinated. This can easily be fixed + * by cycling through different tasks and checking their status with a + * priority queue and back-off for failing tasks + * `min(backoff * num_tries, max_backoff)`. + */ class PartMovesBetweenShardsOrchestrator { public: struct EntryState { + // State transitions are linear. When a kill query is issued a rollback + // flag is set and transitions order is reversed. + // + // SOURCE_DROP is a critical state after which rollback is not possible + // and we must ensure that the task can always succeed after that. + // + // Similar for rollback. It should be always possible to rollback before + // SOURCE_DROP state and it should terminate. + // + // Note: This fragile. If you change the states please add entry to + // changelog about forward/backward compatibility. Better not to have + // any active move tasks while doing upgrade/downgrade operations. enum Value { + CANCELLED, TODO, SYNC_SOURCE, SYNC_DESTINATION, @@ -36,7 +60,6 @@ public: SOURCE_DROP_POST_DELAY, REMOVE_UUID_PIN, DONE, - CANCELLED, }; EntryState(): value(TODO) {} @@ -95,10 +118,14 @@ public: String part_name; UUID part_uuid; String to_shard; + String dst_part_name; EntryState state; + bool rollback = false; + /// Reset on successful transitions. String last_exception_msg; + UInt64 num_tries = 0; String znode_name; @@ -120,27 +147,31 @@ private: static constexpr auto JSON_KEY_PART_NAME = "part_name"; static constexpr auto JSON_KEY_PART_UUID = "part_uuid"; static constexpr auto JSON_KEY_TO_SHARD = "to_shard"; + static constexpr auto JSON_KEY_DST_PART_NAME = "dst_part_name"; static constexpr auto JSON_KEY_STATE = "state"; + static constexpr auto JSON_KEY_ROLLBACK = "rollback"; static constexpr auto JSON_KEY_LAST_EX_MSG = "last_exception"; + static constexpr auto JSON_KEY_NUM_TRIES = "num_tries"; public: - PartMovesBetweenShardsOrchestrator(StorageReplicatedMergeTree & storage_); + explicit PartMovesBetweenShardsOrchestrator(StorageReplicatedMergeTree & storage_); void start() { task->activateAndSchedule(); } void wakeup() { task->schedule(); } void shutdown(); - void fetchStateFromZK(); + CancellationCode killPartMoveToShard(const UUID & task_uuid); - /// We could have one thread per Entry and worry about concurrency issues. - /// Or we could have a single thread trying to run one step at a time. - bool step(); - - std::vector getEntries() const; + std::vector getEntries(); private: void run(); - void stepEntry(const Entry & entry, zkutil::ZooKeeperPtr zk); + bool step(); + Entry stepEntry(Entry entry, zkutil::ZooKeeperPtr zk); + + Entry getEntryByUUID(const UUID & task_uuid); + void removePins(const Entry & entry, zkutil::ZooKeeperPtr zk); + void syncStateFromZK(); private: StorageReplicatedMergeTree & storage; @@ -153,7 +184,7 @@ private: BackgroundSchedulePool::TaskHolder task; mutable std::mutex state_mutex; - std::map entries; + std::vector entries; public: String entries_znode_path; diff --git a/src/Storages/MergeTree/ReplicatedMergeTreeLogEntry.cpp b/src/Storages/MergeTree/ReplicatedMergeTreeLogEntry.cpp index 18e90952721..89515b863ca 100644 --- a/src/Storages/MergeTree/ReplicatedMergeTreeLogEntry.cpp +++ b/src/Storages/MergeTree/ReplicatedMergeTreeLogEntry.cpp @@ -26,6 +26,7 @@ enum FormatVersion : UInt8 FORMAT_WITH_DEDUPLICATE = 4, FORMAT_WITH_UUID = 5, FORMAT_WITH_DEDUPLICATE_BY_COLUMNS = 6, + FORMAT_WITH_LOG_ENTRY_ID = 7, FORMAT_LAST }; @@ -43,11 +44,17 @@ void ReplicatedMergeTreeLogEntryData::writeText(WriteBuffer & out) const if (new_part_uuid != UUIDHelpers::Nil) format_version = std::max(format_version, FORMAT_WITH_UUID); + if (!log_entry_id.empty()) + format_version = std::max(format_version, FORMAT_WITH_LOG_ENTRY_ID); + out << "format version: " << format_version << "\n" << "create_time: " << LocalDateTime(create_time ? create_time : time(nullptr)) << "\n" << "source replica: " << source_replica << '\n' << "block_id: " << escape << block_id << '\n'; + if (format_version >= FORMAT_WITH_LOG_ENTRY_ID) + out << "log_entry_id: " << escape << log_entry_id << '\n'; + switch (type) { case GET_PART: @@ -192,6 +199,9 @@ void ReplicatedMergeTreeLogEntryData::readText(ReadBuffer & in) in >> "block_id: " >> escape >> block_id >> "\n"; } + if (format_version >= FORMAT_WITH_LOG_ENTRY_ID) + in >> "log_entry_id: " >> escape >> log_entry_id >> "\n"; + in >> type_str >> "\n"; bool trailing_newline_found = false; diff --git a/src/Storages/MergeTree/ReplicatedMergeTreeLogEntry.h b/src/Storages/MergeTree/ReplicatedMergeTreeLogEntry.h index 128b927fa99..4d8f319c94a 100644 --- a/src/Storages/MergeTree/ReplicatedMergeTreeLogEntry.h +++ b/src/Storages/MergeTree/ReplicatedMergeTreeLogEntry.h @@ -77,6 +77,7 @@ struct ReplicatedMergeTreeLogEntryData String toString() const; String znode_name; + String log_entry_id; Type type = EMPTY; String source_replica; /// Empty string means that this entry was added to the queue immediately, and not copied from the log. diff --git a/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.cpp b/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.cpp index 7df7d45ff3c..8d3cb146990 100644 --- a/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.cpp +++ b/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.cpp @@ -67,6 +67,29 @@ void ReplicatedMergeTreePartCheckThread::enqueuePart(const String & name, time_t task->schedule(); } +void ReplicatedMergeTreePartCheckThread::cancelRemovedPartsCheck(const MergeTreePartInfo & drop_range_info) +{ + /// Wait for running tasks to finish and temporarily stop checking + stop(); + SCOPE_EXIT({ start(); }); + { + std::lock_guard lock(parts_mutex); + for (auto it = parts_queue.begin(); it != parts_queue.end();) + { + if (drop_range_info.contains(MergeTreePartInfo::fromPartName(it->first, storage.format_version))) + { + /// Remove part from the queue to avoid part resurrection + /// if we will check it and enqueue fetch after DROP/REPLACE execution. + parts_set.erase(it->first); + it = parts_queue.erase(it); + } + else + { + ++it; + } + } + } +} size_t ReplicatedMergeTreePartCheckThread::size() const { diff --git a/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.h b/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.h index e9366d7fb12..a8ce4fedd6d 100644 --- a/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.h +++ b/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.h @@ -71,6 +71,8 @@ public: /// Check part by name CheckResult checkPart(const String & part_name); + void cancelRemovedPartsCheck(const MergeTreePartInfo & drop_range_info); + private: void run(); diff --git a/src/Storages/MergeTree/ReplicatedMergeTreeQueue.cpp b/src/Storages/MergeTree/ReplicatedMergeTreeQueue.cpp index f397e73aa31..0ff76958ceb 100644 --- a/src/Storages/MergeTree/ReplicatedMergeTreeQueue.cpp +++ b/src/Storages/MergeTree/ReplicatedMergeTreeQueue.cpp @@ -55,6 +55,15 @@ void ReplicatedMergeTreeQueue::clear() mutation_pointer.clear(); } +void ReplicatedMergeTreeQueue::setBrokenPartsToEnqueueFetchesOnLoading(Strings && parts_to_fetch) +{ + std::lock_guard lock(state_mutex); + /// Can be called only before queue initialization + assert(broken_parts_to_enqueue_fetches_on_loading.empty()); + assert(virtual_parts.size() == 0); + broken_parts_to_enqueue_fetches_on_loading = std::move(parts_to_fetch); +} + void ReplicatedMergeTreeQueue::initialize(zkutil::ZooKeeperPtr zookeeper) { std::lock_guard lock(state_mutex); @@ -176,6 +185,26 @@ bool ReplicatedMergeTreeQueue::load(zkutil::ZooKeeperPtr zookeeper) } +void ReplicatedMergeTreeQueue::createLogEntriesToFetchBrokenParts() +{ + Strings broken_parts; + { + std::lock_guard lock(state_mutex); + broken_parts = broken_parts_to_enqueue_fetches_on_loading; + } + + /// It will lock state_mutex + for (const auto & broken_part_name : broken_parts) + storage.removePartAndEnqueueFetch(broken_part_name); + + std::lock_guard lock(state_mutex); + /// broken_parts_to_enqueue_fetches_on_loading can be assigned only once on table startup, + /// so actually no race conditions are possible + assert(broken_parts == broken_parts_to_enqueue_fetches_on_loading); + broken_parts_to_enqueue_fetches_on_loading.clear(); +} + + void ReplicatedMergeTreeQueue::insertUnlocked( const LogEntryPtr & entry, std::optional & min_unprocessed_insert_time_changed, std::lock_guard & state_lock) @@ -203,9 +232,15 @@ void ReplicatedMergeTreeQueue::insertUnlocked( drop_ranges.addDropRange(entry); /// DROP PART remove parts, so we remove it from virtual parts to - /// preserve invariant virtual_parts = current_parts + queue + /// preserve invariant virtual_parts = current_parts + queue. + /// Also remove it from parts_to_do to avoid intersecting parts in parts_to_do + /// if fast replica will execute DROP PART and assign a merge that contains dropped blocks. if (entry->isDropPart(format_version)) - virtual_parts.removePartAndCoveredParts(*entry->getDropRange(format_version)); + { + String drop_part_name = *entry->getDropRange(format_version); + virtual_parts.removePartAndCoveredParts(drop_part_name); + removeCoveredPartsFromMutations(drop_part_name, /*remove_part = */ true, /*remove_covered_parts = */ true); + } queue.push_front(entry); } @@ -982,7 +1017,7 @@ bool ReplicatedMergeTreeQueue::checkReplaceRangeCanBeRemoved(const MergeTreePart void ReplicatedMergeTreeQueue::removePartProducingOpsInRange( zkutil::ZooKeeperPtr zookeeper, const MergeTreePartInfo & part_info, - const ReplicatedMergeTreeLogEntryData & current) + const std::optional & covering_entry) { /// TODO is it possible to simplify it? Queue to_wait; @@ -993,19 +1028,22 @@ void ReplicatedMergeTreeQueue::removePartProducingOpsInRange( /// Remove operations with parts, contained in the range to be deleted, from the queue. std::unique_lock lock(state_mutex); - [[maybe_unused]] bool called_from_alter_query_directly = current.replace_range_entry && current.replace_range_entry->columns_version < 0; - assert(currently_executing_drop_or_replace_range || called_from_alter_query_directly); + [[maybe_unused]] bool called_from_alter_query_directly = covering_entry && covering_entry->replace_range_entry + && covering_entry->replace_range_entry->columns_version < 0; + [[maybe_unused]] bool called_for_broken_part = !covering_entry; + assert(currently_executing_drop_or_replace_range || called_from_alter_query_directly || called_for_broken_part); for (Queue::iterator it = queue.begin(); it != queue.end();) { auto type = (*it)->type; - bool is_simple_producing_op = type == LogEntry::GET_PART || type == LogEntry::ATTACH_PART || type == LogEntry::MERGE_PARTS || type == LogEntry::MUTATE_PART; + bool simple_op_covered = is_simple_producing_op && part_info.contains(MergeTreePartInfo::fromPartName((*it)->new_part_name, format_version)); - if (simple_op_covered || checkReplaceRangeCanBeRemoved(part_info, *it, current)) + bool replace_range_covered = covering_entry && checkReplaceRangeCanBeRemoved(part_info, *it, *covering_entry); + if (simple_op_covered || replace_range_covered) { if ((*it)->currently_executing) to_wait.push_back(*it); @@ -1035,16 +1073,20 @@ void ReplicatedMergeTreeQueue::removePartProducingOpsInRange( } -bool ReplicatedMergeTreeQueue::isNotCoveredByFuturePartsImpl(const String & log_entry_name, const String & new_part_name, +bool ReplicatedMergeTreeQueue::isNotCoveredByFuturePartsImpl(const LogEntry & entry, const String & new_part_name, String & out_reason, std::lock_guard & /* queue_lock */) const { /// Let's check if the same part is now being created by another action. - if (future_parts.count(new_part_name)) + auto entry_for_same_part_it = future_parts.find(new_part_name); + if (entry_for_same_part_it != future_parts.end()) { - const char * format_str = "Not executing log entry {} for part {} " - "because another log entry for the same part is being processed. This shouldn't happen often."; - LOG_INFO(log, format_str, log_entry_name, new_part_name); - out_reason = fmt::format(format_str, log_entry_name, new_part_name); + const LogEntry & another_entry = *entry_for_same_part_it->second; + const char * format_str = "Not executing log entry {} of type {} for part {} " + "because another log entry {} of type {} for the same part ({}) is being processed. This shouldn't happen often."; + LOG_INFO(log, format_str, entry.znode_name, entry.type, entry.new_part_name, + another_entry.znode_name, another_entry.type, another_entry.new_part_name); + out_reason = fmt::format(format_str, entry.znode_name, entry.type, entry.new_part_name, + another_entry.znode_name, another_entry.type, another_entry.new_part_name); return false; /** When the corresponding action is completed, then `isNotCoveredByFuturePart` next time, will succeed, @@ -1067,8 +1109,8 @@ bool ReplicatedMergeTreeQueue::isNotCoveredByFuturePartsImpl(const String & log_ { const char * format_str = "Not executing log entry {} for part {} " "because it is covered by part {} that is currently executing."; - LOG_TRACE(log, format_str, log_entry_name, new_part_name, future_part_elem.first); - out_reason = fmt::format(format_str, log_entry_name, new_part_name, future_part_elem.first); + LOG_TRACE(log, format_str, entry.znode_name, new_part_name, future_part_elem.first); + out_reason = fmt::format(format_str, entry.znode_name, new_part_name, future_part_elem.first); return false; } } @@ -1101,7 +1143,7 @@ bool ReplicatedMergeTreeQueue::addFuturePartIfNotCoveredByThem(const String & pa if (drop_ranges.isAffectedByDropRange(part_name, reject_reason)) return false; - if (isNotCoveredByFuturePartsImpl(entry.znode_name, part_name, reject_reason, lock)) + if (isNotCoveredByFuturePartsImpl(entry, part_name, reject_reason, lock)) { CurrentlyExecuting::setActualPartName(entry, part_name, *this); return true; @@ -1122,7 +1164,7 @@ bool ReplicatedMergeTreeQueue::shouldExecuteLogEntry( /// some other entry which is currently executing, then we can postpone this entry. for (const String & new_part_name : entry.getVirtualPartNames(format_version)) { - if (!isNotCoveredByFuturePartsImpl(entry.znode_name, new_part_name, out_postpone_reason, state_lock)) + if (!isNotCoveredByFuturePartsImpl(entry, new_part_name, out_postpone_reason, state_lock)) return false; } diff --git a/src/Storages/MergeTree/ReplicatedMergeTreeQueue.h b/src/Storages/MergeTree/ReplicatedMergeTreeQueue.h index 30c8bafcf6e..273ac21eebc 100644 --- a/src/Storages/MergeTree/ReplicatedMergeTreeQueue.h +++ b/src/Storages/MergeTree/ReplicatedMergeTreeQueue.h @@ -156,6 +156,8 @@ private: /// We need it because alters have to be executed sequentially (one by one). ReplicatedMergeTreeAltersSequence alter_sequence; + Strings broken_parts_to_enqueue_fetches_on_loading; + /// List of subscribers /// A subscriber callback is called when an entry queue is deleted mutable std::mutex subscribers_mutex; @@ -208,7 +210,7 @@ private: * Should be called under state_mutex. */ bool isNotCoveredByFuturePartsImpl( - const String & log_entry_name, + const LogEntry & entry, const String & new_part_name, String & out_reason, std::lock_guard & state_lock) const; @@ -323,8 +325,10 @@ public: /** Remove the action from the queue with the parts covered by part_name (from ZK and from the RAM). * And also wait for the completion of their execution, if they are now being executed. + * covering_entry is as an entry that caused removal of entries in range (usually, DROP_RANGE) */ - void removePartProducingOpsInRange(zkutil::ZooKeeperPtr zookeeper, const MergeTreePartInfo & part_info, const ReplicatedMergeTreeLogEntryData & current); + void removePartProducingOpsInRange(zkutil::ZooKeeperPtr zookeeper, const MergeTreePartInfo & part_info, + const std::optional & covering_entry); /** In the case where there are not enough parts to perform the merge in part_name * - move actions with merged parts to the end of the queue @@ -455,6 +459,13 @@ public: /// It's needed because queue itself can trigger it's task handler and in /// this case race condition is possible. QueueLocks lockQueue(); + + /// Can be called only on data parts loading. + /// We need loaded queue to create GET_PART entry for broken (or missing) part, + /// but queue is not loaded yet on data parts loading. + void setBrokenPartsToEnqueueFetchesOnLoading(Strings && parts_to_fetch); + /// Must be called right after queue loading. + void createLogEntriesToFetchBrokenParts(); }; class ReplicatedMergeTreeMergePredicate diff --git a/src/Storages/MergeTree/ReplicatedMergeTreeRestartingThread.cpp b/src/Storages/MergeTree/ReplicatedMergeTreeRestartingThread.cpp index 16597fc4be9..c29ae873c5c 100644 --- a/src/Storages/MergeTree/ReplicatedMergeTreeRestartingThread.cpp +++ b/src/Storages/MergeTree/ReplicatedMergeTreeRestartingThread.cpp @@ -178,6 +178,8 @@ bool ReplicatedMergeTreeRestartingThread::tryStartup() storage.queue.load(zookeeper); + storage.queue.createLogEntriesToFetchBrokenParts(); + /// pullLogsToQueue() after we mark replica 'is_active' (and after we repair if it was lost); /// because cleanup_thread doesn't delete log_pointer of active replicas. storage.queue.pullLogsToQueue(zookeeper, {}, ReplicatedMergeTreeQueue::LOAD); diff --git a/src/Storages/MergeTree/localBackup.cpp b/src/Storages/MergeTree/localBackup.cpp index 2e02481e065..236a0c5b5e4 100644 --- a/src/Storages/MergeTree/localBackup.cpp +++ b/src/Storages/MergeTree/localBackup.cpp @@ -4,7 +4,6 @@ #include #include - namespace DB { @@ -43,6 +42,27 @@ static void localBackupImpl(const DiskPtr & disk, const String & source_path, co } } +class CleanupOnFail +{ +public: + explicit CleanupOnFail(std::function && cleaner_) : cleaner(cleaner_), is_success(false) {} + + ~CleanupOnFail() + { + if (!is_success) + cleaner(); + } + + void success() + { + is_success = true; + } + +private: + std::function cleaner; + bool is_success; +}; + void localBackup(const DiskPtr & disk, const String & source_path, const String & destination_path, std::optional max_level) { if (disk->exists(destination_path) && !disk->isDirectoryEmpty(destination_path)) @@ -53,6 +73,8 @@ void localBackup(const DiskPtr & disk, const String & source_path, const String size_t try_no = 0; const size_t max_tries = 10; + CleanupOnFail cleanup([&](){disk->removeRecursive(destination_path);}); + /** Files in the directory can be permanently added and deleted. * If some file is deleted during an attempt to make a backup, then try again, * because it's important to take into account any new files that might appear. @@ -88,6 +110,8 @@ void localBackup(const DiskPtr & disk, const String & source_path, const String break; } + + cleanup.success(); } } diff --git a/src/Storages/PostgreSQL/MaterializedPostgreSQLSettings.h b/src/Storages/PostgreSQL/MaterializedPostgreSQLSettings.h index cc147a01d32..b729515032f 100644 --- a/src/Storages/PostgreSQL/MaterializedPostgreSQLSettings.h +++ b/src/Storages/PostgreSQL/MaterializedPostgreSQLSettings.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX #include diff --git a/src/Storages/PostgreSQL/PostgreSQLReplicationHandler.cpp b/src/Storages/PostgreSQL/PostgreSQLReplicationHandler.cpp index 3796bd8ba57..670148e9baa 100644 --- a/src/Storages/PostgreSQL/PostgreSQLReplicationHandler.cpp +++ b/src/Storages/PostgreSQL/PostgreSQLReplicationHandler.cpp @@ -229,7 +229,9 @@ ASTPtr PostgreSQLReplicationHandler::getCreateNestedTableQuery(StorageMaterializ { postgres::Connection connection(connection_info); pqxx::nontransaction tx(connection.getRef()); - auto table_structure = std::make_unique(fetchPostgreSQLTableStructure(tx, table_name, true, true, true)); + auto table_structure = std::make_unique(fetchPostgreSQLTableStructure(tx, table_name, postgres_schema, true, true, true)); + if (!table_structure) + throw Exception(ErrorCodes::LOGICAL_ERROR, "Failed to get PostgreSQL table structure"); return storage->getCreateNestedTableQuery(std::move(table_structure)); } @@ -649,7 +651,17 @@ PostgreSQLTableStructurePtr PostgreSQLReplicationHandler::fetchTableStructure( if (!is_materialized_postgresql_database) return nullptr; - return std::make_unique(fetchPostgreSQLTableStructure(tx, table_name, true, true, true)); + PostgreSQLTableStructure structure; + try + { + structure = fetchPostgreSQLTableStructure(tx, table_name, postgres_schema, true, true, true); + } + catch (...) + { + tryLogCurrentException(__PRETTY_FUNCTION__); + } + + return std::make_unique(std::move(structure)); } diff --git a/src/Storages/PostgreSQL/StorageMaterializedPostgreSQL.h b/src/Storages/PostgreSQL/StorageMaterializedPostgreSQL.h index 4b1fa1d5b04..cebb3b89f8e 100644 --- a/src/Storages/PostgreSQL/StorageMaterializedPostgreSQL.h +++ b/src/Storages/PostgreSQL/StorageMaterializedPostgreSQL.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX #include "PostgreSQLReplicationHandler.h" diff --git a/src/Storages/ProjectionsDescription.cpp b/src/Storages/ProjectionsDescription.cpp index e5117a306ee..dc0598de72f 100644 --- a/src/Storages/ProjectionsDescription.cpp +++ b/src/Storages/ProjectionsDescription.cpp @@ -237,7 +237,7 @@ Block ProjectionDescription::calculate(const Block & block, ContextPtr context) auto builder = InterpreterSelectQuery( query_ast, context, - Pipe(std::make_shared(block, Chunk(block.getColumns(), block.rows()))), + Pipe(std::make_shared(block)), SelectQueryOptions{ type == ProjectionDescription::Type::Normal ? QueryProcessingStage::FetchColumns : QueryProcessingStage::WithMergeableState}) diff --git a/src/Storages/ReadFinalForExternalReplicaStorage.h b/src/Storages/ReadFinalForExternalReplicaStorage.h index 1be0aa0f4a6..979945a38c7 100644 --- a/src/Storages/ReadFinalForExternalReplicaStorage.h +++ b/src/Storages/ReadFinalForExternalReplicaStorage.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL || USE_LIBPQXX diff --git a/src/Storages/SelectQueryInfo.h b/src/Storages/SelectQueryInfo.h index b08818a2baa..e53f5adec52 100644 --- a/src/Storages/SelectQueryInfo.h +++ b/src/Storages/SelectQueryInfo.h @@ -42,6 +42,9 @@ using ClusterPtr = std::shared_ptr; struct MergeTreeDataSelectAnalysisResult; using MergeTreeDataSelectAnalysisResultPtr = std::shared_ptr; +struct SubqueryForSet; +using SubqueriesForSets = std::unordered_map; + struct PrewhereInfo { /// Actions which are executed in order to alias columns are used for prewhere actions. @@ -121,6 +124,7 @@ struct ProjectionCandidate ReadInOrderOptimizerPtr order_optimizer; InputOrderInfoPtr input_order_info; ManyExpressionActions group_by_elements_actions; + std::shared_ptr subqueries_for_sets; MergeTreeDataSelectAnalysisResultPtr merge_tree_projection_select_result_ptr; MergeTreeDataSelectAnalysisResultPtr merge_tree_normal_select_result_ptr; }; @@ -133,6 +137,7 @@ struct SelectQueryInfo { ASTPtr query; ASTPtr view_query; /// Optimized VIEW query + ASTPtr original_query; /// Unmodified query for projection analysis /// Cluster for the query. ClusterPtr cluster; diff --git a/src/Storages/StorageBuffer.cpp b/src/Storages/StorageBuffer.cpp index a74223054e9..6417aa9f72c 100644 --- a/src/Storages/StorageBuffer.cpp +++ b/src/Storages/StorageBuffer.cpp @@ -446,7 +446,8 @@ static void appendBlock(const Block & from, Block & to) if (!to) throw Exception("Cannot append to empty block", ErrorCodes::LOGICAL_ERROR); - assertBlocksHaveEqualStructure(from, to, "Buffer"); + if (to.rows()) + assertBlocksHaveEqualStructure(from, to, "Buffer"); from.checkNumberOfRows(); to.checkNumberOfRows(); @@ -464,14 +465,21 @@ static void appendBlock(const Block & from, Block & to) { MemoryTracker::BlockerInThread temporarily_disable_memory_tracker; - for (size_t column_no = 0, columns = to.columns(); column_no < columns; ++column_no) + if (to.rows() == 0) { - const IColumn & col_from = *from.getByPosition(column_no).column.get(); - last_col = IColumn::mutate(std::move(to.getByPosition(column_no).column)); + to = from; + } + else + { + for (size_t column_no = 0, columns = to.columns(); column_no < columns; ++column_no) + { + const IColumn & col_from = *from.getByPosition(column_no).column.get(); + last_col = IColumn::mutate(std::move(to.getByPosition(column_no).column)); - last_col->insertRangeFrom(col_from, 0, rows); + last_col->insertRangeFrom(col_from, 0, rows); - to.getByPosition(column_no).column = std::move(last_col); + to.getByPosition(column_no).column = std::move(last_col); + } } } catch (...) @@ -1019,10 +1027,9 @@ void StorageBuffer::checkAlterIsPossible(const AlterCommands & commands, Context auto name_deps = getDependentViewsByColumn(local_context); for (const auto & command : commands) { - if (command.type != AlterCommand::Type::ADD_COLUMN - && command.type != AlterCommand::Type::MODIFY_COLUMN - && command.type != AlterCommand::Type::DROP_COLUMN - && command.type != AlterCommand::Type::COMMENT_COLUMN) + if (command.type != AlterCommand::Type::ADD_COLUMN && command.type != AlterCommand::Type::MODIFY_COLUMN + && command.type != AlterCommand::Type::DROP_COLUMN && command.type != AlterCommand::Type::COMMENT_COLUMN + && command.type != AlterCommand::Type::COMMENT_TABLE) throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Alter of type '{}' is not supported by storage {}", command.type, getName()); @@ -1058,7 +1065,7 @@ std::optional StorageBuffer::totalBytes(const Settings & /*settings*/) c return total_writes.bytes; } -void StorageBuffer::alter(const AlterCommands & params, ContextPtr local_context, TableLockHolder &) +void StorageBuffer::alter(const AlterCommands & params, ContextPtr local_context, AlterLockHolder &) { auto table_id = getStorageID(); checkAlterIsPossible(params, local_context); diff --git a/src/Storages/StorageBuffer.h b/src/Storages/StorageBuffer.h index 3e8955ad864..28f8de5fd88 100644 --- a/src/Storages/StorageBuffer.h +++ b/src/Storages/StorageBuffer.h @@ -107,7 +107,7 @@ public: void checkAlterIsPossible(const AlterCommands & commands, ContextPtr context) const override; /// The structure of the subordinate table is not checked and does not change. - void alter(const AlterCommands & params, ContextPtr context, TableLockHolder & table_lock_holder) override; + void alter(const AlterCommands & params, ContextPtr context, AlterLockHolder & table_lock_holder) override; std::optional totalRows(const Settings & settings) const override; std::optional totalBytes(const Settings & settings) const override; diff --git a/src/Storages/StorageDictionary.cpp b/src/Storages/StorageDictionary.cpp index 349d894b2f1..00c9e655656 100644 --- a/src/Storages/StorageDictionary.cpp +++ b/src/Storages/StorageDictionary.cpp @@ -164,11 +164,11 @@ Pipe StorageDictionary::read( ContextPtr local_context, QueryProcessingStage::Enum /*processed_stage*/, const size_t max_block_size, - const unsigned /*threads*/) + const unsigned threads) { auto registered_dictionary_name = location == Location::SameDatabaseAndNameAsDictionary ? getStorageID().getInternalDictionaryName() : dictionary_name; auto dictionary = getContext()->getExternalDictionariesLoader().getDictionary(registered_dictionary_name, local_context); - return dictionary->read(column_names, max_block_size); + return dictionary->read(column_names, max_block_size, threads); } void StorageDictionary::shutdown() @@ -212,11 +212,20 @@ void StorageDictionary::renameInMemory(const StorageID & new_table_id) auto old_table_id = getStorageID(); IStorage::renameInMemory(new_table_id); - if (configuration) + bool has_configuration = false; { - configuration->setString("dictionary.database", new_table_id.database_name); - configuration->setString("dictionary.name", new_table_id.table_name); + std::lock_guard lock(dictionary_config_mutex); + if (configuration) + { + has_configuration = true; + configuration->setString("dictionary.database", new_table_id.database_name); + configuration->setString("dictionary.name", new_table_id.table_name); + } + } + + if (has_configuration) + { const auto & external_dictionaries_loader = getContext()->getExternalDictionariesLoader(); auto result = external_dictionaries_loader.getLoadResult(old_table_id.getInternalDictionaryName()); diff --git a/src/Storages/StorageDistributed.cpp b/src/Storages/StorageDistributed.cpp index 1dd75f09b92..91d54f0d24a 100644 --- a/src/Storages/StorageDistributed.cpp +++ b/src/Storages/StorageDistributed.cpp @@ -762,11 +762,9 @@ void StorageDistributed::checkAlterIsPossible(const AlterCommands & commands, Co auto name_deps = getDependentViewsByColumn(local_context); for (const auto & command : commands) { - if (command.type != AlterCommand::Type::ADD_COLUMN - && command.type != AlterCommand::Type::MODIFY_COLUMN - && command.type != AlterCommand::Type::DROP_COLUMN - && command.type != AlterCommand::Type::COMMENT_COLUMN - && command.type != AlterCommand::Type::RENAME_COLUMN) + if (command.type != AlterCommand::Type::ADD_COLUMN && command.type != AlterCommand::Type::MODIFY_COLUMN + && command.type != AlterCommand::Type::DROP_COLUMN && command.type != AlterCommand::Type::COMMENT_COLUMN + && command.type != AlterCommand::Type::RENAME_COLUMN && command.type != AlterCommand::Type::COMMENT_TABLE) throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Alter of type '{}' is not supported by storage {}", command.type, getName()); @@ -785,7 +783,7 @@ void StorageDistributed::checkAlterIsPossible(const AlterCommands & commands, Co } } -void StorageDistributed::alter(const AlterCommands & params, ContextPtr local_context, TableLockHolder &) +void StorageDistributed::alter(const AlterCommands & params, ContextPtr local_context, AlterLockHolder &) { auto table_id = getStorageID(); diff --git a/src/Storages/StorageDistributed.h b/src/Storages/StorageDistributed.h index 50e9c935a17..540ae413f19 100644 --- a/src/Storages/StorageDistributed.h +++ b/src/Storages/StorageDistributed.h @@ -94,7 +94,7 @@ public: /// in the sub-tables, you need to manually add and delete columns /// the structure of the sub-table is not checked - void alter(const AlterCommands & params, ContextPtr context, TableLockHolder & table_lock_holder) override; + void alter(const AlterCommands & params, ContextPtr context, AlterLockHolder & table_lock_holder) override; void startup() override; void shutdown() override; diff --git a/src/Storages/StorageExternalDistributed.cpp b/src/Storages/StorageExternalDistributed.cpp index 0af8fe6f7df..021cd9815d7 100644 --- a/src/Storages/StorageExternalDistributed.cpp +++ b/src/Storages/StorageExternalDistributed.cpp @@ -233,7 +233,7 @@ void registerStorageExternalDistributed(StorageFactory & factory) for (const auto & [name, value] : storage_specific_args) { if (name == "description") - cluster_description = value.safeGet(); + cluster_description = value->as()->value.safeGet(); else throw Exception(ErrorCodes::BAD_ARGUMENTS, "Unknown key-value argument {} for table engine URL", name); @@ -279,7 +279,7 @@ void registerStorageExternalDistributed(StorageFactory & factory) for (const auto & [name, value] : storage_specific_args) { if (name == "description") - cluster_description = value.safeGet(); + cluster_description = value->as()->value.safeGet(); else throw Exception(ErrorCodes::BAD_ARGUMENTS, "Unknown key-value argument {} for table function URL", name); diff --git a/src/Storages/StorageExternalDistributed.h b/src/Storages/StorageExternalDistributed.h index c29bfcd891f..33a58d324da 100644 --- a/src/Storages/StorageExternalDistributed.h +++ b/src/Storages/StorageExternalDistributed.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #include #include diff --git a/src/Storages/StorageFactory.h b/src/Storages/StorageFactory.h index bdc57bfdc6d..20db1a44897 100644 --- a/src/Storages/StorageFactory.h +++ b/src/Storages/StorageFactory.h @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include diff --git a/src/Storages/StorageLog.cpp b/src/Storages/StorageLog.cpp index 493d4c1a641..e59579c5a33 100644 --- a/src/Storages/StorageLog.cpp +++ b/src/Storages/StorageLog.cpp @@ -7,12 +7,14 @@ #include +#include #include +#include #include +#include +#include #include #include -#include -#include #include @@ -21,11 +23,16 @@ #include #include #include "StorageLogSettings.h" -#include #include +#include #include #include +#include +#include +#include +#include + #include #include @@ -45,8 +52,11 @@ namespace ErrorCodes extern const int SIZES_OF_MARKS_FILES_ARE_INCONSISTENT; extern const int NUMBER_OF_ARGUMENTS_DOESNT_MATCH; extern const int INCORRECT_FILE_NAME; + extern const int NOT_IMPLEMENTED; } +/// NOTE: The lock `StorageLog::rwlock` is NOT kept locked while reading, +/// because we read ranges of data that do not change. class LogSource final : public SourceWithProgress { public: @@ -61,15 +71,23 @@ public: } LogSource( - size_t block_size_, const NamesAndTypesList & columns_, StorageLog & storage_, - size_t mark_number_, size_t rows_limit_, ReadSettings read_settings_) - : SourceWithProgress(getHeader(columns_)), - block_size(block_size_), - columns(columns_), - storage(storage_), - mark_number(mark_number_), - rows_limit(rows_limit_), - read_settings(std::move(read_settings_)) + size_t block_size_, + const NamesAndTypesList & columns_, + const StorageLog & storage_, + size_t rows_limit_, + const std::vector & offsets_, + const std::vector & file_sizes_, + bool limited_by_file_sizes_, + ReadSettings read_settings_) + : SourceWithProgress(getHeader(columns_)) + , block_size(block_size_) + , columns(columns_) + , storage(storage_) + , rows_limit(rows_limit_) + , offsets(offsets_) + , file_sizes(file_sizes_) + , limited_by_file_sizes(limited_by_file_sizes_) + , read_settings(std::move(read_settings_)) { } @@ -79,28 +97,38 @@ protected: Chunk generate() override; private: - size_t block_size; - NamesAndTypesList columns; - StorageLog & storage; - size_t mark_number; /// from what mark to read data - size_t rows_limit; /// The maximum number of rows that can be read + const size_t block_size; + const NamesAndTypesList columns; + const StorageLog & storage; + const size_t rows_limit; /// The maximum number of rows that can be read size_t rows_read = 0; - ReadSettings read_settings; - - std::unordered_map serializations; + bool is_finished = false; + const std::vector offsets; + const std::vector file_sizes; + const bool limited_by_file_sizes; + const ReadSettings read_settings; struct Stream { - Stream(const DiskPtr & disk, const String & data_path, size_t offset, ReadSettings read_settings_) - : plain(disk->readFile(data_path, read_settings_.adjustBufferSize(disk->getFileSize(data_path)))) - , compressed(*plain) + Stream(const DiskPtr & disk, const String & data_path, size_t offset, size_t file_size, bool limited_by_file_size, ReadSettings read_settings_) { + plain = disk->readFile(data_path, read_settings_.adjustBufferSize(file_size)); + if (offset) plain->seek(offset, SEEK_SET); + + if (limited_by_file_size) + { + limited.emplace(*plain, file_size - offset, false); + compressed.emplace(*limited); + } + else + compressed.emplace(*plain); } std::unique_ptr plain; - CompressedReadBuffer compressed; + std::optional limited; + std::optional compressed; }; using FileStreams = std::map; @@ -111,19 +139,25 @@ private: DeserializeStates deserialize_states; void readData(const NameAndTypePair & name_and_type, ColumnPtr & column, size_t max_rows_to_read, ISerialization::SubstreamsCache & cache); + bool isFinished(); }; Chunk LogSource::generate() { - Block res; - - if (rows_read == rows_limit) + if (isFinished()) + { + /// Close the files (before destroying the object). + /// When many sources are created, but simultaneously reading only a few of them, + /// buffers don't waste memory. + streams.clear(); return {}; + } /// How many rows to read for the next block. size_t max_rows_to_read = std::min(block_size, rows_limit - rows_read); std::unordered_map caches; + Block res; for (const auto & name_type : columns) { @@ -146,12 +180,14 @@ Chunk LogSource::generate() if (res) rows_read += res.rows(); - if (!res || rows_read == rows_limit) + if (!res) + is_finished = true; + + if (isFinished()) { - /** Close the files (before destroying the object). - * When many sources are created, but simultaneously reading only a few of them, - * buffers don't waste memory. - */ + /// Close the files (before destroying the object). + /// When many sources are created, but simultaneously reading only a few of them, + /// buffers don't waste memory. streams.clear(); } @@ -174,22 +210,18 @@ void LogSource::readData(const NameAndTypePair & name_and_type, ColumnPtr & colu if (cache.count(ISerialization::getSubcolumnNameForStream(path))) return nullptr; - String stream_name = ISerialization::getFileNameForStream(name_and_type, path); - const auto & file_it = storage.files.find(stream_name); - if (storage.files.end() == file_it) - throw Exception("Logical error: no information about file " + stream_name + " in StorageLog", ErrorCodes::LOGICAL_ERROR); + String data_file_name = ISerialization::getFileNameForStream(name_and_type, path); - UInt64 offset = 0; - if (!stream_for_prefix && mark_number) - { - std::lock_guard marks_lock(file_it->second.marks_mutex); - offset = file_it->second.marks[mark_number].offset; - } + const auto & data_file_it = storage.data_files_by_names.find(data_file_name); + if (data_file_it == storage.data_files_by_names.end()) + throw Exception("Logical error: no information about file " + data_file_name + " in StorageLog", ErrorCodes::LOGICAL_ERROR); + const auto & data_file = *data_file_it->second; - auto & data_file_path = file_it->second.data_file_path; - auto it = streams.try_emplace(stream_name, storage.disk, data_file_path, offset, read_settings).first; + size_t offset = stream_for_prefix ? 0 : offsets[data_file.index]; + size_t file_size = file_sizes[data_file.index]; - return &it->second.compressed; + auto it = streams.try_emplace(data_file_name, storage.disk, data_file.path, offset, file_size, limited_by_file_sizes, read_settings).first; + return &it->second.compressed.value(); }; }; @@ -203,29 +235,53 @@ void LogSource::readData(const NameAndTypePair & name_and_type, ColumnPtr & colu serialization->deserializeBinaryBulkWithMultipleStreams(column, max_rows_to_read, settings, deserialize_states[name], &cache); } +bool LogSource::isFinished() +{ + if (is_finished) + return true; + /// Check for row limit. + if (rows_read == rows_limit) + { + is_finished = true; + return true; + } + + if (limited_by_file_sizes) + { + /// Check for EOF. + if (!streams.empty() && streams.begin()->second.compressed->eof()) + { + is_finished = true; + return true; + } + } + + return false; +} + + +/// NOTE: The lock `StorageLog::rwlock` is kept locked in exclusive mode while writing. class LogSink final : public SinkToStorage { public: + using WriteLock = std::unique_lock; + explicit LogSink( - StorageLog & storage_, const StorageMetadataPtr & metadata_snapshot_, std::unique_lock && lock_) + StorageLog & storage_, const StorageMetadataPtr & metadata_snapshot_, WriteLock && lock_) : SinkToStorage(metadata_snapshot_->getSampleBlock()) , storage(storage_) , metadata_snapshot(metadata_snapshot_) , lock(std::move(lock_)) - , marks_stream( - storage.disk->writeFile(storage.marks_file_path, 4096, WriteMode::Rewrite)) { if (!lock) throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); - /// If there were no files, add info to rollback in case of error. - if (storage.file_checker.empty()) - { - for (const auto & file : storage.files) - storage.file_checker.setEmpty(file.second.data_file_path); - storage.file_checker.save(); - } + /// Ensure that marks are loaded because we're going to update them. + storage.loadMarks(lock); + + /// If there were no files, save zero file sizes to be able to rollback in case of error. + storage.saveFileSizes(lock); } String getName() const override { return "LogSink"; } @@ -237,8 +293,15 @@ public: if (!done) { /// Rollback partial writes. + + /// No more writing. streams.clear(); + + /// Truncate files to the older sizes. storage.file_checker.repair(); + + /// Remove excessive marks. + storage.removeUnsavedMarks(lock); } } catch (...) @@ -253,22 +316,26 @@ public: private: StorageLog & storage; StorageMetadataPtr metadata_snapshot; - std::unique_lock lock; + WriteLock lock; bool done = false; struct Stream { - Stream(const DiskPtr & disk, const String & data_path, CompressionCodecPtr codec, size_t max_compress_block_size) : + Stream(const DiskPtr & disk, const String & data_path, size_t initial_data_size, CompressionCodecPtr codec, size_t max_compress_block_size) : plain(disk->writeFile(data_path, max_compress_block_size, WriteMode::Append)), compressed(*plain, std::move(codec), max_compress_block_size), - plain_offset(disk->getFileSize(data_path)) + plain_offset(initial_data_size) { } std::unique_ptr plain; CompressedWriteBuffer compressed; - size_t plain_offset; /// How many bytes were in the file at the time the LogBlockOutputStream was created. + /// How many bytes were in the file at the time the Stream was created. + size_t plain_offset; + + /// Used to not write shared offsets of columns for nested structures multiple times. + bool written = false; void finalize() { @@ -277,29 +344,16 @@ private: } }; - using Mark = StorageLog::Mark; - using MarksForColumns = std::vector>; - using FileStreams = std::map; FileStreams streams; - using WrittenStreams = std::set; - - std::unique_ptr marks_stream; /// Declared below `lock` to make the file open when rwlock is captured. - using SerializeState = ISerialization::SerializeBinaryBulkStatePtr; using SerializeStates = std::map; SerializeStates serialize_states; - ISerialization::OutputStreamGetter createStreamGetter(const NameAndTypePair & name_and_type, WrittenStreams & written_streams); + ISerialization::OutputStreamGetter createStreamGetter(const NameAndTypePair & name_and_type); - void writeData( - const NameAndTypePair & name_and_type, - const IColumn & column, - MarksForColumns & out_marks, - WrittenStreams & written_streams); - - void writeMarks(MarksForColumns && marks); + void writeData(const NameAndTypePair & name_and_type, const IColumn & column); }; @@ -308,19 +362,14 @@ void LogSink::consume(Chunk chunk) auto block = getHeader().cloneWithColumns(chunk.detachColumns()); metadata_snapshot->check(block, true); - /// The set of written offset columns so that you do not write shared offsets of columns for nested structures multiple times - WrittenStreams written_streams; - - MarksForColumns marks; - marks.reserve(storage.file_count); + for (auto & stream : streams | boost::adaptors::map_values) + stream.written = false; for (size_t i = 0; i < block.columns(); ++i) { const ColumnWithTypeAndName & column = block.safeGetByPosition(i); - writeData(NameAndTypePair(column.name, column.type), *column.column, marks, written_streams); + writeData(NameAndTypePair(column.name, column.type), *column.column); } - - writeMarks(std::move(marks)); } @@ -329,36 +378,29 @@ void LogSink::onFinish() if (done) return; - WrittenStreams written_streams; + for (auto & stream : streams | boost::adaptors::map_values) + stream.written = false; + ISerialization::SerializeBinaryBulkSettings settings; for (const auto & column : getHeader()) { auto it = serialize_states.find(column.name); if (it != serialize_states.end()) { - settings.getter = createStreamGetter(NameAndTypePair(column.name, column.type), written_streams); + settings.getter = createStreamGetter(NameAndTypePair(column.name, column.type)); auto serialization = column.type->getDefaultSerialization(); serialization->serializeBinaryBulkStateSuffix(settings, it->second); } } /// Finish write. - marks_stream->next(); - marks_stream->finalize(); - - for (auto & name_stream : streams) - name_stream.second.finalize(); - - Strings column_files; - for (const auto & name_stream : streams) - column_files.push_back(storage.files[name_stream.first].data_file_path); - column_files.push_back(storage.marks_file_path); - - for (const auto & file : column_files) - storage.file_checker.update(file); - storage.file_checker.save(); - + for (auto & stream : streams | boost::adaptors::map_values) + stream.finalize(); streams.clear(); + + storage.saveMarks(lock); + storage.saveFileSizes(lock); + done = true; /// unlock should be done from the same thread as lock, and dtor may be @@ -368,26 +410,26 @@ void LogSink::onFinish() } -ISerialization::OutputStreamGetter LogSink::createStreamGetter(const NameAndTypePair & name_and_type, - WrittenStreams & written_streams) +ISerialization::OutputStreamGetter LogSink::createStreamGetter(const NameAndTypePair & name_and_type) { return [&] (const ISerialization::SubstreamPath & path) -> WriteBuffer * { - String stream_name = ISerialization::getFileNameForStream(name_and_type, path); - if (written_streams.count(stream_name)) + String data_file_name = ISerialization::getFileNameForStream(name_and_type, path); + auto it = streams.find(data_file_name); + if (it == streams.end()) + throw Exception("Logical error: stream was not created when writing data in LogSink", + ErrorCodes::LOGICAL_ERROR); + + Stream & stream = it->second; + if (stream.written) return nullptr; - auto it = streams.find(stream_name); - if (streams.end() == it) - throw Exception("Logical error: stream was not created when writing data in LogBlockOutputStream", - ErrorCodes::LOGICAL_ERROR); - return &it->second.compressed; + return &stream.compressed; }; } -void LogSink::writeData(const NameAndTypePair & name_and_type, const IColumn & column, - MarksForColumns & out_marks, WrittenStreams & written_streams) +void LogSink::writeData(const NameAndTypePair & name_and_type, const IColumn & column) { ISerialization::SerializeBinaryBulkSettings settings; const auto & [name, type] = name_and_type; @@ -395,79 +437,97 @@ void LogSink::writeData(const NameAndTypePair & name_and_type, const IColumn & c serialization->enumerateStreams([&] (const ISerialization::SubstreamPath & path) { - String stream_name = ISerialization::getFileNameForStream(name_and_type, path); - if (written_streams.count(stream_name)) - return; + String data_file_name = ISerialization::getFileNameForStream(name_and_type, path); + auto it = streams.find(data_file_name); + if (it == streams.end()) + { + const auto & data_file_it = storage.data_files_by_names.find(data_file_name); + if (data_file_it == storage.data_files_by_names.end()) + throw Exception("Logical error: no information about file " + data_file_name + " in StorageLog", ErrorCodes::LOGICAL_ERROR); - const auto & columns = metadata_snapshot->getColumns(); - streams.try_emplace( - stream_name, - storage.disk, - storage.files[stream_name].data_file_path, - columns.getCodecOrDefault(name_and_type.name), - storage.max_compress_block_size); + const auto & data_file = *data_file_it->second; + const auto & columns = metadata_snapshot->getColumns(); + + it = streams.try_emplace(data_file.name, storage.disk, data_file.path, + storage.file_checker.getFileSize(data_file.path), + columns.getCodecOrDefault(name_and_type.name), + storage.max_compress_block_size).first; + } + + auto & stream = it->second; + if (stream.written) + return; }); - settings.getter = createStreamGetter(name_and_type, written_streams); + settings.getter = createStreamGetter(name_and_type); if (serialize_states.count(name) == 0) serialization->serializeBinaryBulkStatePrefix(settings, serialize_states[name]); - serialization->enumerateStreams([&] (const ISerialization::SubstreamPath & path) + if (storage.use_marks_file) { - String stream_name = ISerialization::getFileNameForStream(name_and_type, path); - if (written_streams.count(stream_name)) - return; + serialization->enumerateStreams([&] (const ISerialization::SubstreamPath & path) + { + String data_file_name = ISerialization::getFileNameForStream(name_and_type, path); + const auto & stream = streams.at(data_file_name); + if (stream.written) + return; - const auto & file = storage.files[stream_name]; - const auto stream_it = streams.find(stream_name); - - Mark mark; - mark.rows = (file.marks.empty() ? 0 : file.marks.back().rows) + column.size(); - mark.offset = stream_it->second.plain_offset + stream_it->second.plain->count(); - - out_marks.emplace_back(file.column_index, mark); - }); + auto & data_file = *storage.data_files_by_names.at(data_file_name); + auto & marks = data_file.marks; + size_t prev_num_rows = marks.empty() ? 0 : marks.back().rows; + auto & mark = marks.emplace_back(); + mark.rows = prev_num_rows + column.size(); + mark.offset = stream.plain_offset + stream.plain->count(); + }); + } serialization->serializeBinaryBulkWithMultipleStreams(column, 0, 0, settings, serialize_states[name]); serialization->enumerateStreams([&] (const ISerialization::SubstreamPath & path) { - String stream_name = ISerialization::getFileNameForStream(name_and_type, path); - if (!written_streams.emplace(stream_name).second) + String data_file_name = ISerialization::getFileNameForStream(name_and_type, path); + auto & stream = streams.at(data_file_name); + if (stream.written) return; - auto it = streams.find(stream_name); - if (streams.end() == it) - throw Exception("Logical error: stream was not created when writing data in LogBlockOutputStream", ErrorCodes::LOGICAL_ERROR); - it->second.compressed.next(); + stream.written = true; + stream.compressed.next(); }); } -void LogSink::writeMarks(MarksForColumns && marks) +void StorageLog::Mark::write(WriteBuffer & out) const { - if (marks.size() != storage.file_count) - throw Exception("Wrong number of marks generated from block. Makes no sense.", ErrorCodes::LOGICAL_ERROR); - - std::sort(marks.begin(), marks.end(), [](const auto & a, const auto & b) { return a.first < b.first; }); - - for (const auto & mark : marks) - { - writeIntBinary(mark.second.rows, *marks_stream); - writeIntBinary(mark.second.offset, *marks_stream); - - size_t column_index = mark.first; - - auto & file = storage.files[storage.column_names_by_idx[column_index]]; - std::lock_guard marks_lock(file.marks_mutex); - file.marks.push_back(mark.second); - } + writeIntBinary(rows, out); + writeIntBinary(offset, out); } + +void StorageLog::Mark::read(ReadBuffer & in) +{ + readIntBinary(rows, in); + readIntBinary(offset, in); +} + + +namespace +{ + /// NOTE: We extract the number of rows from the marks. + /// For normal columns, the number of rows in the block is specified in the marks. + /// For array columns and nested structures, there are more than one group of marks that correspond to different files + /// - for elements (file name.bin) - the total number of array elements in the block is specified, + /// - for array sizes (file name.size0.bin) - the number of rows (the whole arrays themselves) in the block is specified. + /// So for Array data type, first stream is array sizes; and number of array sizes is the number of arrays. + /// Thus we assume we can always get the real number of rows from the first column. + constexpr size_t INDEX_WITH_REAL_ROW_COUNT = 0; +} + + StorageLog::~StorageLog() = default; StorageLog::StorageLog( + const String & engine_name_, DiskPtr disk_, const String & relative_path_, const StorageID & table_id_, @@ -477,10 +537,13 @@ StorageLog::StorageLog( bool attach, size_t max_compress_block_size_) : IStorage(table_id_) + , engine_name(engine_name_) , disk(std::move(disk_)) , table_path(relative_path_) - , max_compress_block_size(max_compress_block_size_) + , use_marks_file(engine_name == "Log") + , marks_file_path(table_path + DBMS_STORAGE_LOG_MARKS_FILE_NAME) , file_checker(disk, table_path + "sizes.json") + , max_compress_block_size(max_compress_block_size_) { StorageInMemoryMetadata storage_metadata; storage_metadata.setColumns(columns_); @@ -491,6 +554,19 @@ StorageLog::StorageLog( if (relative_path_.empty()) throw Exception("Storage " + getName() + " requires data path", ErrorCodes::INCORRECT_FILE_NAME); + /// Enumerate data files. + for (const auto & column : storage_metadata.getColumns().getAllPhysical()) + addDataFiles(column); + + /// Ensure the file checker is initialized. + if (file_checker.empty()) + { + for (const auto & data_file : data_files) + file_checker.setEmpty(data_file.path); + if (use_marks_file) + file_checker.setEmpty(marks_file_path); + } + if (!attach) { /// create directories if they do not exist @@ -507,80 +583,138 @@ StorageLog::StorageLog( tryLogCurrentException(__PRETTY_FUNCTION__); } } - - for (const auto & column : storage_metadata.getColumns().getAllPhysical()) - addFiles(column); - - marks_file_path = table_path + DBMS_STORAGE_LOG_MARKS_FILE_NAME; } -void StorageLog::addFiles(const NameAndTypePair & column) +void StorageLog::addDataFiles(const NameAndTypePair & column) { - if (files.end() != files.find(column.name)) + if (data_files_by_names.contains(column.name)) throw Exception("Duplicate column with name " + column.name + " in constructor of StorageLog.", ErrorCodes::DUPLICATE_COLUMN); ISerialization::StreamCallback stream_callback = [&] (const ISerialization::SubstreamPath & substream_path) { - String stream_name = ISerialization::getFileNameForStream(column, substream_path); - - if (!files.count(stream_name)) + String data_file_name = ISerialization::getFileNameForStream(column, substream_path); + if (!data_files_by_names.contains(data_file_name)) { - ColumnData & column_data = files[stream_name]; - column_data.column_index = file_count; - column_data.data_file_path = table_path + stream_name + DBMS_STORAGE_LOG_DATA_FILE_EXTENSION; - - column_names_by_idx.push_back(stream_name); - ++file_count; + DataFile & data_file = data_files.emplace_back(); + data_file.name = data_file_name; + data_file.path = table_path + data_file_name + DBMS_STORAGE_LOG_DATA_FILE_EXTENSION; + data_file.index = num_data_files++; + data_files_by_names.emplace(data_file_name, nullptr); } }; - auto serialization = column.type->getDefaultSerialization(); - serialization->enumerateStreams(stream_callback); + column.type->getDefaultSerialization()->enumerateStreams(stream_callback); + + for (auto & data_file : data_files) + data_files_by_names[data_file.name] = &data_file; } void StorageLog::loadMarks(std::chrono::seconds lock_timeout) { - std::unique_lock lock(rwlock, lock_timeout); + if (!use_marks_file || marks_loaded) + return; + + /// We load marks with an exclusive lock (i.e. the write lock) because we don't want + /// a data race between two threads trying to load marks simultaneously. + WriteLock lock{rwlock, lock_timeout}; if (!lock) throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); - if (loaded_marks) + loadMarks(lock); +} + +void StorageLog::loadMarks(const WriteLock & /* already locked exclusively */) +{ + if (!use_marks_file || marks_loaded) return; - using FilesByIndex = std::vector; - - FilesByIndex files_by_index(file_count); - for (Files::iterator it = files.begin(); it != files.end(); ++it) - files_by_index[it->second.column_index] = it; - + size_t num_marks = 0; if (disk->exists(marks_file_path)) { size_t file_size = disk->getFileSize(marks_file_path); - if (file_size % (file_count * sizeof(Mark)) != 0) + if (file_size % (num_data_files * sizeof(Mark)) != 0) throw Exception("Size of marks file is inconsistent", ErrorCodes::SIZES_OF_MARKS_FILES_ARE_INCONSISTENT); - size_t marks_count = file_size / (file_count * sizeof(Mark)); + num_marks = file_size / (num_data_files * sizeof(Mark)); - for (auto & file : files_by_index) - file->second.marks.reserve(marks_count); + for (auto & data_file : data_files) + data_file.marks.resize(num_marks); std::unique_ptr marks_rb = disk->readFile(marks_file_path, ReadSettings().adjustBufferSize(32768)); - while (!marks_rb->eof()) + for (size_t i = 0; i != num_marks; ++i) { - for (auto & file : files_by_index) + for (auto & data_file : data_files) { Mark mark; - readIntBinary(mark.rows, *marks_rb); - readIntBinary(mark.offset, *marks_rb); - file->second.marks.push_back(mark); + mark.read(*marks_rb); + data_file.marks[i] = mark; } } } - loaded_marks = true; + marks_loaded = true; + num_marks_saved = num_marks; +} + +void StorageLog::saveMarks(const WriteLock & /* already locked for writing */) +{ + if (!use_marks_file) + return; + + size_t num_marks = num_data_files ? data_files[0].marks.size() : 0; + if (num_marks_saved == num_marks) + return; + + for (const auto & data_file : data_files) + { + if (data_file.marks.size() != num_marks) + throw Exception("Wrong number of marks generated from block. Makes no sense.", ErrorCodes::LOGICAL_ERROR); + } + + size_t start = num_marks_saved; + auto marks_stream = disk->writeFile(marks_file_path, 4096, WriteMode::Append); + + for (size_t i = start; i != num_marks; ++i) + { + for (const auto & data_file : data_files) + { + const auto & mark = data_file.marks[i]; + mark.write(*marks_stream); + } + } + + marks_stream->next(); + marks_stream->finalize(); + + num_marks_saved = num_marks; +} + + +void StorageLog::removeUnsavedMarks(const WriteLock & /* already locked for writing */) +{ + if (!use_marks_file) + return; + + for (auto & data_file : data_files) + { + if (data_file.marks.size() > num_marks_saved) + data_file.marks.resize(num_marks_saved); + } +} + + +void StorageLog::saveFileSizes(const WriteLock & /* already locked for writing */) +{ + for (const auto & data_file : data_files) + file_checker.update(data_file.path); + + if (use_marks_file) + file_checker.update(marks_file_path); + + file_checker.save(); } @@ -593,52 +727,29 @@ void StorageLog::rename(const String & new_path_to_table_data, const StorageID & table_path = new_path_to_table_data; file_checker.setPath(table_path + "sizes.json"); - for (auto & file : files) - file.second.data_file_path = table_path + fileName(file.second.data_file_path); + for (auto & data_file : data_files) + data_file.path = table_path + fileName(data_file.path); marks_file_path = table_path + DBMS_STORAGE_LOG_MARKS_FILE_NAME; } renameInMemory(new_table_id); } -void StorageLog::truncate(const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, ContextPtr, TableExclusiveLockHolder &) +void StorageLog::truncate(const ASTPtr &, const StorageMetadataPtr &, ContextPtr, TableExclusiveLockHolder &) { - files.clear(); - file_count = 0; - loaded_marks = false; - disk->clearDirectory(table_path); - for (const auto & column : metadata_snapshot->getColumns().getAllPhysical()) - addFiles(column); - - file_checker = FileChecker{disk, table_path + "sizes.json"}; - marks_file_path = table_path + DBMS_STORAGE_LOG_MARKS_FILE_NAME; -} - - -const StorageLog::Marks & StorageLog::getMarksWithRealRowCount(const StorageMetadataPtr & metadata_snapshot) const -{ - /// There should be at least one physical column - auto column = *metadata_snapshot->getColumns().getAllPhysical().begin(); - String filename; - - /** We take marks from first column. - * If this is a data type with multiple stream, get the first stream, that we assume have real row count. - * (Example: for Array data type, first stream is array sizes; and number of array sizes is the number of arrays). - */ - auto serialization = column.type->getDefaultSerialization(); - serialization->enumerateStreams([&](const ISerialization::SubstreamPath & substream_path) + for (auto & data_file : data_files) { - if (filename.empty()) - filename = ISerialization::getFileNameForStream(column, substream_path); - }); + data_file.marks.clear(); + file_checker.setEmpty(data_file.path); + } - Files::const_iterator it = files.find(filename); - if (files.end() == it) - throw Exception("Cannot find file " + filename, ErrorCodes::LOGICAL_ERROR); + if (use_marks_file) + file_checker.setEmpty(marks_file_path); - return it->second.marks; + marks_loaded = true; + num_marks_saved = 0; } @@ -666,40 +777,60 @@ Pipe StorageLog::read( auto lock_timeout = getLockTimeout(context); loadMarks(lock_timeout); - auto all_columns = metadata_snapshot->getColumns().getByNames(ColumnsDescription::All, column_names, true); - all_columns = Nested::convertToSubcolumns(all_columns); - - std::shared_lock lock(rwlock, lock_timeout); + ReadLock lock{rwlock, lock_timeout}; if (!lock) throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); - if (file_checker.empty()) + if (!num_data_files || !file_checker.getFileSize(data_files[INDEX_WITH_REAL_ROW_COUNT].path)) return Pipe(std::make_shared(metadata_snapshot->getSampleBlockForColumns(column_names, getVirtuals(), getStorageID()))); - Pipes pipes; + const Marks & marks_with_real_row_count = data_files[INDEX_WITH_REAL_ROW_COUNT].marks; + size_t num_marks = marks_with_real_row_count.size(); - const Marks & marks = getMarksWithRealRowCount(metadata_snapshot); - size_t marks_size = marks.size(); + size_t max_streams = use_marks_file ? num_marks : 1; + if (num_streams > max_streams) + num_streams = max_streams; - if (num_streams > marks_size) - num_streams = marks_size; + auto all_columns = metadata_snapshot->getColumns().getByNames(ColumnsDescription::All, column_names, true); + all_columns = Nested::convertToSubcolumns(all_columns); + + std::vector offsets; + offsets.resize(num_data_files, 0); + + std::vector file_sizes; + file_sizes.resize(num_data_files, 0); + for (const auto & data_file : data_files) + file_sizes[data_file.index] = file_checker.getFileSize(data_file.path); + + /// For TinyLog (use_marks_file == false) there is no row limit and we just read + /// the data files up to their sizes. + bool limited_by_file_sizes = !use_marks_file; + size_t row_limit = std::numeric_limits::max(); ReadSettings read_settings = context->getReadSettings(); + Pipes pipes; for (size_t stream = 0; stream < num_streams; ++stream) { - size_t mark_begin = stream * marks_size / num_streams; - size_t mark_end = (stream + 1) * marks_size / num_streams; - - size_t rows_begin = mark_begin ? marks[mark_begin - 1].rows : 0; - size_t rows_end = mark_end ? marks[mark_end - 1].rows : 0; + if (use_marks_file) + { + size_t mark_begin = stream * num_marks / num_streams; + size_t mark_end = (stream + 1) * num_marks / num_streams; + size_t start_row = mark_begin ? marks_with_real_row_count[mark_begin - 1].rows : 0; + size_t end_row = mark_end ? marks_with_real_row_count[mark_end - 1].rows : 0; + row_limit = end_row - start_row; + for (const auto & data_file : data_files) + offsets[data_file.index] = data_file.marks[mark_begin].offset; + } pipes.emplace_back(std::make_shared( max_block_size, all_columns, *this, - mark_begin, - rows_end - rows_begin, + row_limit, + offsets, + file_sizes, + limited_by_file_sizes, read_settings)); } @@ -709,10 +840,7 @@ Pipe StorageLog::read( SinkToStoragePtr StorageLog::write(const ASTPtr & /*query*/, const StorageMetadataPtr & metadata_snapshot, ContextPtr context) { - auto lock_timeout = getLockTimeout(context); - loadMarks(lock_timeout); - - std::unique_lock lock(rwlock, lock_timeout); + WriteLock lock{rwlock, getLockTimeout(context)}; if (!lock) throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); @@ -721,7 +849,7 @@ SinkToStoragePtr StorageLog::write(const ASTPtr & /*query*/, const StorageMetada CheckResults StorageLog::checkData(const ASTPtr & /* query */, ContextPtr context) { - std::shared_lock lock(rwlock, getLockTimeout(context)); + ReadLock lock{rwlock, getLockTimeout(context)}; if (!lock) throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); @@ -731,22 +859,23 @@ CheckResults StorageLog::checkData(const ASTPtr & /* query */, ContextPtr contex IStorage::ColumnSizeByName StorageLog::getColumnSizes() const { - std::shared_lock lock(rwlock, std::chrono::seconds(DBMS_DEFAULT_LOCK_ACQUIRE_TIMEOUT_SEC)); + ReadLock lock{rwlock, std::chrono::seconds(DBMS_DEFAULT_LOCK_ACQUIRE_TIMEOUT_SEC)}; if (!lock) throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); ColumnSizeByName column_sizes; - FileChecker::Map file_sizes = file_checker.getFileSizes(); for (const auto & column : getInMemoryMetadata().getColumns().getAllPhysical()) { ISerialization::StreamCallback stream_callback = [&, this] (const ISerialization::SubstreamPath & substream_path) { - String stream_name = ISerialization::getFileNameForStream(column, substream_path); - ColumnSize & size = column_sizes[column.name]; - auto it = files.find(stream_name); - if (it != files.end()) - size.data_compressed += file_sizes[fileName(it->second.data_file_path)]; + String data_file_name = ISerialization::getFileNameForStream(column, substream_path); + auto it = data_files_by_names.find(data_file_name); + if (it != data_files_by_names.end()) + { + const auto & data_file = *it->second; + column_sizes[column.name].data_compressed += file_checker.getFileSize(data_file.path); + } }; auto serialization = column.type->getDefaultSerialization(); @@ -756,13 +885,170 @@ IStorage::ColumnSizeByName StorageLog::getColumnSizes() const return column_sizes; } + +BackupEntries StorageLog::backup(const ASTs & partitions, ContextPtr context) +{ + if (!partitions.empty()) + throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Table engine {} doesn't support partitions", getName()); + + auto lock_timeout = getLockTimeout(context); + loadMarks(lock_timeout); + + ReadLock lock{rwlock, lock_timeout}; + if (!lock) + throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); + + if (!num_data_files || !file_checker.getFileSize(data_files[INDEX_WITH_REAL_ROW_COUNT].path)) + return {}; + + auto temp_dir_owner = std::make_shared(disk, "tmp/backup_"); + auto temp_dir = temp_dir_owner->getPath(); + disk->createDirectories(temp_dir); + + BackupEntries backup_entries; + + /// *.bin + for (const auto & data_file : data_files) + { + /// We make a copy of the data file because it can be changed later in write() or in truncate(). + String data_file_name = fileName(data_file.path); + String temp_file_path = temp_dir + "/" + data_file_name; + disk->copy(data_file.path, disk, temp_file_path); + backup_entries.emplace_back( + data_file_name, + std::make_unique( + disk, temp_file_path, file_checker.getFileSize(data_file.path), std::nullopt, temp_dir_owner)); + } + + /// __marks.mrk + if (use_marks_file) + { + /// We make a copy of the data file because it can be changed later in write() or in truncate(). + String marks_file_name = fileName(marks_file_path); + String temp_file_path = temp_dir + "/" + marks_file_name; + disk->copy(marks_file_path, disk, temp_file_path); + backup_entries.emplace_back( + marks_file_name, + std::make_unique( + disk, temp_file_path, file_checker.getFileSize(marks_file_path), std::nullopt, temp_dir_owner)); + } + + /// sizes.json + String files_info_path = file_checker.getPath(); + backup_entries.emplace_back(fileName(files_info_path), std::make_unique(disk, files_info_path)); + + /// columns.txt + backup_entries.emplace_back( + "columns.txt", std::make_unique(getInMemoryMetadata().getColumns().getAllPhysical().toString())); + + /// count.txt + if (use_marks_file) + { + size_t num_rows = data_files[INDEX_WITH_REAL_ROW_COUNT].marks.empty() ? 0 : data_files[INDEX_WITH_REAL_ROW_COUNT].marks.back().rows; + backup_entries.emplace_back("count.txt", std::make_unique(toString(num_rows))); + } + + return backup_entries; +} + +RestoreDataTasks StorageLog::restoreFromBackup(const BackupPtr & backup, const String & data_path_in_backup, const ASTs & partitions, ContextMutablePtr context) +{ + if (!partitions.empty()) + throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Table engine {} doesn't support partitions", getName()); + + auto restore_task = [this, backup, data_path_in_backup, context]() + { + auto lock_timeout = getLockTimeout(context); + WriteLock lock{rwlock, lock_timeout}; + if (!lock) + throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); + + if (!num_data_files) + return; + + /// Load the marks if not loaded yet. We have to do that now because we're going to update these marks. + loadMarks(lock); + + /// If there were no files, save zero file sizes to be able to rollback in case of error. + saveFileSizes(lock); + + try + { + /// Append data files. + for (const auto & data_file : data_files) + { + String file_path_in_backup = data_path_in_backup + fileName(data_file.path); + auto backup_entry = backup->read(file_path_in_backup); + auto in = backup_entry->getReadBuffer(); + auto out = disk->writeFile(data_file.path, max_compress_block_size, WriteMode::Append); + copyData(*in, *out); + } + + if (use_marks_file) + { + /// Append marks. + size_t num_extra_marks = 0; + String file_path_in_backup = data_path_in_backup + fileName(marks_file_path); + size_t file_size = backup->getSize(file_path_in_backup); + if (file_size % (num_data_files * sizeof(Mark)) != 0) + throw Exception("Size of marks file is inconsistent", ErrorCodes::SIZES_OF_MARKS_FILES_ARE_INCONSISTENT); + + num_extra_marks = file_size / (num_data_files * sizeof(Mark)); + + size_t num_marks = data_files[0].marks.size(); + for (auto & data_file : data_files) + data_file.marks.reserve(num_marks + num_extra_marks); + + std::vector old_data_sizes; + std::vector old_num_rows; + old_data_sizes.resize(num_data_files); + old_num_rows.resize(num_data_files); + for (size_t i = 0; i != num_data_files; ++i) + { + old_data_sizes[i] = file_checker.getFileSize(data_files[i].path); + old_num_rows[i] = num_marks ? data_files[i].marks[num_marks - 1].rows : 0; + } + + auto backup_entry = backup->read(file_path_in_backup); + auto marks_rb = backup_entry->getReadBuffer(); + + for (size_t i = 0; i != num_extra_marks; ++i) + { + for (size_t j = 0; j != num_data_files; ++j) + { + Mark mark; + mark.read(*marks_rb); + mark.rows += old_num_rows[j]; /// Adjust the number of rows. + mark.offset += old_data_sizes[j]; /// Adjust the offset. + data_files[j].marks.push_back(mark); + } + } + } + + /// Finish writing. + saveMarks(lock); + saveFileSizes(lock); + } + catch (...) + { + /// Rollback partial writes. + file_checker.repair(); + removeUnsavedMarks(lock); + throw; + } + + }; + return {restore_task}; +} + + void registerStorageLog(StorageFactory & factory) { StorageFactory::StorageFeatures features{ .supports_settings = true }; - factory.registerStorage("Log", [](const StorageFactory::Arguments & args) + auto create_fn = [](const StorageFactory::Arguments & args) { if (!args.engine_args.empty()) throw Exception( @@ -773,6 +1059,7 @@ void registerStorageLog(StorageFactory & factory) DiskPtr disk = args.getContext()->getDisk(disk_name); return StorageLog::create( + args.engine_name, disk, args.relative_data_path, args.table_id, @@ -781,7 +1068,10 @@ void registerStorageLog(StorageFactory & factory) args.comment, args.attach, args.getContext()->getSettings().max_compress_block_size); - }, features); + }; + + factory.registerStorage("Log", create_fn, features); + factory.registerStorage("TinyLog", create_fn, features); } } diff --git a/src/Storages/StorageLog.h b/src/Storages/StorageLog.h index ada971ecf43..8b2ef0ccac1 100644 --- a/src/Storages/StorageLog.h +++ b/src/Storages/StorageLog.h @@ -13,8 +13,11 @@ namespace DB { -/** Implements simple table engine without support of indices. +/** Implements Log - a simple table engine without support of indices. * The data is stored in a compressed form. + * + * Also implements TinyLog - a table engine that is suitable for small chunks of the log. + * It differs from Log in the absence of mark files. */ class StorageLog final : public shared_ptr_helper, public IStorage { @@ -24,7 +27,7 @@ class StorageLog final : public shared_ptr_helper, public IStorage public: ~StorageLog() override; - String getName() const override { return "Log"; } + String getName() const override { return engine_name; } Pipe read( const Names & column_names, @@ -41,19 +44,23 @@ public: CheckResults checkData(const ASTPtr & /* query */, ContextPtr /* context */) override; - void truncate(const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, ContextPtr, TableExclusiveLockHolder &) override; + void truncate(const ASTPtr &, const StorageMetadataPtr &, ContextPtr, TableExclusiveLockHolder &) override; bool storesDataOnDisk() const override { return true; } Strings getDataPaths() const override { return {DB::fullPath(disk, table_path)}; } bool supportsSubcolumns() const override { return true; } ColumnSizeByName getColumnSizes() const override; + BackupEntries backup(const ASTs & partitions, ContextPtr context) override; + RestoreDataTasks restoreFromBackup(const BackupPtr & backup, const String & data_path_in_backup, const ASTs & partitions, ContextMutablePtr context) override; + protected: /** Attach the table with the appropriate name, along the appropriate path (with / at the end), * (the correctness of names and paths is not verified) * consisting of the specified columns; Create files if they do not exist. */ StorageLog( + const String & engine_name_, DiskPtr disk_, const std::string & relative_path_, const StorageID & table_id_, @@ -64,6 +71,27 @@ protected: size_t max_compress_block_size_); private: + using ReadLock = std::shared_lock; + using WriteLock = std::unique_lock; + + /// The order of adding files should not change: it corresponds to the order of the columns in the marks file. + /// Should be called from the constructor only. + void addDataFiles(const NameAndTypePair & column); + + /// Reads the marks file if it hasn't read yet. + /// It is done lazily, so that with a large number of tables, the server starts quickly. + void loadMarks(std::chrono::seconds lock_timeout); + void loadMarks(const WriteLock &); + + /// Saves the marks file. + void saveMarks(const WriteLock &); + + /// Removes all unsaved marks. + void removeUnsavedMarks(const WriteLock &); + + /// Saves the sizes of the data and marks files. + void saveFileSizes(const WriteLock &); + /** Offsets to some row number in a file for column in table. * They are needed so that you can read the data in several threads. */ @@ -71,57 +99,41 @@ private: { size_t rows; /// How many rows are before this offset including the block at this offset. size_t offset; /// The offset in compressed file. + + void write(WriteBuffer & out) const; + void read(ReadBuffer & in); }; using Marks = std::vector; /// Column data - struct ColumnData + struct DataFile { - /// Specifies the column number in the marks file. - /// Does not necessarily match the column number among the columns of the table: columns with lengths of arrays are also numbered here. - size_t column_index; - - String data_file_path; - - std::mutex marks_mutex; + size_t index; + String name; + String path; Marks marks; }; - using Files = std::map; /// file name -> column data - DiskPtr disk; + const String engine_name; + const DiskPtr disk; String table_path; - mutable std::shared_timed_mutex rwlock; + std::vector data_files; + size_t num_data_files = 0; + std::map data_files_by_names; - Files files; - - Names column_names_by_idx; /// column_index -> name + /// The Log engine uses the marks file, and the TinyLog engine doesn't. + const bool use_marks_file; String marks_file_path; - - /// The order of adding files should not change: it corresponds to the order of the columns in the marks file. - void addFiles(const NameAndTypePair & column); - - bool loaded_marks = false; - - size_t max_compress_block_size; - size_t file_count = 0; + std::atomic marks_loaded = false; + size_t num_marks_saved = 0; FileChecker file_checker; - /// Read marks files if they are not already read. - /// It is done lazily, so that with a large number of tables, the server starts quickly. - /// You can not call with a write locked `rwlock`. - void loadMarks(std::chrono::seconds lock_timeout); + const size_t max_compress_block_size; - /** For normal columns, the number of rows in the block is specified in the marks. - * For array columns and nested structures, there are more than one group of marks that correspond to different files - * - for elements (file name.bin) - the total number of array elements in the block is specified, - * - for array sizes (file name.size0.bin) - the number of rows (the whole arrays themselves) in the block is specified. - * - * Return the first group of marks that contain the number of rows, but not the internals of the arrays. - */ - const Marks & getMarksWithRealRowCount(const StorageMetadataPtr & metadata_snapshot) const; + mutable std::shared_timed_mutex rwlock; }; } diff --git a/src/Storages/StorageMaterializedMySQL.cpp b/src/Storages/StorageMaterializedMySQL.cpp index 37a9838593b..c214540151a 100644 --- a/src/Storages/StorageMaterializedMySQL.cpp +++ b/src/Storages/StorageMaterializedMySQL.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL diff --git a/src/Storages/StorageMaterializedMySQL.h b/src/Storages/StorageMaterializedMySQL.h index 95ef4ad97fa..8ba98c3000f 100644 --- a/src/Storages/StorageMaterializedMySQL.h +++ b/src/Storages/StorageMaterializedMySQL.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_MYSQL diff --git a/src/Storages/StorageMaterializedView.cpp b/src/Storages/StorageMaterializedView.cpp index 29dbd6d38ed..e7de3010c33 100644 --- a/src/Storages/StorageMaterializedView.cpp +++ b/src/Storages/StorageMaterializedView.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include @@ -274,7 +274,7 @@ bool StorageMaterializedView::optimize( void StorageMaterializedView::alter( const AlterCommands & params, ContextPtr local_context, - TableLockHolder &) + AlterLockHolder &) { auto table_id = getStorageID(); StorageInMemoryMetadata new_metadata = getInMemoryMetadata(); diff --git a/src/Storages/StorageMaterializedView.h b/src/Storages/StorageMaterializedView.h index b6f677e84bb..105f3f25533 100644 --- a/src/Storages/StorageMaterializedView.h +++ b/src/Storages/StorageMaterializedView.h @@ -50,7 +50,7 @@ public: const Names & deduplicate_by_columns, ContextPtr context) override; - void alter(const AlterCommands & params, ContextPtr context, TableLockHolder & table_lock_holder) override; + void alter(const AlterCommands & params, ContextPtr context, AlterLockHolder & table_lock_holder) override; void checkMutationIsPossible(const MutationCommands & commands, const Settings & settings) const override; diff --git a/src/Storages/StorageMerge.cpp b/src/Storages/StorageMerge.cpp index 38db0b61e8d..06fbfafc9b6 100644 --- a/src/Storages/StorageMerge.cpp +++ b/src/Storages/StorageMerge.cpp @@ -629,10 +629,9 @@ void StorageMerge::checkAlterIsPossible(const AlterCommands & commands, ContextP auto name_deps = getDependentViewsByColumn(local_context); for (const auto & command : commands) { - if (command.type != AlterCommand::Type::ADD_COLUMN - && command.type != AlterCommand::Type::MODIFY_COLUMN - && command.type != AlterCommand::Type::DROP_COLUMN - && command.type != AlterCommand::Type::COMMENT_COLUMN) + if (command.type != AlterCommand::Type::ADD_COLUMN && command.type != AlterCommand::Type::MODIFY_COLUMN + && command.type != AlterCommand::Type::DROP_COLUMN && command.type != AlterCommand::Type::COMMENT_COLUMN + && command.type != AlterCommand::Type::COMMENT_TABLE) throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Alter of type '{}' is not supported by storage {}", command.type, getName()); @@ -651,7 +650,7 @@ void StorageMerge::checkAlterIsPossible(const AlterCommands & commands, ContextP } void StorageMerge::alter( - const AlterCommands & params, ContextPtr local_context, TableLockHolder &) + const AlterCommands & params, ContextPtr local_context, AlterLockHolder &) { auto table_id = getStorageID(); diff --git a/src/Storages/StorageMerge.h b/src/Storages/StorageMerge.h index b9a127515f8..52a91747433 100644 --- a/src/Storages/StorageMerge.h +++ b/src/Storages/StorageMerge.h @@ -43,7 +43,7 @@ public: /// you need to add and remove columns in the sub-tables manually /// the structure of sub-tables is not checked - void alter(const AlterCommands & params, ContextPtr context, TableLockHolder & table_lock_holder) override; + void alter(const AlterCommands & params, ContextPtr context, AlterLockHolder & table_lock_holder) override; bool mayBenefitFromIndexForIn( const ASTPtr & left_in_operand, ContextPtr query_context, const StorageMetadataPtr & metadata_snapshot) const override; diff --git a/src/Storages/StorageMergeTree.cpp b/src/Storages/StorageMergeTree.cpp index 699c78cdab9..7322d57fed2 100644 --- a/src/Storages/StorageMergeTree.cpp +++ b/src/Storages/StorageMergeTree.cpp @@ -271,7 +271,7 @@ void StorageMergeTree::truncate(const ASTPtr &, const StorageMetadataPtr &, Cont void StorageMergeTree::alter( const AlterCommands & commands, ContextPtr local_context, - TableLockHolder & table_lock_holder) + AlterLockHolder & table_lock_holder) { auto table_id = getStorageID(); auto old_storage_settings = getSettings(); @@ -1179,6 +1179,7 @@ bool StorageMergeTree::optimize( ActionLock StorageMergeTree::stopMergesAndWait() { + /// TODO allow to stop merges in specific partition only (like it's done in ReplicatedMergeTree) std::unique_lock lock(currently_processing_in_background_mutex); /// Asks to complete merges and does not allow them to start. @@ -1332,6 +1333,7 @@ void StorageMergeTree::replacePartitionFrom(const StoragePtr & source_table, con { auto lock1 = lockForShare(local_context->getCurrentQueryId(), local_context->getSettingsRef().lock_acquire_timeout); auto lock2 = source_table->lockForShare(local_context->getCurrentQueryId(), local_context->getSettingsRef().lock_acquire_timeout); + auto merges_blocker = stopMergesAndWait(); auto source_metadata_snapshot = source_table->getInMemoryMetadataPtr(); auto my_metadata_snapshot = getInMemoryMetadataPtr(); @@ -1403,13 +1405,9 @@ void StorageMergeTree::replacePartitionFrom(const StoragePtr & source_table, con void StorageMergeTree::movePartitionToTable(const StoragePtr & dest_table, const ASTPtr & partition, ContextPtr local_context) { - /// MOVE PARTITION cannot be run in parallel with merges/mutations, - /// since otherwise there can be some merge/mutation in progress, - /// that will be created in the source table after MOVE PARTITION. - std::unique_lock background_lock(currently_processing_in_background_mutex); - auto lock1 = lockForShare(local_context->getCurrentQueryId(), local_context->getSettingsRef().lock_acquire_timeout); auto lock2 = dest_table->lockForShare(local_context->getCurrentQueryId(), local_context->getSettingsRef().lock_acquire_timeout); + auto merges_blocker = stopMergesAndWait(); auto dest_table_storage = std::dynamic_pointer_cast(dest_table); if (!dest_table_storage) diff --git a/src/Storages/StorageMergeTree.h b/src/Storages/StorageMergeTree.h index db651bd00c3..8ed4b707b34 100644 --- a/src/Storages/StorageMergeTree.h +++ b/src/Storages/StorageMergeTree.h @@ -86,7 +86,7 @@ public: void drop() override; void truncate(const ASTPtr &, const StorageMetadataPtr &, ContextPtr, TableExclusiveLockHolder &) override; - void alter(const AlterCommands & commands, ContextPtr context, TableLockHolder & table_lock_holder) override; + void alter(const AlterCommands & commands, ContextPtr context, AlterLockHolder & table_lock_holder) override; void checkTableCanBeDropped() const override; diff --git a/src/Storages/StorageMongoDB.cpp b/src/Storages/StorageMongoDB.cpp index 146fd8b616a..9b48f3fc3b3 100644 --- a/src/Storages/StorageMongoDB.cpp +++ b/src/Storages/StorageMongoDB.cpp @@ -113,9 +113,9 @@ StorageMongoDBConfiguration StorageMongoDB::getConfiguration(ASTs engine_args, C for (const auto & [arg_name, arg_value] : storage_specific_args) { if (arg_name == "collection") - configuration.collection = arg_value.safeGet(); + configuration.collection = arg_value->as()->value.safeGet(); else if (arg_name == "options") - configuration.options = arg_value.safeGet(); + configuration.options = arg_value->as()->value.safeGet(); else throw Exception(ErrorCodes::BAD_ARGUMENTS, "Unexpected key-value argument." diff --git a/src/Storages/StorageMongoDBSocketFactory.cpp b/src/Storages/StorageMongoDBSocketFactory.cpp index 9a2b120e9ed..f21e8746eb9 100644 --- a/src/Storages/StorageMongoDBSocketFactory.cpp +++ b/src/Storages/StorageMongoDBSocketFactory.cpp @@ -2,9 +2,7 @@ #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include #include #include diff --git a/src/Storages/StorageMySQL.cpp b/src/Storages/StorageMySQL.cpp index 50d2124958c..0b6095e033b 100644 --- a/src/Storages/StorageMySQL.cpp +++ b/src/Storages/StorageMySQL.cpp @@ -250,9 +250,9 @@ StorageMySQLConfiguration StorageMySQL::getConfiguration(ASTs engine_args, Conte for (const auto & [arg_name, arg_value] : storage_specific_args) { if (arg_name == "replace_query") - configuration.replace_query = arg_value.safeGet(); + configuration.replace_query = arg_value->as()->value.safeGet(); else if (arg_name == "on_duplicate_clause") - configuration.on_duplicate_clause = arg_value.safeGet(); + configuration.on_duplicate_clause = arg_value->as()->value.safeGet(); else throw Exception(ErrorCodes::BAD_ARGUMENTS, "Unexpected key-value argument." diff --git a/src/Storages/StorageMySQL.h b/src/Storages/StorageMySQL.h index 134c9939e3e..cc3673e50ca 100644 --- a/src/Storages/StorageMySQL.h +++ b/src/Storages/StorageMySQL.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_MYSQL diff --git a/src/Storages/StorageNull.cpp b/src/Storages/StorageNull.cpp index 2b3585e360e..094e345e433 100644 --- a/src/Storages/StorageNull.cpp +++ b/src/Storages/StorageNull.cpp @@ -64,7 +64,7 @@ void StorageNull::checkAlterIsPossible(const AlterCommands & commands, ContextPt } -void StorageNull::alter(const AlterCommands & params, ContextPtr context, TableLockHolder &) +void StorageNull::alter(const AlterCommands & params, ContextPtr context, AlterLockHolder &) { auto table_id = getStorageID(); diff --git a/src/Storages/StorageNull.h b/src/Storages/StorageNull.h index de667c1d75c..5fef7f984e4 100644 --- a/src/Storages/StorageNull.h +++ b/src/Storages/StorageNull.h @@ -43,7 +43,7 @@ public: void checkAlterIsPossible(const AlterCommands & commands, ContextPtr context) const override; - void alter(const AlterCommands & params, ContextPtr context, TableLockHolder & table_lock_holder) override; + void alter(const AlterCommands & params, ContextPtr context, AlterLockHolder & table_lock_holder) override; std::optional totalRows(const Settings &) const override { diff --git a/src/Storages/StoragePostgreSQL.cpp b/src/Storages/StoragePostgreSQL.cpp index 7949cac6249..8327bb92a38 100644 --- a/src/Storages/StoragePostgreSQL.cpp +++ b/src/Storages/StoragePostgreSQL.cpp @@ -398,7 +398,7 @@ StoragePostgreSQLConfiguration StoragePostgreSQL::getConfiguration(ASTs engine_a for (const auto & [arg_name, arg_value] : storage_specific_args) { if (arg_name == "on_conflict") - configuration.on_conflict = arg_value.safeGet(); + configuration.on_conflict = arg_value->as()->value.safeGet(); else throw Exception(ErrorCodes::BAD_ARGUMENTS, "Unexpected key-value argument." diff --git a/src/Storages/StoragePostgreSQL.h b/src/Storages/StoragePostgreSQL.h index 10a60bf9b21..7d8752c91b9 100644 --- a/src/Storages/StoragePostgreSQL.h +++ b/src/Storages/StoragePostgreSQL.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX #include diff --git a/src/Storages/StorageProxy.h b/src/Storages/StorageProxy.h index 62e0ccc76aa..304f84c02eb 100644 --- a/src/Storages/StorageProxy.h +++ b/src/Storages/StorageProxy.h @@ -91,7 +91,7 @@ public: IStorage::renameInMemory(new_table_id); } - void alter(const AlterCommands & params, ContextPtr context, TableLockHolder & alter_lock_holder) override + void alter(const AlterCommands & params, ContextPtr context, AlterLockHolder & alter_lock_holder) override { getNested()->alter(params, context, alter_lock_holder); IStorage::setInMemoryMetadata(getNested()->getInMemoryMetadata()); diff --git a/src/Storages/StorageReplicatedMergeTree.cpp b/src/Storages/StorageReplicatedMergeTree.cpp index f554986402c..63bb8af9148 100644 --- a/src/Storages/StorageReplicatedMergeTree.cpp +++ b/src/Storages/StorageReplicatedMergeTree.cpp @@ -192,43 +192,54 @@ zkutil::ZooKeeperPtr StorageReplicatedMergeTree::getZooKeeper() const return res; } -static std::string normalizeZooKeeperPath(std::string zookeeper_path) +static std::string normalizeZooKeeperPath(std::string zookeeper_path, bool check_starts_with_slash, Poco::Logger * log = nullptr) { if (!zookeeper_path.empty() && zookeeper_path.back() == '/') zookeeper_path.resize(zookeeper_path.size() - 1); /// If zookeeper chroot prefix is used, path should start with '/', because chroot concatenates without it. if (!zookeeper_path.empty() && zookeeper_path.front() != '/') + { + /// Do not allow this for new tables, print warning for tables created in old versions + if (check_starts_with_slash) + throw Exception(ErrorCodes::BAD_ARGUMENTS, "ZooKeeper path must starts with '/', got '{}'", zookeeper_path); + if (log) + LOG_WARNING(log, "ZooKeeper path ('{}') does not start with '/'. It will not be supported in future releases"); zookeeper_path = "/" + zookeeper_path; + } return zookeeper_path; } static String extractZooKeeperName(const String & path) { + static constexpr auto default_zookeeper_name = "default"; if (path.empty()) - throw Exception("ZooKeeper path should not be empty", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); - auto pos = path.find(':'); - if (pos != String::npos) + throw Exception("ZooKeeper path should not be empty", ErrorCodes::BAD_ARGUMENTS); + if (path[0] == '/') + return default_zookeeper_name; + auto pos = path.find(":/"); + if (pos != String::npos && pos < path.find('/')) { auto zookeeper_name = path.substr(0, pos); if (zookeeper_name.empty()) - throw Exception("Zookeeper path should start with '/' or ':/'", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); + throw Exception("Zookeeper path should start with '/' or ':/'", ErrorCodes::BAD_ARGUMENTS); return zookeeper_name; } - static constexpr auto default_zookeeper_name = "default"; return default_zookeeper_name; } -static String extractZooKeeperPath(const String & path) +static String extractZooKeeperPath(const String & path, bool check_starts_with_slash, Poco::Logger * log = nullptr) { if (path.empty()) - throw Exception("ZooKeeper path should not be empty", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); - auto pos = path.find(':'); - if (pos != String::npos) + throw Exception("ZooKeeper path should not be empty", ErrorCodes::BAD_ARGUMENTS); + if (path[0] == '/') + return normalizeZooKeeperPath(path, check_starts_with_slash, log); + auto pos = path.find(":/"); + if (pos != String::npos && pos < path.find('/')) { - return normalizeZooKeeperPath(path.substr(pos + 1, String::npos)); + return normalizeZooKeeperPath(path.substr(pos + 1, String::npos), check_starts_with_slash, log); } - return normalizeZooKeeperPath(path); + return normalizeZooKeeperPath(path, check_starts_with_slash, log); } static MergeTreePartInfo makeDummyDropRangeForMovePartitionOrAttachPartitionFrom(const String & partition_id) @@ -275,7 +286,7 @@ StorageReplicatedMergeTree::StorageReplicatedMergeTree( attach, [this] (const std::string & name) { enqueuePartForCheck(name); }) , zookeeper_name(extractZooKeeperName(zookeeper_path_)) - , zookeeper_path(extractZooKeeperPath(zookeeper_path_)) + , zookeeper_path(extractZooKeeperPath(zookeeper_path_, /* check_starts_with_slash */ !attach, log)) , replica_name(replica_name_) , replica_path(fs::path(zookeeper_path) / "replicas" / replica_name_) , reader(*this) @@ -838,12 +849,47 @@ void StorageReplicatedMergeTree::dropReplica(zkutil::ZooKeeperPtr zookeeper, con throw Exception("Table was not dropped because ZooKeeper session has expired.", ErrorCodes::TABLE_WAS_NOT_DROPPED); auto remote_replica_path = zookeeper_path + "/replicas/" + replica; + LOG_INFO(logger, "Removing replica {}, marking it as lost", remote_replica_path); /// Mark itself lost before removing, because the following recursive removal may fail /// and partially dropped replica may be considered as alive one (until someone will mark it lost) - zookeeper->trySet(zookeeper_path + "/replicas/" + replica + "/is_lost", "1"); + zookeeper->trySet(remote_replica_path + "/is_lost", "1"); + + /// NOTE: we should check for remote_replica_path existence, + /// since otherwise DROP REPLICA will fail if the replica had been already removed. + if (!zookeeper->exists(remote_replica_path)) + { + LOG_INFO(logger, "Removing replica {} does not exist", remote_replica_path); + return; + } + + /// Analog of removeRecursive(remote_replica_path) + /// but it removes "metadata" firstly. + /// + /// This will allow to mark table as readonly + /// and skip any checks of parts between on-disk and in the zookeeper. + /// + /// Without this removeRecursive() may remove "parts" first + /// and on DETACH/ATTACH (or server restart) it will trigger the following error: + /// + /// "The local set of parts of table X doesn't look like the set of parts in ZooKeeper" + /// + { + Strings children = zookeeper->getChildren(remote_replica_path); + + if (std::find(children.begin(), children.end(), "metadata") != children.end()) + zookeeper->remove(fs::path(remote_replica_path) / "metadata"); + + for (const auto & child : children) + { + if (child != "metadata") + zookeeper->removeRecursive(fs::path(remote_replica_path) / child); + } + + zookeeper->remove(remote_replica_path); + } + /// It may left some garbage if replica_path subtree are concurrently modified - zookeeper->tryRemoveRecursive(remote_replica_path); if (zookeeper->exists(remote_replica_path)) LOG_ERROR(logger, "Replica was not completely removed from ZooKeeper, {} still exists and may contain some garbage.", remote_replica_path); @@ -1015,8 +1061,15 @@ void StorageReplicatedMergeTree::setTableStructure( if (metadata_diff.sampling_expression_changed) { - auto sample_by_ast = parse_key_expr(metadata_diff.new_sampling_expression); - new_metadata.sampling_key.recalculateWithNewAST(sample_by_ast, new_metadata.columns, getContext()); + if (!metadata_diff.new_sampling_expression.empty()) + { + auto sample_by_ast = parse_key_expr(metadata_diff.new_sampling_expression); + new_metadata.sampling_key.recalculateWithNewAST(sample_by_ast, new_metadata.columns, getContext()); + } + else /// SAMPLE BY was removed + { + new_metadata.sampling_key = {}; + } } if (metadata_diff.skip_indices_changed) @@ -1210,44 +1263,7 @@ void StorageReplicatedMergeTree::checkParts(bool skip_sanity_checks) } /// Add to the queue jobs to pick up the missing parts from other replicas and remove from ZK the information that we have them. - std::vector> exists_futures; - exists_futures.reserve(parts_to_fetch.size()); - for (const String & part_name : parts_to_fetch) - { - String part_path = fs::path(replica_path) / "parts" / part_name; - exists_futures.emplace_back(zookeeper->asyncExists(part_path)); - } - - std::vector> enqueue_futures; - enqueue_futures.reserve(parts_to_fetch.size()); - for (size_t i = 0; i < parts_to_fetch.size(); ++i) - { - const String & part_name = parts_to_fetch[i]; - - Coordination::Requests ops; - - LOG_ERROR(log, "Removing locally missing part from ZooKeeper and queueing a fetch: {}", part_name); - time_t part_create_time = 0; - Coordination::ExistsResponse exists_resp = exists_futures[i].get(); - if (exists_resp.error == Coordination::Error::ZOK) - { - part_create_time = exists_resp.stat.ctime / 1000; - removePartFromZooKeeper(part_name, ops, exists_resp.stat.numChildren > 0); - } - LogEntry log_entry; - log_entry.type = LogEntry::GET_PART; - log_entry.source_replica = ""; - log_entry.new_part_name = part_name; - log_entry.create_time = part_create_time; - - /// We assume that this occurs before the queue is loaded (queue.initialize). - ops.emplace_back(zkutil::makeCreateRequest( - fs::path(replica_path) / "queue/queue-", log_entry.toString(), zkutil::CreateMode::PersistentSequential)); - enqueue_futures.emplace_back(zookeeper->asyncMulti(ops)); - } - - for (auto & future : enqueue_futures) - future.get(); + queue.setBrokenPartsToEnqueueFetchesOnLoading(std::move(parts_to_fetch)); /// Remove extra local parts. for (const DataPartPtr & part : unexpected_parts) @@ -1799,8 +1815,10 @@ bool StorageReplicatedMergeTree::executeFetchShared( void StorageReplicatedMergeTree::executeDropRange(const LogEntry & entry) { + LOG_TRACE(log, "Executing DROP_RANGE {}", entry.new_part_name); auto drop_range_info = MergeTreePartInfo::fromPartName(entry.new_part_name, format_version); getContext()->getMergeList().cancelInPartition(getStorageID(), drop_range_info.partition_id, drop_range_info.max_block); + part_check_thread.cancelRemovedPartsCheck(drop_range_info); queue.removePartProducingOpsInRange(getZooKeeper(), drop_range_info, entry); /// Delete the parts contained in the range to be deleted. @@ -1868,6 +1886,7 @@ bool StorageReplicatedMergeTree::executeReplaceRange(const LogEntry & entry) if (replace) { getContext()->getMergeList().cancelInPartition(getStorageID(), drop_range.partition_id, drop_range.max_block); + part_check_thread.cancelRemovedPartsCheck(drop_range); queue.removePartProducingOpsInRange(getZooKeeper(), drop_range, entry); } else @@ -2342,13 +2361,69 @@ void StorageReplicatedMergeTree::cloneReplica(const String & source_replica, Coo std::sort(source_queue_names.begin(), source_queue_names.end()); - Strings source_queue; - for (const String & entry_name : source_queue_names) + struct QueueEntryInfo { - String entry; - if (!zookeeper->tryGet(fs::path(source_path) / "queue" / entry_name, entry)) - continue; - source_queue.push_back(entry); + String data = {}; + Coordination::Stat stat = {}; + LogEntryPtr parsed_entry = {}; + }; + + /// We got log pointer and list of queue entries of source replica. + /// At first we will get queue entries and then we will get list of active parts of source replica + /// to enqueue fetches for missing parts. If source replica executes and removes some entry concurrently + /// we will see produced part (or covering part) in replicas/source/parts and will enqueue fetch. + /// We will try to parse queue entries before copying them + /// to avoid creation of excessive and duplicating entries in our queue. + /// See also removePartAndEnqueueFetch(...) + std::vector source_queue; + ActiveDataPartSet get_part_set{format_version}; + ActiveDataPartSet drop_range_set{format_version}; + + { + std::vector queue_get_futures; + queue_get_futures.reserve(source_queue_names.size()); + + for (const String & entry_name : source_queue_names) + queue_get_futures.push_back(zookeeper->asyncTryGet(fs::path(source_path) / "queue" / entry_name)); + + source_queue.reserve(source_queue_names.size()); + for (size_t i = 0; i < source_queue_names.size(); ++i) + { + auto res = queue_get_futures[i].get(); + /// It's ok if entry is already executed and removed: we also will get source parts set. + if (res.error == Coordination::Error::ZNONODE) + continue; + + assert(res.error == Coordination::Error::ZOK); + source_queue.emplace_back(); + auto & info = source_queue.back(); + info.data = std::move(res.data); + info.stat = std::move(res.stat); + try + { + info.parsed_entry = LogEntry::parse(info.data, info.stat); + } + catch (...) + { + tryLogCurrentException(log, "Cannot parse source queue entry " + source_queue_names[i]); + } + + /// It may be ok if source replica has newer version. We will copy entry as is. + if (!info.parsed_entry) + continue; + + info.parsed_entry->znode_name = source_queue_names[i]; + + if (info.parsed_entry->type == LogEntry::DROP_RANGE) + drop_range_set.add(info.parsed_entry->new_part_name); + + if (info.parsed_entry->type == LogEntry::GET_PART) + { + String maybe_covering_drop_range = drop_range_set.getContainingPart(info.parsed_entry->new_part_name); + if (maybe_covering_drop_range.empty()) + get_part_set.add(info.parsed_entry->new_part_name); + } + } } /// We should do it after copying queue, because some ALTER_METADATA entries can be lost otherwise. @@ -2356,9 +2431,10 @@ void StorageReplicatedMergeTree::cloneReplica(const String & source_replica, Coo /// Add to the queue jobs to receive all the active parts that the reference/master replica has. Strings source_replica_parts = zookeeper->getChildren(fs::path(source_path) / "parts"); - ActiveDataPartSet active_parts_set(format_version, source_replica_parts); + for (const auto & active_part : source_replica_parts) + get_part_set.add(active_part); - Strings active_parts = active_parts_set.getParts(); + Strings active_parts = get_part_set.getParts(); /// Remove local parts if source replica does not have them, because such parts will never be fetched by other replicas. Strings local_parts_in_zk = zookeeper->getChildren(fs::path(replica_path) / "parts"); @@ -2366,7 +2442,7 @@ void StorageReplicatedMergeTree::cloneReplica(const String & source_replica, Coo for (const auto & part : local_parts_in_zk) { - if (active_parts_set.getContainingPart(part).empty()) + if (get_part_set.getContainingPart(part).empty()) { parts_to_remove_from_zk.emplace_back(part); LOG_WARNING(log, "Source replica does not have part {}. Removing it from ZooKeeper.", part); @@ -2380,7 +2456,8 @@ void StorageReplicatedMergeTree::cloneReplica(const String & source_replica, Coo Coordination::Stat is_lost_stat_new; zookeeper->get(fs::path(source_path) / "is_lost", &is_lost_stat_new); if (is_lost_stat_new.version != source_is_lost_stat.version) - throw Exception(ErrorCodes::REPLICA_STATUS_CHANGED, "Cannot clone {}, because it suddenly become lost", source_replica); + throw Exception(ErrorCodes::REPLICA_STATUS_CHANGED, "Cannot clone {}, because it suddenly become lost " + "or removed broken part from ZooKeeper", source_replica); } tryRemovePartsFromZooKeeperWithRetries(parts_to_remove_from_zk); @@ -2391,7 +2468,7 @@ void StorageReplicatedMergeTree::cloneReplica(const String & source_replica, Coo for (const auto & part : local_active_parts) { - if (active_parts_set.getContainingPart(part->name).empty()) + if (get_part_set.getContainingPart(part->name).empty()) { parts_to_remove_from_working_set.emplace_back(part); LOG_WARNING(log, "Source replica does not have part {}. Removing it from working set.", part->name); @@ -2411,13 +2488,60 @@ void StorageReplicatedMergeTree::cloneReplica(const String & source_replica, Coo removePartsFromWorkingSet(parts_to_remove_from_working_set, true); + std::unordered_set created_get_parts; + + /// Avoid creation of GET_PART entries which covered by another GET_PART or DROP_RANGE + /// and creation of multiple entries with the same new_part_name. + auto should_ignore_log_entry = [&drop_range_set, &get_part_set, this] (std::unordered_set & created_gets, + const String & part_name, const String & log_msg_context) -> bool + { + /// We should not create entries covered by DROP_RANGE, because we will remove them anyway (kind of optimization). + String covering_drop_range = drop_range_set.getContainingPart(part_name); + if (!covering_drop_range.empty()) + { + LOG_TRACE(log, "{} {}: it's covered by DROP_RANGE {}", log_msg_context, part_name, covering_drop_range); + return true; + } + + /// We should not create entries covered by GET_PART, + /// because GET_PART entry has no source parts and we can execute it only by fetching. + /// Parts covered by GET_PART are useless and may cause replication to stuck if covered part is lost. + String covering_get_part_entry = get_part_set.getContainingPart(part_name); + + if (covering_get_part_entry.empty()) + return false; + + if (covering_get_part_entry != part_name) + { + LOG_TRACE(log, "{} {}: it's covered by GET_PART {}", log_msg_context, part_name, covering_get_part_entry); + return true; + } + + /// NOTE: It does not completely avoids duplication of GET_PART entries, + /// because it's possible that source replica has executed some GET_PART after we copied it's queue, + /// but before we copied its active parts set. In this case we will GET_PART entry in our queue + /// and later will pull the original GET_PART from replication log. + /// It should not cause any issues, but it does not allow to get rid of duplicated entries and add an assertion. + if (created_gets.count(part_name)) + { + /// NOTE It would be better to copy log entry instead of creating GET_PART + /// if there are GET_PART and log entry of other type with the same new_part_name. + /// But it's a bit harder to implement, because it requires full-fledged virtual_parts set. + LOG_TRACE(log, "{} {}: GET_PART for it is already created", log_msg_context, part_name); + return true; + } + + return false; + }; + for (const String & name : active_parts) { + if (should_ignore_log_entry(created_get_parts, name, "Not fetching")) + continue; + LogEntry log_entry; - if (!are_restoring_replica) - log_entry.type = LogEntry::GET_PART; - else + if (are_restoring_replica) { LOG_DEBUG(log, "Obtaining checksum for path {}", name); @@ -2442,23 +2566,47 @@ void StorageReplicatedMergeTree::cloneReplica(const String & source_replica, Coo const auto [lo, hi] = desired_checksums.hash_of_all_files; log_entry.part_checksum = getHexUIntUppercase(hi) + getHexUIntUppercase(lo); } + else + { + log_entry.type = LogEntry::GET_PART; + } log_entry.source_replica = ""; log_entry.new_part_name = name; log_entry.create_time = tryGetPartCreateTime(zookeeper, source_path, name); + LOG_TEST(log, "Enqueueing {} for fetch", name); zookeeper->create(fs::path(replica_path) / "queue/queue-", log_entry.toString(), zkutil::CreateMode::PersistentSequential); + created_get_parts.insert(name); } - LOG_DEBUG(log, "Queued {} parts to be fetched", active_parts.size()); + size_t total_parts_to_fetch = created_get_parts.size(); + LOG_DEBUG(log, "Queued {} parts to be fetched, {} parts ignored", total_parts_to_fetch, active_parts.size() - total_parts_to_fetch); /// Add content of the reference/master replica queue to the queue. - for (const String & entry : source_queue) + size_t total_entries_to_copy = 0; + for (const auto & entry_info : source_queue) { - zookeeper->create(fs::path(replica_path) / "queue/queue-", entry, zkutil::CreateMode::PersistentSequential); + assert(!entry_info.data.empty()); + if (entry_info.parsed_entry && !entry_info.parsed_entry->new_part_name.empty()) + { + const String & part_name = entry_info.parsed_entry->new_part_name; + const String & entry_name = entry_info.parsed_entry->znode_name; + const auto & entry_type = entry_info.parsed_entry->type; + + if (should_ignore_log_entry(created_get_parts, part_name, fmt::format("Not copying {} {} ", entry_name, entry_type))) + continue; + + if (entry_info.parsed_entry->type == LogEntry::GET_PART) + created_get_parts.insert(part_name); + } + + LOG_TEST(log, "Copying entry {}", entry_info.data); + zookeeper->create(fs::path(replica_path) / "queue/queue-", entry_info.data, zkutil::CreateMode::PersistentSequential); + ++total_entries_to_copy; } - LOG_DEBUG(log, "Copied {} queue entries", source_queue.size()); + LOG_DEBUG(log, "Copied {} queue entries, {} entries ignored", total_entries_to_copy, source_queue.size() - total_entries_to_copy); } @@ -3195,6 +3343,34 @@ void StorageReplicatedMergeTree::removePartAndEnqueueFetch(const String & part_n { auto zookeeper = getZooKeeper(); + /// We don't know exactly what happened to broken part + /// and we are going to remove all covered log entries. + /// It's quite dangerous, so clone covered parts to detached. + auto broken_part_info = MergeTreePartInfo::fromPartName(part_name, format_version); + + auto partition_range = getDataPartsPartitionRange(broken_part_info.partition_id); + for (const auto & part : partition_range) + { + if (!broken_part_info.contains(part->info)) + continue; + + /// Broken part itself ether already moved to detached or does not exist. + assert(broken_part_info != part->info); + part->makeCloneInDetached("covered-by-broken", getInMemoryMetadataPtr()); + } + + /// It's possible that queue contains entries covered by part_name. + /// For example, we had GET_PART all_1_42_5 and MUTATE_PART all_1_42_5_63, + /// then all_1_42_5_63 was executed by fetching, but part was written to disk incorrectly. + /// In this case we have to remove it as broken and create GET_PART all_1_42_5_63 to fetch it again, + /// but GET_PART all_1_42_5 may be still in the queue. + /// We should remove all covered entries before creating GET_PART entry, because: + /// 1. In the situation described above, we do not know how to merge/mutate all_1_42_5_63 from all_1_42_5, + /// so GET_PART all_1_42_5 (and all source parts) is useless. The only thing we can do is to fetch all_1_42_5_63. + /// 2. If all_1_42_5_63 is lost, then replication may stuck waiting for all_1_42_5_63 to appear, + /// because we may have some covered parts (more precisely, parts with the same min and max blocks) + queue.removePartProducingOpsInRange(zookeeper, broken_part_info, {}); + String part_path = fs::path(replica_path) / "parts" / part_name; Coordination::Requests ops; @@ -3203,6 +3379,14 @@ void StorageReplicatedMergeTree::removePartAndEnqueueFetch(const String & part_n Coordination::Stat stat; if (zookeeper->exists(part_path, &stat)) { + /// Update version of /is_lost node to avoid race condition with cloneReplica(...). + /// cloneReplica(...) expects that if some entry was executed, then its new_part_name is added to /parts, + /// but we are going to remove it from /parts and add to queue again. + Coordination::Stat is_lost_stat; + String is_lost_value = zookeeper->get(replica_path + "/is_lost", &is_lost_stat); + assert(is_lost_value == "0"); + ops.emplace_back(zkutil::makeSetRequest(replica_path + "/is_lost", is_lost_value, is_lost_stat.version)); + part_create_time = stat.ctime / 1000; removePartFromZooKeeper(part_name, ops, stat.numChildren > 0); } @@ -4348,7 +4532,8 @@ bool StorageReplicatedMergeTree::executeMetadataAlter(const StorageReplicatedMer zookeeper->multi(requests); { - auto lock = lockForAlter(RWLockImpl::NO_QUERY, getSettings()->lock_acquire_timeout_for_background_operations); + auto table_lock_holder = lockForShare(RWLockImpl::NO_QUERY, getSettings()->lock_acquire_timeout_for_background_operations); + auto alter_lock_holder = lockForAlter(getSettings()->lock_acquire_timeout_for_background_operations); LOG_INFO(log, "Metadata changed in ZooKeeper. Applying changes locally."); auto metadata_diff = ReplicatedMergeTreeTableMetadata(*this, getInMemoryMetadataPtr()).checkAndFindDiff(metadata_from_entry); @@ -4420,7 +4605,7 @@ PartitionBlockNumbersHolder StorageReplicatedMergeTree::allocateBlockNumbersInAf void StorageReplicatedMergeTree::alter( - const AlterCommands & commands, ContextPtr query_context, TableLockHolder & table_lock_holder) + const AlterCommands & commands, ContextPtr query_context, AlterLockHolder & table_lock_holder) { assertNotReadonly(); @@ -4625,7 +4810,7 @@ void StorageReplicatedMergeTree::alter( } } - table_lock_holder.reset(); + table_lock_holder.unlock(); LOG_DEBUG(log, "Updated shared metadata nodes in ZooKeeper. Waiting for replicas to apply changes."); waitForLogEntryToBeProcessedIfNecessary(*alter_entry, query_context, "Some replicas doesn't finish metadata alter: "); @@ -4640,7 +4825,7 @@ void StorageReplicatedMergeTree::alter( /// If new version returns ordinary name, else returns part name containing the first and last month of the month /// NOTE: use it in pair with getFakePartCoveringAllPartsInPartition(...) -static String getPartNamePossiblyFake(MergeTreeDataFormatVersion format_version, const MergeTreePartInfo & part_info) +String getPartNamePossiblyFake(MergeTreeDataFormatVersion format_version, const MergeTreePartInfo & part_info) { if (format_version < MERGE_TREE_DATA_MIN_FORMAT_VERSION_WITH_CUSTOM_PARTITIONING) { @@ -5076,9 +5261,9 @@ bool StorageReplicatedMergeTree::tryWaitForReplicaToProcessLogEntry( /// Don't recheck ZooKeeper too often constexpr auto event_wait_timeout_ms = 3000; - if (!startsWith(entry.znode_name, "log-")) - throw Exception("Logical error: unexpected name of log node: " + entry.znode_name, ErrorCodes::LOGICAL_ERROR); + LOG_DEBUG(log, "Waiting for {} to process log entry", replica); + if (startsWith(entry.znode_name, "log-")) { /// Take the number from the node name `log-xxxxxxxxxx`. UInt64 log_index = parse(entry.znode_name.substr(entry.znode_name.size() - 10)); @@ -5088,7 +5273,7 @@ bool StorageReplicatedMergeTree::tryWaitForReplicaToProcessLogEntry( /// Let's wait until entry gets into the replica queue. bool pulled_to_queue = false; - while (!stop_waiting()) + do { zkutil::EventPtr event = std::make_shared(); @@ -5103,14 +5288,82 @@ bool StorageReplicatedMergeTree::tryWaitForReplicaToProcessLogEntry( /// So log_pointer node will exist, but we will never update it because all background threads already stopped. /// It can lead to query hung because table drop query can wait for some query (alter, optimize, etc) which called this method, /// but the query will never finish because the drop already shut down the table. - event->tryWait(event_wait_timeout_ms); - } + if (!stop_waiting()) + event->tryWait(event_wait_timeout_ms); + } while (!stop_waiting()); if (!pulled_to_queue) return false; - } - LOG_DEBUG(log, "Looking for node corresponding to {} in {} queue", log_node_name, replica); + LOG_DEBUG(log, "Looking for node corresponding to {} in {} queue", log_node_name, replica); + } + else if (!entry.log_entry_id.empty()) + { + /// First pass, check the table log. + /// If found in the log, wait for replica to fetch it to the queue. + /// If not found in the log, it is already in the queue. + LOG_DEBUG(log, "Looking for log entry with id `{}` in the log", entry.log_entry_id); + + String log_pointer = getZooKeeper()->get(fs::path(table_zookeeper_path) / "replicas" / replica / "log_pointer"); + + Strings log_entries = getZooKeeper()->getChildren(fs::path(table_zookeeper_path) / "log"); + UInt64 log_index = 0; + bool found = false; + + for (const String & log_entry_name : log_entries) + { + log_index = parse(log_entry_name.substr(log_entry_name.size() - 10)); + + if (!log_pointer.empty() && log_index < parse(log_pointer)) + continue; + + String log_entry_str; + Coordination::Stat log_entry_stat; + bool exists = getZooKeeper()->tryGet(fs::path(table_zookeeper_path) / "log" / log_entry_name, log_entry_str, &log_entry_stat); + ReplicatedMergeTreeLogEntryData log_entry = *ReplicatedMergeTreeLogEntry::parse(log_entry_str, log_entry_stat); + if (exists && entry.log_entry_id == log_entry.log_entry_id) + { + LOG_DEBUG(log, "Found log entry with id `{}` in the log", entry.log_entry_id); + + found = true; + log_node_name = log_entry_name; + break; + } + } + + if (found) + { + LOG_DEBUG(log, "Waiting for {} to pull {} to queue", replica, log_node_name); + + /// Let's wait until entry gets into the replica queue. + bool pulled_to_queue = false; + do + { + zkutil::EventPtr event = std::make_shared(); + + log_pointer = getZooKeeper()->get(fs::path(table_zookeeper_path) / "replicas" / replica / "log_pointer", nullptr, event); + if (!log_pointer.empty() && parse(log_pointer) > log_index) + { + pulled_to_queue = true; + break; + } + + /// Wait with timeout because we can be already shut down, but not dropped. + /// So log_pointer node will exist, but we will never update it because all background threads already stopped. + /// It can lead to query hung because table drop query can wait for some query (alter, optimize, etc) which called this method, + /// but the query will never finish because the drop already shut down the table. + if (!stop_waiting()) + event->tryWait(event_wait_timeout_ms); + } while (!stop_waiting()); + + if (!pulled_to_queue) + return false; + } + } + else + { + throw Exception("Logical error: unexpected name of log node: " + entry.znode_name, ErrorCodes::LOGICAL_ERROR); + } /** Second - find the corresponding entry in the queue of the specified replica. * Its number may not match the `log` node. Therefore, we search by comparing the content. @@ -5122,12 +5375,25 @@ bool StorageReplicatedMergeTree::tryWaitForReplicaToProcessLogEntry( for (const String & entry_name : queue_entries) { String queue_entry_str; - bool exists = getZooKeeper()->tryGet(fs::path(table_zookeeper_path) / "replicas" / replica / "queue" / entry_name, queue_entry_str); + Coordination::Stat queue_entry_stat; + bool exists = getZooKeeper()->tryGet(fs::path(table_zookeeper_path) / "replicas" / replica / "queue" / entry_name, queue_entry_str, &queue_entry_stat); if (exists && queue_entry_str == entry_str) { queue_entry_to_wait_for = entry_name; break; } + else if (!entry.log_entry_id.empty()) + { + /// Check if the id matches rather than just contents. This entry + /// might have been written by different ClickHouse versions and + /// it is hard to guarantee same text representation. + ReplicatedMergeTreeLogEntryData queue_entry = *ReplicatedMergeTreeLogEntry::parse(queue_entry_str, queue_entry_stat); + if (entry.log_entry_id == queue_entry.log_entry_id) + { + queue_entry_to_wait_for = entry_name; + break; + } + } } /// While looking for the record, it has already been executed and deleted. @@ -5336,7 +5602,7 @@ void StorageReplicatedMergeTree::fetchPartition( info.table_id.uuid = UUIDHelpers::Nil; auto expand_from = query_context->getMacros()->expand(from_, info); String auxiliary_zookeeper_name = extractZooKeeperName(expand_from); - String from = extractZooKeeperPath(expand_from); + String from = extractZooKeeperPath(expand_from, /* check_starts_with_slash */ true); if (from.empty()) throw Exception("ZooKeeper path should not be empty", ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); @@ -5995,12 +6261,12 @@ void StorageReplicatedMergeTree::replacePartitionFrom( MutableDataPartsVector dst_parts; Strings block_id_paths; Strings part_checksums; + auto zookeeper = getZooKeeper(); std::vector ephemeral_locks; LOG_DEBUG(log, "Cloning {} parts", src_all_parts.size()); static const String TMP_PREFIX = "tmp_replace_from_"; - auto zookeeper = getZooKeeper(); String alter_partition_version_path = zookeeper_path + "/alter_partition_version"; Coordination::Stat alter_partition_version_stat; @@ -6401,7 +6667,7 @@ void StorageReplicatedMergeTree::movePartitionToShard( if (!move_part) throw Exception("MOVE PARTITION TO SHARD is not supported, use MOVE PART instead", ErrorCodes::NOT_IMPLEMENTED); - if (normalizeZooKeeperPath(zookeeper_path) == normalizeZooKeeperPath(to)) + if (normalizeZooKeeperPath(zookeeper_path, /* check_starts_with_slash */ true) == normalizeZooKeeperPath(to, /* check_starts_with_slash */ true)) throw Exception("Source and destination are the same", ErrorCodes::BAD_ARGUMENTS); auto zookeeper = getZooKeeper(); @@ -6458,6 +6724,7 @@ void StorageReplicatedMergeTree::movePartitionToShard( dst_pins.part_uuids.insert(part->uuid); PartMovesBetweenShardsOrchestrator::Entry part_move_entry; + part_move_entry.state = PartMovesBetweenShardsOrchestrator::EntryState::SYNC_SOURCE; part_move_entry.create_time = std::time(nullptr); part_move_entry.update_time = part_move_entry.create_time; part_move_entry.task_uuid = UUIDHelpers::generateV4(); @@ -6481,10 +6748,13 @@ void StorageReplicatedMergeTree::movePartitionToShard( String task_znode_path = dynamic_cast(*responses.back()).path_created; LOG_DEBUG(log, "Created task for part movement between shards at " + task_znode_path); - /// Force refresh local state. This will make the task immediately visible in `system.part_moves_between_shards` table. - part_moves_between_shards_orchestrator.fetchStateFromZK(); + /// TODO(nv): Nice to have support for `replication_alter_partitions_sync`. + /// For now use the system.part_moves_between_shards table for status. +} - // TODO: Add support for `replication_alter_partitions_sync`. +CancellationCode StorageReplicatedMergeTree::killPartMoveToShard(const UUID & task_uuid) +{ + return part_moves_between_shards_orchestrator.killPartMoveToShard(task_uuid); } void StorageReplicatedMergeTree::getCommitPartOps( diff --git a/src/Storages/StorageReplicatedMergeTree.h b/src/Storages/StorageReplicatedMergeTree.h index bc03dbb45ae..65daf82a633 100644 --- a/src/Storages/StorageReplicatedMergeTree.h +++ b/src/Storages/StorageReplicatedMergeTree.h @@ -129,7 +129,7 @@ public: const Names & deduplicate_by_columns, ContextPtr query_context) override; - void alter(const AlterCommands & commands, ContextPtr query_context, TableLockHolder & table_lock_holder) override; + void alter(const AlterCommands & commands, ContextPtr query_context, AlterLockHolder & table_lock_holder) override; void mutate(const MutationCommands & commands, ContextPtr context) override; void waitMutation(const String & znode_name, size_t mutations_sync) const; @@ -682,6 +682,7 @@ private: void replacePartitionFrom(const StoragePtr & source_table, const ASTPtr & partition, bool replace, ContextPtr query_context) override; void movePartitionToTable(const StoragePtr & dest_table, const ASTPtr & partition, ContextPtr query_context) override; void movePartitionToShard(const ASTPtr & partition, bool move_part, const String & to, ContextPtr query_context) override; + CancellationCode killPartMoveToShard(const UUID & task_uuid) override; void fetchPartition( const ASTPtr & partition, const StorageMetadataPtr & metadata_snapshot, @@ -745,6 +746,8 @@ protected: bool allow_renaming_); }; +String getPartNamePossiblyFake(MergeTreeDataFormatVersion format_version, const MergeTreePartInfo & part_info); + /** There are three places for each part, where it should be * 1. In the RAM, data_parts, all_data_parts. diff --git a/src/Storages/StorageS3.cpp b/src/Storages/StorageS3.cpp index 8cbec46d0e0..5d8645b677d 100644 --- a/src/Storages/StorageS3.cpp +++ b/src/Storages/StorageS3.cpp @@ -234,7 +234,7 @@ bool StorageS3Source::initialize() file_path = fs::path(bucket) / current_key; read_buf = wrapReadBufferWithCompressionMethod( - std::make_unique(client, bucket, current_key, max_single_read_retries, DBMS_DEFAULT_BUFFER_SIZE), + std::make_unique(client, bucket, current_key, max_single_read_retries, getContext()->getReadSettings()), chooseCompressionMethod(current_key, compression_hint)); auto input_format = getContext()->getInputFormat(format, *read_buf, sample_block, max_block_size, format_settings); QueryPipelineBuilder builder; @@ -750,9 +750,9 @@ StorageS3Configuration StorageS3::getConfiguration(ASTs & engine_args, ContextPt for (const auto & [arg_name, arg_value] : storage_specific_args) { if (arg_name == "access_key_id") - configuration.access_key_id = arg_value.safeGet(); + configuration.access_key_id = arg_value->as()->value.safeGet(); else if (arg_name == "secret_access_key") - configuration.secret_access_key = arg_value.safeGet(); + configuration.secret_access_key = arg_value->as()->value.safeGet(); else throw Exception(ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH, "Unknown key-value argument `{}` for StorageS3, expected: url, [access_key_id, secret_access_key], name of used format and [compression_method].", diff --git a/src/Storages/StorageS3Cluster.cpp b/src/Storages/StorageS3Cluster.cpp index 9d05235552c..f49fd35044d 100644 --- a/src/Storages/StorageS3Cluster.cpp +++ b/src/Storages/StorageS3Cluster.cpp @@ -1,8 +1,6 @@ #include "Storages/StorageS3Cluster.h" -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 diff --git a/src/Storages/StorageS3Cluster.h b/src/Storages/StorageS3Cluster.h index b9ce0a15dfa..d1e02c5a730 100644 --- a/src/Storages/StorageS3Cluster.h +++ b/src/Storages/StorageS3Cluster.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 diff --git a/src/Storages/StorageSQLite.h b/src/Storages/StorageSQLite.h index 47ed40bef75..dcc17322a1a 100644 --- a/src/Storages/StorageSQLite.h +++ b/src/Storages/StorageSQLite.h @@ -1,14 +1,12 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_SQLITE #include #include -#include // Y_IGNORE +#include namespace Poco { diff --git a/src/Storages/StorageStripeLog.cpp b/src/Storages/StorageStripeLog.cpp index 50113c391cc..92664a29767 100644 --- a/src/Storages/StorageStripeLog.cpp +++ b/src/Storages/StorageStripeLog.cpp @@ -9,10 +9,12 @@ #include #include +#include #include #include #include #include +#include #include #include @@ -33,6 +35,13 @@ #include #include +#include +#include +#include +#include + +#include + #include @@ -44,14 +53,17 @@ namespace ErrorCodes extern const int NUMBER_OF_ARGUMENTS_DOESNT_MATCH; extern const int INCORRECT_FILE_NAME; extern const int TIMEOUT_EXCEEDED; + extern const int NOT_IMPLEMENTED; } +/// NOTE: The lock `StorageStripeLog::rwlock` is NOT kept locked while reading, +/// because we read ranges of data that do not change. class StripeLogSource final : public SourceWithProgress { public: static Block getHeader( - StorageStripeLog & storage, + const StorageStripeLog & storage, const StorageMetadataPtr & metadata_snapshot, const Names & column_names, IndexForNativeFormat::Blocks::const_iterator index_begin, @@ -74,21 +86,22 @@ public: } StripeLogSource( - StorageStripeLog & storage_, + const StorageStripeLog & storage_, const StorageMetadataPtr & metadata_snapshot_, const Names & column_names, ReadSettings read_settings_, - std::shared_ptr & index_, + std::shared_ptr indices_, IndexForNativeFormat::Blocks::const_iterator index_begin_, - IndexForNativeFormat::Blocks::const_iterator index_end_) - : SourceWithProgress( - getHeader(storage_, metadata_snapshot_, column_names, index_begin_, index_end_)) + IndexForNativeFormat::Blocks::const_iterator index_end_, + size_t file_size_) + : SourceWithProgress(getHeader(storage_, metadata_snapshot_, column_names, index_begin_, index_end_)) , storage(storage_) , metadata_snapshot(metadata_snapshot_) , read_settings(std::move(read_settings_)) - , index(index_) + , indices(indices_) , index_begin(index_begin_) , index_end(index_end_) + , file_size(file_size_) { } @@ -109,7 +122,7 @@ protected: { block_in.reset(); data_in.reset(); - index.reset(); + indices.reset(); } } @@ -117,13 +130,15 @@ protected: } private: - StorageStripeLog & storage; + const StorageStripeLog & storage; StorageMetadataPtr metadata_snapshot; ReadSettings read_settings; - std::shared_ptr index; + std::shared_ptr indices; IndexForNativeFormat::Blocks::const_iterator index_begin; IndexForNativeFormat::Blocks::const_iterator index_end; + size_t file_size; + Block header; /** optional - to create objects only on first reading @@ -141,40 +156,40 @@ private: started = true; String data_file_path = storage.table_path + "data.bin"; - data_in.emplace(storage.disk->readFile(data_file_path, read_settings.adjustBufferSize(storage.disk->getFileSize(data_file_path)))); + data_in.emplace(storage.disk->readFile(data_file_path, read_settings.adjustBufferSize(file_size))); block_in.emplace(*data_in, 0, index_begin, index_end); } } }; +/// NOTE: The lock `StorageStripeLog::rwlock` is kept locked in exclusive mode while writing. class StripeLogSink final : public SinkToStorage { public: + using WriteLock = std::unique_lock; + explicit StripeLogSink( - StorageStripeLog & storage_, const StorageMetadataPtr & metadata_snapshot_, std::unique_lock && lock_) + StorageStripeLog & storage_, const StorageMetadataPtr & metadata_snapshot_, WriteLock && lock_) : SinkToStorage(metadata_snapshot_->getSampleBlock()) , storage(storage_) , metadata_snapshot(metadata_snapshot_) , lock(std::move(lock_)) - , data_out_file(storage.table_path + "data.bin") - , data_out_compressed(storage.disk->writeFile(data_out_file, DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Append)) + , data_out_compressed(storage.disk->writeFile(storage.data_file_path, DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Append)) , data_out(std::make_unique( - *data_out_compressed, CompressionCodecFactory::instance().getDefaultCodec(), storage.max_compress_block_size)) - , index_out_file(storage.table_path + "index.mrk") - , index_out_compressed(storage.disk->writeFile(index_out_file, DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Append)) - , index_out(std::make_unique(*index_out_compressed)) - , block_out(*data_out, 0, metadata_snapshot->getSampleBlock(), false, index_out.get(), storage.disk->getFileSize(data_out_file)) + *data_out_compressed, CompressionCodecFactory::instance().getDefaultCodec(), storage.max_compress_block_size)) { if (!lock) throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); - if (storage.file_checker.empty()) - { - storage.file_checker.setEmpty(storage.table_path + "data.bin"); - storage.file_checker.setEmpty(storage.table_path + "index.mrk"); - storage.file_checker.save(); - } + /// Ensure that indices are loaded because we're going to update them. + storage.loadIndices(lock); + + /// If there were no files, save zero file sizes to be able to rollback in case of error. + storage.saveFileSizes(lock); + + size_t initial_data_size = storage.file_checker.getFileSize(storage.data_file_path); + block_out = std::make_unique(*data_out, 0, metadata_snapshot->getSampleBlock(), false, &storage.indices, initial_data_size); } String getName() const override { return "StripeLogSink"; } @@ -186,12 +201,16 @@ public: if (!done) { /// Rollback partial writes. + + /// No more writing. data_out.reset(); data_out_compressed.reset(); - index_out.reset(); - index_out_compressed.reset(); + /// Truncate files to the older sizes. storage.file_checker.repair(); + + /// Remove excessive indices. + storage.removeUnsavedIndices(lock); } } catch (...) @@ -202,7 +221,7 @@ public: void consume(Chunk chunk) override { - block_out.write(getHeader().cloneWithColumns(chunk.detachColumns())); + block_out->write(getHeader().cloneWithColumns(chunk.detachColumns())); } void onFinish() override @@ -213,13 +232,12 @@ public: data_out->next(); data_out_compressed->next(); data_out_compressed->finalize(); - index_out->next(); - index_out_compressed->next(); - index_out_compressed->finalize(); - storage.file_checker.update(data_out_file); - storage.file_checker.update(index_out_file); - storage.file_checker.save(); + /// Save the new indices. + storage.saveIndices(lock); + + /// Save the new file sizes. + storage.saveFileSizes(lock); done = true; @@ -232,15 +250,11 @@ public: private: StorageStripeLog & storage; StorageMetadataPtr metadata_snapshot; - std::unique_lock lock; + WriteLock lock; - String data_out_file; std::unique_ptr data_out_compressed; std::unique_ptr data_out; - String index_out_file; - std::unique_ptr index_out_compressed; - std::unique_ptr index_out; - NativeWriter block_out; + std::unique_ptr block_out; bool done = false; }; @@ -258,8 +272,10 @@ StorageStripeLog::StorageStripeLog( : IStorage(table_id_) , disk(std::move(disk_)) , table_path(relative_path_) - , max_compress_block_size(max_compress_block_size_) + , data_file_path(table_path + "data.bin") + , index_file_path(table_path + "index.mrk") , file_checker(disk, table_path + "sizes.json") + , max_compress_block_size(max_compress_block_size_) , log(&Poco::Logger::get("StorageStripeLog")) { StorageInMemoryMetadata storage_metadata; @@ -271,6 +287,13 @@ StorageStripeLog::StorageStripeLog( if (relative_path_.empty()) throw Exception("Storage " + getName() + " requires data path", ErrorCodes::INCORRECT_FILE_NAME); + /// Ensure the file checker is initialized. + if (file_checker.empty()) + { + file_checker.setEmpty(data_file_path); + file_checker.setEmpty(index_file_path); + } + if (!attach) { /// create directories if they do not exist @@ -290,6 +313,9 @@ StorageStripeLog::StorageStripeLog( } +StorageStripeLog::~StorageStripeLog() = default; + + void StorageStripeLog::rename(const String & new_path_to_table_data, const StorageID & new_table_id) { assert(table_path != new_path_to_table_data); @@ -297,6 +323,8 @@ void StorageStripeLog::rename(const String & new_path_to_table_data, const Stora disk->moveDirectory(table_path, new_path_to_table_data); table_path = new_path_to_table_data; + data_file_path = table_path + "data.bin"; + index_file_path = table_path + "index.mrk"; file_checker.setPath(table_path + "sizes.json"); } renameInMemory(new_table_id); @@ -322,41 +350,39 @@ Pipe StorageStripeLog::read( const size_t /*max_block_size*/, unsigned num_streams) { - std::shared_lock lock(rwlock, getLockTimeout(context)); + metadata_snapshot->check(column_names, getVirtuals(), getStorageID()); + + auto lock_timeout = getLockTimeout(context); + loadIndices(lock_timeout); + + ReadLock lock{rwlock, lock_timeout}; if (!lock) throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); - metadata_snapshot->check(column_names, getVirtuals(), getStorageID()); - - NameSet column_names_set(column_names.begin(), column_names.end()); - - Pipes pipes; - - String index_file = table_path + "index.mrk"; - if (file_checker.empty() || !disk->exists(index_file)) - { + size_t data_file_size = file_checker.getFileSize(data_file_path); + if (!data_file_size) return Pipe(std::make_shared(metadata_snapshot->getSampleBlockForColumns(column_names, getVirtuals(), getStorageID()))); - } - ReadSettings read_settings = context->getReadSettings(); + auto indices_for_selected_columns + = std::make_shared(indices.extractIndexForColumns(NameSet{column_names.begin(), column_names.end()})); - CompressedReadBufferFromFile index_in(disk->readFile(index_file, read_settings.adjustBufferSize(4096))); - std::shared_ptr index{std::make_shared(index_in, column_names_set)}; - - size_t size = index->blocks.size(); + size_t size = indices_for_selected_columns->blocks.size(); if (num_streams > size) num_streams = size; + ReadSettings read_settings = context->getReadSettings(); + Pipes pipes; + for (size_t stream = 0; stream < num_streams; ++stream) { - IndexForNativeFormat::Blocks::const_iterator begin = index->blocks.begin(); - IndexForNativeFormat::Blocks::const_iterator end = index->blocks.begin(); + IndexForNativeFormat::Blocks::const_iterator begin = indices_for_selected_columns->blocks.begin(); + IndexForNativeFormat::Blocks::const_iterator end = indices_for_selected_columns->blocks.begin(); std::advance(begin, stream * size / num_streams); std::advance(end, (stream + 1) * size / num_streams); pipes.emplace_back(std::make_shared( - *this, metadata_snapshot, column_names, read_settings, index, begin, end)); + *this, metadata_snapshot, column_names, read_settings, indices_for_selected_columns, begin, end, data_file_size)); } /// We do not keep read lock directly at the time of reading, because we read ranges of data that do not change. @@ -367,7 +393,7 @@ Pipe StorageStripeLog::read( SinkToStoragePtr StorageStripeLog::write(const ASTPtr & /*query*/, const StorageMetadataPtr & metadata_snapshot, ContextPtr context) { - std::unique_lock lock(rwlock, getLockTimeout(context)); + WriteLock lock{rwlock, getLockTimeout(context)}; if (!lock) throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); @@ -377,17 +403,219 @@ SinkToStoragePtr StorageStripeLog::write(const ASTPtr & /*query*/, const Storage CheckResults StorageStripeLog::checkData(const ASTPtr & /* query */, ContextPtr context) { - std::shared_lock lock(rwlock, getLockTimeout(context)); + ReadLock lock{rwlock, getLockTimeout(context)}; if (!lock) throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); return file_checker.check(); } + void StorageStripeLog::truncate(const ASTPtr &, const StorageMetadataPtr &, ContextPtr, TableExclusiveLockHolder &) { disk->clearDirectory(table_path); - file_checker = FileChecker{disk, table_path + "sizes.json"}; + + indices.clear(); + file_checker.setEmpty(data_file_path); + file_checker.setEmpty(index_file_path); + + indices_loaded = true; + num_indices_saved = 0; +} + + +void StorageStripeLog::loadIndices(std::chrono::seconds lock_timeout) +{ + if (indices_loaded) + return; + + /// We load indices with an exclusive lock (i.e. the write lock) because we don't want + /// a data race between two threads trying to load indices simultaneously. + WriteLock lock{rwlock, lock_timeout}; + if (!lock) + throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); + + loadIndices(lock); +} + + +void StorageStripeLog::loadIndices(const WriteLock & /* already locked exclusively */) +{ + if (indices_loaded) + return; + + if (disk->exists(index_file_path)) + { + CompressedReadBufferFromFile index_in(disk->readFile(index_file_path, ReadSettings{}.adjustBufferSize(4096))); + indices.read(index_in); + } + + indices_loaded = true; + num_indices_saved = indices.blocks.size(); +} + + +void StorageStripeLog::saveIndices(const WriteLock & /* already locked for writing */) +{ + size_t num_indices = indices.blocks.size(); + if (num_indices_saved == num_indices) + return; + + size_t start = num_indices_saved; + auto index_out_compressed = disk->writeFile(index_file_path, DBMS_DEFAULT_BUFFER_SIZE, WriteMode::Append); + auto index_out = std::make_unique(*index_out_compressed); + + for (size_t i = start; i != num_indices; ++i) + indices.blocks[i].write(*index_out); + + index_out->next(); + index_out_compressed->next(); + index_out_compressed->finalize(); + + num_indices_saved = num_indices; +} + + +void StorageStripeLog::removeUnsavedIndices(const WriteLock & /* already locked for writing */) +{ + if (indices.blocks.size() > num_indices_saved) + indices.blocks.resize(num_indices_saved); +} + + +void StorageStripeLog::saveFileSizes(const WriteLock & /* already locked for writing */) +{ + file_checker.update(data_file_path); + file_checker.update(index_file_path); + file_checker.save(); +} + + +BackupEntries StorageStripeLog::backup(const ASTs & partitions, ContextPtr context) +{ + if (!partitions.empty()) + throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Table engine {} doesn't support partitions", getName()); + + auto lock_timeout = getLockTimeout(context); + loadIndices(lock_timeout); + + ReadLock lock{rwlock, lock_timeout}; + if (!lock) + throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); + + if (!file_checker.getFileSize(data_file_path)) + return {}; + + auto temp_dir_owner = std::make_shared(disk, "tmp/backup_"); + auto temp_dir = temp_dir_owner->getPath(); + disk->createDirectories(temp_dir); + + BackupEntries backup_entries; + + /// data.bin + { + /// We make a copy of the data file because it can be changed later in write() or in truncate(). + String data_file_name = fileName(data_file_path); + String temp_file_path = temp_dir + "/" + data_file_name; + disk->copy(data_file_path, disk, temp_file_path); + backup_entries.emplace_back( + data_file_name, + std::make_unique( + disk, temp_file_path, file_checker.getFileSize(data_file_path), std::nullopt, temp_dir_owner)); + } + + /// index.mrk + { + /// We make a copy of the data file because it can be changed later in write() or in truncate(). + String index_file_name = fileName(index_file_path); + String temp_file_path = temp_dir + "/" + index_file_name; + disk->copy(index_file_path, disk, temp_file_path); + backup_entries.emplace_back( + index_file_name, + std::make_unique( + disk, temp_file_path, file_checker.getFileSize(index_file_path), std::nullopt, temp_dir_owner)); + } + + /// sizes.json + String files_info_path = file_checker.getPath(); + backup_entries.emplace_back(fileName(files_info_path), std::make_unique(disk, files_info_path)); + + /// columns.txt + backup_entries.emplace_back( + "columns.txt", std::make_unique(getInMemoryMetadata().getColumns().getAllPhysical().toString())); + + /// count.txt + size_t num_rows = 0; + for (const auto & block : indices.blocks) + num_rows += block.num_rows; + backup_entries.emplace_back("count.txt", std::make_unique(toString(num_rows))); + + return backup_entries; +} + +RestoreDataTasks StorageStripeLog::restoreFromBackup(const BackupPtr & backup, const String & data_path_in_backup, const ASTs & partitions, ContextMutablePtr context) +{ + if (!partitions.empty()) + throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Table engine {} doesn't support partitions", getName()); + + auto restore_task = [this, backup, data_path_in_backup, context]() + { + WriteLock lock{rwlock, getLockTimeout(context)}; + if (!lock) + throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); + + /// Load the indices if not loaded yet. We have to do that now because we're going to update these indices. + loadIndices(lock); + + /// If there were no files, save zero file sizes to be able to rollback in case of error. + saveFileSizes(lock); + + try + { + /// Append the data file. + auto old_data_size = file_checker.getFileSize(data_file_path); + { + String file_path_in_backup = data_path_in_backup + fileName(data_file_path); + auto backup_entry = backup->read(file_path_in_backup); + auto in = backup_entry->getReadBuffer(); + auto out = disk->writeFile(data_file_path, max_compress_block_size, WriteMode::Append); + copyData(*in, *out); + } + + /// Append the index. + String index_path_in_backup = data_path_in_backup + fileName(index_file_path); + if (backup->exists(index_path_in_backup)) + { + IndexForNativeFormat extra_indices; + auto backup_entry = backup->read(index_path_in_backup); + auto index_in = backup_entry->getReadBuffer(); + CompressedReadBuffer index_compressed_in{*index_in}; + extra_indices.read(index_compressed_in); + + /// Adjust the offsets. + for (auto & block : extra_indices.blocks) + { + for (auto & column : block.columns) + column.location.offset_in_compressed_file += old_data_size; + } + + insertAtEnd(indices.blocks, std::move(extra_indices.blocks)); + } + + /// Finish writing. + saveIndices(lock); + saveFileSizes(lock); + } + catch (...) + { + /// Rollback partial writes. + file_checker.repair(); + removeUnsavedIndices(lock); + throw; + } + + }; + return {restore_task}; } diff --git a/src/Storages/StorageStripeLog.h b/src/Storages/StorageStripeLog.h index 6ca9552cd11..579e2f991e7 100644 --- a/src/Storages/StorageStripeLog.h +++ b/src/Storages/StorageStripeLog.h @@ -7,12 +7,15 @@ #include #include +#include #include #include namespace DB { +struct IndexForNativeFormat; + /** Implements a table engine that is suitable for small chunks of the log. * In doing so, stores all the columns in a single Native file, with a nearby index. */ @@ -23,6 +26,8 @@ class StorageStripeLog final : public shared_ptr_helper, publi friend struct shared_ptr_helper; public: + ~StorageStripeLog() override; + String getName() const override { return "StripeLog"; } Pipe read( @@ -45,6 +50,9 @@ public: void truncate(const ASTPtr &, const StorageMetadataPtr &, ContextPtr, TableExclusiveLockHolder&) override; + BackupEntries backup(const ASTs & partitions, ContextPtr context) override; + RestoreDataTasks restoreFromBackup(const BackupPtr & backup, const String & data_path_in_backup, const ASTs & partitions, ContextMutablePtr context) override; + protected: StorageStripeLog( DiskPtr disk_, @@ -57,19 +65,37 @@ protected: size_t max_compress_block_size_); private: - struct ColumnData - { - String data_file_path; - }; - using Files = std::map; /// file name -> column data + using ReadLock = std::shared_lock; + using WriteLock = std::unique_lock; - DiskPtr disk; + /// Reads the index file if it hasn't read yet. + /// It is done lazily, so that with a large number of tables, the server starts quickly. + void loadIndices(std::chrono::seconds lock_timeout); + void loadIndices(const WriteLock &); + + /// Saves the index file. + void saveIndices(const WriteLock &); + + /// Removes all unsaved indices. + void removeUnsavedIndices(const WriteLock &); + + /// Saves the sizes of the data and index files. + void saveFileSizes(const WriteLock &); + + const DiskPtr disk; String table_path; - size_t max_compress_block_size; - + String data_file_path; + String index_file_path; FileChecker file_checker; - std::shared_timed_mutex rwlock; + + IndexForNativeFormat indices; + std::atomic indices_loaded = false; + size_t num_indices_saved = 0; + + const size_t max_compress_block_size; + + mutable std::shared_timed_mutex rwlock; Poco::Logger * log; }; diff --git a/src/Storages/StorageTinyLog.cpp b/src/Storages/StorageTinyLog.cpp deleted file mode 100644 index 8657467226f..00000000000 --- a/src/Storages/StorageTinyLog.cpp +++ /dev/null @@ -1,594 +0,0 @@ -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include - -#include -#include -#include -#include -#include -#include "StorageLogSettings.h" - -#include -#include -#include - -#define DBMS_STORAGE_LOG_DATA_FILE_EXTENSION ".bin" - - -namespace DB -{ - -namespace ErrorCodes -{ - extern const int TIMEOUT_EXCEEDED; - extern const int DUPLICATE_COLUMN; - extern const int INCORRECT_FILE_NAME; - extern const int NUMBER_OF_ARGUMENTS_DOESNT_MATCH; -} - - -class TinyLogSource final : public SourceWithProgress -{ -public: - static Block getHeader(const NamesAndTypesList & columns) - { - Block res; - - for (const auto & name_type : columns) - res.insert({ name_type.type->createColumn(), name_type.type, name_type.name }); - - return res; - } - - TinyLogSource( - size_t block_size_, - const NamesAndTypesList & columns_, - StorageTinyLog & storage_, - ReadSettings read_settings_, - FileChecker::Map file_sizes_) - : SourceWithProgress(getHeader(columns_)) - , block_size(block_size_), columns(columns_), storage(storage_) - , read_settings(std::move(read_settings_)), file_sizes(std::move(file_sizes_)) - { - } - - String getName() const override { return "TinyLog"; } - -protected: - Chunk generate() override; - -private: - size_t block_size; - NamesAndTypesList columns; - StorageTinyLog & storage; - bool is_finished = false; - ReadSettings read_settings; - FileChecker::Map file_sizes; - - struct Stream - { - Stream(const DiskPtr & disk, const String & data_path, ReadSettings read_settings_, size_t file_size) - : plain(file_size - ? disk->readFile(data_path, read_settings_.adjustBufferSize(file_size)) - : std::make_unique(nullptr, 0)), - limited(std::make_unique(*plain, file_size, false)), - compressed(*limited) - { - } - - std::unique_ptr plain; - std::unique_ptr limited; - CompressedReadBuffer compressed; - }; - - using FileStreams = std::map>; - FileStreams streams; - - using DeserializeState = ISerialization::DeserializeBinaryBulkStatePtr; - using DeserializeStates = std::map; - DeserializeStates deserialize_states; - - void readData(const NameAndTypePair & name_and_type, ColumnPtr & column, UInt64 limit, ISerialization::SubstreamsCache & cache); -}; - - -Chunk TinyLogSource::generate() -{ - Block res; - - if (is_finished || file_sizes.empty() || (!streams.empty() && streams.begin()->second->compressed.eof())) - { - /** Close the files (before destroying the object). - * When many sources are created, but simultaneously reading only a few of them, - * buffers don't waste memory. - */ - is_finished = true; - streams.clear(); - return {}; - } - - std::unordered_map caches; - for (const auto & name_type : columns) - { - ColumnPtr column; - try - { - column = name_type.type->createColumn(); - readData(name_type, column, block_size, caches[name_type.getNameInStorage()]); - } - catch (Exception & e) - { - e.addMessage("while reading column " + name_type.name + " at " + fullPath(storage.disk, storage.table_path)); - throw; - } - - if (!column->empty()) - res.insert(ColumnWithTypeAndName(std::move(column), name_type.type, name_type.name)); - } - - if (!res || streams.begin()->second->compressed.eof()) - { - is_finished = true; - streams.clear(); - } - - return Chunk(res.getColumns(), res.rows()); -} - - -void TinyLogSource::readData(const NameAndTypePair & name_and_type, - ColumnPtr & column, UInt64 limit, ISerialization::SubstreamsCache & cache) -{ - ISerialization::DeserializeBinaryBulkSettings settings; /// TODO Use avg_value_size_hint. - const auto & [name, type] = name_and_type; - auto serialization = IDataType::getSerialization(name_and_type); - - settings.getter = [&] (const ISerialization::SubstreamPath & path) -> ReadBuffer * - { - if (cache.count(ISerialization::getSubcolumnNameForStream(path))) - return nullptr; - - String stream_name = ISerialization::getFileNameForStream(name_and_type, path); - auto & stream = streams[stream_name]; - if (!stream) - { - String file_path = storage.files[stream_name].data_file_path; - stream = std::make_unique( - storage.disk, file_path, read_settings, file_sizes[fileName(file_path)]); - } - - return &stream->compressed; - }; - - if (deserialize_states.count(name) == 0) - serialization->deserializeBinaryBulkStatePrefix(settings, deserialize_states[name]); - - serialization->deserializeBinaryBulkWithMultipleStreams(column, limit, settings, deserialize_states[name], &cache); -} - - -class TinyLogSink final : public SinkToStorage -{ -public: - explicit TinyLogSink( - StorageTinyLog & storage_, - const StorageMetadataPtr & metadata_snapshot_, - std::unique_lock && lock_) - : SinkToStorage(metadata_snapshot_->getSampleBlock()) - , storage(storage_), metadata_snapshot(metadata_snapshot_), lock(std::move(lock_)) - { - if (!lock) - throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); - - /// If there were no files, add info to rollback in case of error. - if (storage.file_checker.empty()) - { - for (const auto & file : storage.files) - storage.file_checker.setEmpty(file.second.data_file_path); - storage.file_checker.save(); - } - } - - ~TinyLogSink() override - { - try - { - if (!done) - { - /// Rollback partial writes. - LOG_WARNING(storage.log, "Rollback partial writes"); - streams.clear(); - storage.file_checker.repair(); - } - } - catch (...) - { - tryLogCurrentException(__PRETTY_FUNCTION__); - } - } - - String getName() const override { return "TinyLogSink"; } - - void consume(Chunk chunk) override; - void onFinish() override; - -private: - StorageTinyLog & storage; - StorageMetadataPtr metadata_snapshot; - std::unique_lock lock; - bool done = false; - - struct Stream - { - Stream(const DiskPtr & disk, const String & data_path, CompressionCodecPtr codec, size_t max_compress_block_size) : - plain(disk->writeFile(data_path, max_compress_block_size, WriteMode::Append)), - compressed(*plain, std::move(codec), max_compress_block_size) - { - } - - std::unique_ptr plain; - CompressedWriteBuffer compressed; - - void finalize() - { - compressed.next(); - plain->finalize(); - } - }; - - using FileStreams = std::map>; - FileStreams streams; - - using SerializeState = ISerialization::SerializeBinaryBulkStatePtr; - using SerializeStates = std::map; - SerializeStates serialize_states; - - using WrittenStreams = std::set; - - ISerialization::OutputStreamGetter createStreamGetter(const NameAndTypePair & column, WrittenStreams & written_streams); - void writeData(const NameAndTypePair & name_and_type, const IColumn & column, WrittenStreams & written_streams); -}; - - -ISerialization::OutputStreamGetter TinyLogSink::createStreamGetter( - const NameAndTypePair & column, - WrittenStreams & written_streams) -{ - return [&] (const ISerialization::SubstreamPath & path) -> WriteBuffer * - { - String stream_name = ISerialization::getFileNameForStream(column, path); - - if (!written_streams.insert(stream_name).second) - return nullptr; - - const auto & columns = metadata_snapshot->getColumns(); - if (!streams.count(stream_name)) - streams[stream_name] = std::make_unique( - storage.disk, - storage.files[stream_name].data_file_path, - columns.getCodecOrDefault(column.name), - storage.max_compress_block_size); - - return &streams[stream_name]->compressed; - }; -} - - -void TinyLogSink::writeData(const NameAndTypePair & name_and_type, const IColumn & column, WrittenStreams & written_streams) -{ - ISerialization::SerializeBinaryBulkSettings settings; - const auto & [name, type] = name_and_type; - auto serialization = type->getDefaultSerialization(); - - if (serialize_states.count(name) == 0) - { - /// Some stream getters may be called form `serializeBinaryBulkStatePrefix`. - /// Use different WrittenStreams set, or we get nullptr for them in `serializeBinaryBulkWithMultipleStreams` - WrittenStreams prefix_written_streams; - settings.getter = createStreamGetter(name_and_type, prefix_written_streams); - serialization->serializeBinaryBulkStatePrefix(settings, serialize_states[name]); - } - - settings.getter = createStreamGetter(name_and_type, written_streams); - serialization->serializeBinaryBulkWithMultipleStreams(column, 0, 0, settings, serialize_states[name]); -} - - -void TinyLogSink::onFinish() -{ - if (done) - return; - - /// If nothing was written - leave the table in initial state. - if (streams.empty()) - { - done = true; - return; - } - - WrittenStreams written_streams; - ISerialization::SerializeBinaryBulkSettings settings; - for (const auto & column : getHeader()) - { - auto it = serialize_states.find(column.name); - if (it != serialize_states.end()) - { - settings.getter = createStreamGetter(NameAndTypePair(column.name, column.type), written_streams); - auto serialization = column.type->getDefaultSerialization(); - serialization->serializeBinaryBulkStateSuffix(settings, it->second); - } - } - - /// Finish write. - for (auto & stream : streams) - stream.second->finalize(); - - Strings column_files; - for (auto & pair : streams) - column_files.push_back(storage.files[pair.first].data_file_path); - - streams.clear(); - done = true; - - for (const auto & file : column_files) - storage.file_checker.update(file); - storage.file_checker.save(); - - /// unlock should be done from the same thread as lock, and dtor may be - /// called from different thread, so it should be done here (at least in - /// case of no exceptions occurred) - lock.unlock(); -} - - -void TinyLogSink::consume(Chunk chunk) -{ - auto block = getHeader().cloneWithColumns(chunk.detachColumns()); - metadata_snapshot->check(block, true); - - /// The set of written offset columns so that you do not write shared columns for nested structures multiple times - WrittenStreams written_streams; - - for (size_t i = 0; i < block.columns(); ++i) - { - const ColumnWithTypeAndName & column = block.safeGetByPosition(i); - writeData(NameAndTypePair(column.name, column.type), *column.column, written_streams); - } -} - - -StorageTinyLog::StorageTinyLog( - DiskPtr disk_, - const String & relative_path_, - const StorageID & table_id_, - const ColumnsDescription & columns_, - const ConstraintsDescription & constraints_, - const String & comment, - bool attach, - size_t max_compress_block_size_) - : IStorage(table_id_) - , disk(std::move(disk_)) - , table_path(relative_path_) - , max_compress_block_size(max_compress_block_size_) - , file_checker(disk, table_path + "sizes.json") - , log(&Poco::Logger::get("StorageTinyLog")) -{ - StorageInMemoryMetadata storage_metadata; - storage_metadata.setColumns(columns_); - storage_metadata.setConstraints(constraints_); - storage_metadata.setComment(comment); - setInMemoryMetadata(storage_metadata); - - if (relative_path_.empty()) - throw Exception("Storage " + getName() + " requires data path", ErrorCodes::INCORRECT_FILE_NAME); - - if (!attach) - { - /// create directories if they do not exist - disk->createDirectories(table_path); - } - else - { - try - { - file_checker.repair(); - } - catch (...) - { - tryLogCurrentException(__PRETTY_FUNCTION__); - } - } - - for (const auto & col : storage_metadata.getColumns().getAllPhysical()) - addFiles(col); -} - - -void StorageTinyLog::addFiles(const NameAndTypePair & column) -{ - const auto & [name, type] = column; - if (files.end() != files.find(name)) - throw Exception("Duplicate column with name " + name + " in constructor of StorageTinyLog.", - ErrorCodes::DUPLICATE_COLUMN); - - ISerialization::StreamCallback stream_callback = [&] (const ISerialization::SubstreamPath & substream_path) - { - String stream_name = ISerialization::getFileNameForStream(column, substream_path); - if (!files.count(stream_name)) - { - ColumnData column_data; - files.insert(std::make_pair(stream_name, column_data)); - files[stream_name].data_file_path = table_path + stream_name + DBMS_STORAGE_LOG_DATA_FILE_EXTENSION; - } - }; - - auto serialization = type->getDefaultSerialization(); - serialization->enumerateStreams(stream_callback); -} - - -void StorageTinyLog::rename(const String & new_path_to_table_data, const StorageID & new_table_id) -{ - assert(table_path != new_path_to_table_data); - { - disk->moveDirectory(table_path, new_path_to_table_data); - - table_path = new_path_to_table_data; - file_checker.setPath(table_path + "sizes.json"); - - for (auto & file : files) - file.second.data_file_path = table_path + fileName(file.second.data_file_path); - } - renameInMemory(new_table_id); -} - - -static std::chrono::seconds getLockTimeout(ContextPtr context) -{ - const Settings & settings = context->getSettingsRef(); - Int64 lock_timeout = settings.lock_acquire_timeout.totalSeconds(); - if (settings.max_execution_time.totalSeconds() != 0 && settings.max_execution_time.totalSeconds() < lock_timeout) - lock_timeout = settings.max_execution_time.totalSeconds(); - return std::chrono::seconds{lock_timeout}; -} - - -Pipe StorageTinyLog::read( - const Names & column_names, - const StorageMetadataPtr & metadata_snapshot, - SelectQueryInfo & /*query_info*/, - ContextPtr context, - QueryProcessingStage::Enum /*processed_stage*/, - const size_t max_block_size, - const unsigned /*num_streams*/) -{ - metadata_snapshot->check(column_names, getVirtuals(), getStorageID()); - - auto all_columns = metadata_snapshot->getColumns().getByNames(ColumnsDescription::All, column_names, true); - - // When reading, we lock the entire storage, because we only have one file - // per column and can't modify it concurrently. - std::shared_lock lock{rwlock, getLockTimeout(context)}; - if (!lock) - throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); - - /// No need to hold lock while reading because we read fixed range of data that does not change while appending more data. - return Pipe(std::make_shared( - max_block_size, - Nested::convertToSubcolumns(all_columns), - *this, - context->getReadSettings(), - file_checker.getFileSizes())); -} - - -SinkToStoragePtr StorageTinyLog::write(const ASTPtr & /*query*/, const StorageMetadataPtr & metadata_snapshot, ContextPtr context) -{ - return std::make_shared(*this, metadata_snapshot, std::unique_lock{rwlock, getLockTimeout(context)}); -} - - -CheckResults StorageTinyLog::checkData(const ASTPtr & /* query */, ContextPtr context) -{ - std::shared_lock lock(rwlock, getLockTimeout(context)); - if (!lock) - throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); - - return file_checker.check(); -} - -IStorage::ColumnSizeByName StorageTinyLog::getColumnSizes() const -{ - std::shared_lock lock(rwlock, std::chrono::seconds(DBMS_DEFAULT_LOCK_ACQUIRE_TIMEOUT_SEC)); - if (!lock) - throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED); - - ColumnSizeByName column_sizes; - FileChecker::Map file_sizes = file_checker.getFileSizes(); - - for (const auto & column : getInMemoryMetadata().getColumns().getAllPhysical()) - { - ISerialization::StreamCallback stream_callback = [&, this] (const ISerialization::SubstreamPath & substream_path) - { - String stream_name = ISerialization::getFileNameForStream(column, substream_path); - ColumnSize & size = column_sizes[column.name]; - auto it = files.find(stream_name); - if (it != files.end()) - size.data_compressed += file_sizes[fileName(it->second.data_file_path)]; - }; - - auto serialization = column.type->getDefaultSerialization(); - serialization->enumerateStreams(stream_callback); - } - - return column_sizes; -} - -void StorageTinyLog::truncate( - const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, ContextPtr, TableExclusiveLockHolder &) -{ - disk->clearDirectory(table_path); - - files.clear(); - file_checker = FileChecker{disk, table_path + "sizes.json"}; - - for (const auto & column : metadata_snapshot->getColumns().getAllPhysical()) - addFiles(column); -} - - -void registerStorageTinyLog(StorageFactory & factory) -{ - StorageFactory::StorageFeatures features{ - .supports_settings = true - }; - - factory.registerStorage("TinyLog", [](const StorageFactory::Arguments & args) - { - if (!args.engine_args.empty()) - throw Exception( - "Engine " + args.engine_name + " doesn't support any arguments (" + toString(args.engine_args.size()) + " given)", - ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); - - String disk_name = getDiskName(*args.storage_def); - DiskPtr disk = args.getContext()->getDisk(disk_name); - - return StorageTinyLog::create( - disk, - args.relative_data_path, - args.table_id, - args.columns, - args.constraints, - args.comment, - args.attach, - args.getContext()->getSettings().max_compress_block_size); - }, features); -} - -} diff --git a/src/Storages/StorageTinyLog.h b/src/Storages/StorageTinyLog.h deleted file mode 100644 index b25b79afe1f..00000000000 --- a/src/Storages/StorageTinyLog.h +++ /dev/null @@ -1,82 +0,0 @@ -#pragma once - -#include - -#include - -#include -#include -#include -#include - - -namespace DB -{ -/** Implements a table engine that is suitable for small chunks of the log. - * It differs from StorageLog in the absence of mark files. - */ -class StorageTinyLog final : public shared_ptr_helper, public IStorage -{ - friend class TinyLogSource; - friend class TinyLogSink; - friend struct shared_ptr_helper; - -public: - String getName() const override { return "TinyLog"; } - - Pipe read( - const Names & column_names, - const StorageMetadataPtr & /*metadata_snapshot*/, - SelectQueryInfo & query_info, - ContextPtr context, - QueryProcessingStage::Enum processed_stage, - size_t max_block_size, - unsigned num_streams) override; - - SinkToStoragePtr write(const ASTPtr & query, const StorageMetadataPtr & /*metadata_snapshot*/, ContextPtr context) override; - - void rename(const String & new_path_to_table_data, const StorageID & new_table_id) override; - - CheckResults checkData(const ASTPtr & /* query */, ContextPtr /* context */) override; - - bool storesDataOnDisk() const override { return true; } - Strings getDataPaths() const override { return {DB::fullPath(disk, table_path)}; } - bool supportsSubcolumns() const override { return true; } - - void truncate(const ASTPtr &, const StorageMetadataPtr & metadata_snapshot, ContextPtr, TableExclusiveLockHolder &) override; - - ColumnSizeByName getColumnSizes() const override; -protected: - StorageTinyLog( - DiskPtr disk_, - const String & relative_path_, - const StorageID & table_id_, - const ColumnsDescription & columns_, - const ConstraintsDescription & constraints_, - const String & comment, - bool attach, - size_t max_compress_block_size_); - -private: - struct ColumnData - { - String data_file_path; - }; - using Files = std::map; /// file name -> column data - - DiskPtr disk; - String table_path; - - size_t max_compress_block_size; - - Files files; - - FileChecker file_checker; - mutable std::shared_timed_mutex rwlock; - - Poco::Logger * log; - - void addFiles(const NameAndTypePair & column); -}; - -} diff --git a/src/Storages/StorageURL.cpp b/src/Storages/StorageURL.cpp index 174ee58ee42..4d8f1d8c492 100644 --- a/src/Storages/StorageURL.cpp +++ b/src/Storages/StorageURL.cpp @@ -124,6 +124,7 @@ namespace context->getSettingsRef().max_http_get_redirects, Poco::Net::HTTPBasicCredentials{}, DBMS_DEFAULT_BUFFER_SIZE, + context->getReadSettings(), headers, context->getRemoteHostFilter()), chooseCompressionMethod(request_uri.getPath(), compression_method)); diff --git a/src/Storages/System/IStorageSystemOneBlock.h b/src/Storages/System/IStorageSystemOneBlock.h index 6897b4a3a79..9b51bd73903 100644 --- a/src/Storages/System/IStorageSystemOneBlock.h +++ b/src/Storages/System/IStorageSystemOneBlock.h @@ -31,12 +31,7 @@ class IStorageSystemOneBlock : public IStorage protected: virtual void fillData(MutableColumns & res_columns, ContextPtr context, const SelectQueryInfo & query_info) const = 0; - public: -#if defined(ARCADIA_BUILD) - IStorageSystemOneBlock(const String & name_) : IStorageSystemOneBlock(StorageID{"system", name_}) {} -#endif - IStorageSystemOneBlock(const StorageID & table_id_) : IStorage(table_id_) { StorageInMemoryMetadata metadata_; diff --git a/src/Storages/System/InformationSchema/columns.sql b/src/Storages/System/InformationSchema/columns.sql index 1b71ea58f57..80cf2f911be 100644 --- a/src/Storages/System/InformationSchema/columns.sql +++ b/src/Storages/System/InformationSchema/columns.sql @@ -23,6 +23,8 @@ ATTACH VIEW columns `domain_catalog` Nullable(String), `domain_schema` Nullable(String), `domain_name` Nullable(String), + `column_comment` String, + `column_type` String, `TABLE_CATALOG` String ALIAS table_catalog, `TABLE_SCHEMA` String ALIAS table_schema, `TABLE_NAME` String ALIAS table_name, @@ -45,7 +47,9 @@ ATTACH VIEW columns `COLLATION_NAME` Nullable(String) ALIAS collation_name, `DOMAIN_CATALOG` Nullable(String) ALIAS domain_catalog, `DOMAIN_SCHEMA` Nullable(String) ALIAS domain_schema, - `DOMAIN_NAME` Nullable(String) ALIAS domain_name + `DOMAIN_NAME` Nullable(String) ALIAS domain_name, + `COLUMN_COMMENT` String ALIAS column_comment, + `COLUMN_TYPE` String ALIAS column_type ) AS SELECT database AS table_catalog, @@ -70,5 +74,7 @@ SELECT NULL AS collation_name, NULL AS domain_catalog, NULL AS domain_schema, - NULL AS domain_name + NULL AS domain_name, + comment AS column_comment, + type AS column_type FROM system.columns diff --git a/src/Storages/System/StorageSystemAsynchronousMetrics.h b/src/Storages/System/StorageSystemAsynchronousMetrics.h index de8b9b93378..2efe008ef3a 100644 --- a/src/Storages/System/StorageSystemAsynchronousMetrics.h +++ b/src/Storages/System/StorageSystemAsynchronousMetrics.h @@ -25,12 +25,6 @@ private: const AsynchronousMetrics & async_metrics; protected: -#if defined(ARCADIA_BUILD) - StorageSystemAsynchronousMetrics(const String & name_, const AsynchronousMetrics & async_metrics_) - : StorageSystemAsynchronousMetrics(StorageID{"system", name_}, async_metrics_) - { - } -#endif StorageSystemAsynchronousMetrics(const StorageID & table_id_, const AsynchronousMetrics & async_metrics_); void fillData(MutableColumns & res_columns, ContextPtr context, const SelectQueryInfo & query_info) const override; diff --git a/src/Storages/System/StorageSystemBuildOptions.cpp b/src/Storages/System/StorageSystemBuildOptions.cpp index 01a60a0235c..83cd4b036da 100644 --- a/src/Storages/System/StorageSystemBuildOptions.cpp +++ b/src/Storages/System/StorageSystemBuildOptions.cpp @@ -18,15 +18,11 @@ NamesAndTypesList StorageSystemBuildOptions::getNamesAndTypes() void StorageSystemBuildOptions::fillData(MutableColumns & res_columns, ContextPtr, const SelectQueryInfo &) const { -#if !defined(ARCADIA_BUILD) for (auto * it = auto_config_build; *it; it += 2) { res_columns[0]->insert(it[0]); res_columns[1]->insert(it[1]); } -#else - UNUSED(res_columns); -#endif } } diff --git a/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in b/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in index 6bb97355151..e087475695c 100644 --- a/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in +++ b/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in @@ -50,6 +50,7 @@ const char * auto_config_build[] "USE_LDAP", "@USE_LDAP@", "TZDATA_VERSION", "@TZDATA_VERSION@", "USE_KRB5", "@USE_KRB5@", + "USE_FILELOG", "@USE_FILELOG@", "USE_BZIP2", "@USE_BZIP2@", nullptr, nullptr diff --git a/src/Storages/System/StorageSystemContributors.generated.cpp b/src/Storages/System/StorageSystemContributors.generated.cpp index a097e08871d..c33fa6cad44 100644 --- a/src/Storages/System/StorageSystemContributors.generated.cpp +++ b/src/Storages/System/StorageSystemContributors.generated.cpp @@ -26,6 +26,7 @@ const char * auto_contributors[] { "Aleksandra (Ася)", "Aleksandr Karo", "Aleksandrov Vladimir", + "Aleksandr Shalimov", "alekseik1", "Aleksei Levushkin", "Aleksei Semiglazov", @@ -36,6 +37,7 @@ const char * auto_contributors[] { "Alexander Avdonkin", "Alexander Bezpiatov", "Alexander Burmak", + "Alexander Chashnikov", "Alexander Ermolaev", "Alexander Gololobov", "Alexander GQ Gerasiov", @@ -101,9 +103,11 @@ const char * auto_contributors[] { "ana-uvarova", "AnaUvarova", "Andr0901", + "andrc1901", "Andreas Hunkeler", "AndreevDm", "Andrei Bodrov", + "Andrei Ch", "Andrei Chulkov", "andrei-karpliuk", "Andrei Nekrashevich", @@ -127,6 +131,7 @@ const char * auto_contributors[] { "Anmol Arora", "Anna", "Anna Shakhova", + "anneji", "anneji-dev", "annvsh", "anrodigina", @@ -181,6 +186,7 @@ const char * auto_contributors[] { "BanyRule", "Baudouin Giard", "BayoNet", + "bbkas", "benamazing", "benbiti", "Benjamin Naecker", @@ -190,6 +196,7 @@ const char * auto_contributors[] { "bharatnc", "Big Elephant", "Bill", + "BiteTheDDDDt", "BlahGeek", "blazerer", "bluebirddm", @@ -220,6 +227,7 @@ const char * auto_contributors[] { "Chao Wang", "chasingegg", "chengy8934", + "chenjian", "chenqi", "chenxing-xc", "chenxing.xc", @@ -232,7 +240,9 @@ const char * auto_contributors[] { "Ciprian Hacman", "Clement Rodriguez", "Clément Rodriguez", + "ClickHouse Admin", "cn-ds", + "Cody Baker", "Colum", "comunodi", "Constantin S. Pan", @@ -343,6 +353,7 @@ const char * auto_contributors[] { "fastio", "favstovol", "FawnD2", + "Federico Ceratto", "FeehanG", "feihengye", "felixoid", @@ -372,6 +383,7 @@ const char * auto_contributors[] { "fuwhu", "Fu Zhe", "fuzhe1989", + "fuzzERot", "Gagan Arneja", "Gao Qiang", "g-arslan", @@ -407,6 +419,7 @@ const char * auto_contributors[] { "heng zhao", "hermano", "hexiaoting", + "hhell", "Hiroaki Nakamura", "hotid", "huangzhaowei", @@ -456,6 +469,7 @@ const char * auto_contributors[] { "Ivan Kush", "Ivan Kushnarenko", "Ivan Lezhankin", + "Ivan Milov", "Ivan Remen", "Ivan Starkov", "ivanzhukov", @@ -470,6 +484,7 @@ const char * auto_contributors[] { "jasine", "Jason", "Jason Keirstead", + "jasperzhu", "javartisan", "javi", "javi santana", @@ -483,6 +498,7 @@ const char * auto_contributors[] { "Jiang Tao", "jianmei zhang", "jkuklis", + "João Figueiredo", "Jochen Schalanda", "John", "John Hummel", @@ -492,9 +508,11 @@ const char * auto_contributors[] { "jyz0309", "Kang Liu", "Karl Pietrzak", + "karnevil13", "keenwolf", "Keiji Yoshida", "Ken Chen", + "Ken MacInnis", "Kevin Chiang", "Kevin Michel", "kevin wan", @@ -509,6 +527,7 @@ const char * auto_contributors[] { "KochetovNicolai", "kolsys", "Konstantin Grabar", + "Konstantin Ilchenko", "Konstantin Lebedev", "Konstantin Malanchev", "Konstantin Podshumok", @@ -529,6 +548,7 @@ const char * auto_contributors[] { "l1tsolaiki", "lalex", "Latysheva Alexandra", + "laurieliyang", "lehasm", "Léo Ercolanelli", "Leonardo Cecchi", @@ -539,6 +559,9 @@ const char * auto_contributors[] { "levushkin aleksej", "levysh", "Lewinma", + "lhuang0928", + "lhuang09287750", + "liang.huang", "liangqian", "libenwang", "lichengxiang", @@ -593,6 +616,7 @@ const char * auto_contributors[] { "mastertheknife", "Matthew Peveler", "Matwey V. Kornilov", + "Mátyás Jani", "Max", "Max Akhmedov", "Max Bruce", @@ -613,11 +637,13 @@ const char * auto_contributors[] { "maxkuzn", "maxulan", "Max Vetrov", + "MaxWk", "Mc.Spring", "mehanizm", "MeiK", "melin", "memo", + "Memo", "meo", "meoww-bot", "mergify[bot]", @@ -636,6 +662,7 @@ const char * auto_contributors[] { "Miguel Fernández", "miha-g", "Mihail Fandyushin", + "mikael", "Mikahil Nacharov", "Mike", "Mike F", @@ -658,6 +685,8 @@ const char * auto_contributors[] { "millb", "Misko Lee", "mnkonkova", + "mo-avatar", + "Mohamad Fadhil", "Mohammad Hossein Sekhavat", "morty", "moscas", @@ -698,6 +727,7 @@ const char * auto_contributors[] { "nikitamikhaylov", "Nikita Mikhaylov", "Nikita Orlov", + "Nikita Tikhomirov", "Nikita Vasilev", "Nikolai Kochetov", "Nikolai Sorokin", @@ -739,15 +769,18 @@ const char * auto_contributors[] { "Paramtamtam", "Patrick Zippenfenig", "Pavel", + "Pavel Cheremushkin", "Pavel Kartaviy", "Pavel Kartavyy", "Pavel Kovalenko", "Pavel Kruglov", "Pavel Litvinenko", + "Pavel Medvedev", "Pavel Patrin", "Pavel Yakunin", "Pavlo Bashynskiy", "Pawel Rog", + "pawelsz-rb", "pdv-ru", "Peng Jian", "Persiyanov Dmitriy Andreevich", @@ -770,6 +803,7 @@ const char * auto_contributors[] { "qianmoQ", "quid", "Quid37", + "quoctan132", "r1j1k", "Rafael David Tinoco", "rainbowsysu", @@ -789,6 +823,7 @@ const char * auto_contributors[] { "robot-clickhouse", "robot-metrika-test", "rodrigargar", + "Rohit Agarwal", "Romain Neutron", "roman", "Roman Bug", @@ -816,6 +851,7 @@ const char * auto_contributors[] { "Saulius Valatka", "sdk2", "Sean Haynes", + "Sébastien", "Sébastien Launay", "serebrserg", "Sergei Bocharov", @@ -840,10 +876,12 @@ const char * auto_contributors[] { "sev7e0", "SevaCode", "sevirov", + "Seyed Mehrshad Hosseini", "sfod", "shangshujie", "shedx", "Sherry Wang", + "Shoh Jahon", "Silviu Caragea", "Simeon Emanuilov", "Simon Liu", @@ -887,16 +925,23 @@ const char * auto_contributors[] { "Taleh Zaliyev", "Tangaev", "tao jiang", + "Tatiana", "Tatiana Kirillova", "tavplubix", "TCeason", + "Teja", + "Teja Srivastasa", "Tema Novikov", "templarzq", + "Tentoshka", "terrylin", "The-Alchemist", "Thomas Berdy", + "Thom O'Connor", + "tianzhou", "Tiaonmmn", "tiger.yan", + "Tigran Khudaverdyan", "tison", "TiunovNN", "Tobias Adamson", @@ -934,7 +979,9 @@ const char * auto_contributors[] { "Veloman Yunkan", "Veniamin Gvozdikov", "Veselkov Konstantin", + "vesslanjin", "vgocoder", + "Viachaslau Boben", "vic", "vicdashkov", "vicgao", @@ -950,6 +997,7 @@ const char * auto_contributors[] { "Vitaliy Zakaznikov", "Vitaly", "Vitaly Baranov", + "Vitaly Orlov", "Vitaly Samigullin", "Vitaly Stoyan", "vitstn", @@ -980,6 +1028,7 @@ const char * auto_contributors[] { "vzakaznikov", "wangchao", "Wang Fenjin", + "WangZengrui", "weeds085490", "Weiqing Xu", "William Shallum", @@ -994,6 +1043,7 @@ const char * auto_contributors[] { "Yangkuan Liu", "yangshuai", "Yatsishin Ilya", + "yeer", "Yegor Andreenko", "Yegor Levankov", "ygrek", @@ -1023,6 +1073,7 @@ const char * auto_contributors[] { "ywill3", "zamulla", "zhang2014", + "zhanglistar", "zhangshengyu", "zhangxiao018", "zhangxiao871", @@ -1051,6 +1102,7 @@ const char * auto_contributors[] { "Смитюх Вячеслав", "Сундуков Алексей", "万康", + "凌涛", "吴健", "小路", "张中南", @@ -1058,8 +1110,10 @@ const char * auto_contributors[] { "张风啸", "徐炘", "曲正鹏", + "木木夕120", "未来星___费", "极客青年", + "枢木", "董海镔", "谢磊", "贾顺名(Jarvis)", diff --git a/src/Storages/System/StorageSystemGrants.cpp b/src/Storages/System/StorageSystemGrants.cpp index 1ba5e6d96a4..42917033a28 100644 --- a/src/Storages/System/StorageSystemGrants.cpp +++ b/src/Storages/System/StorageSystemGrants.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/Storages/System/StorageSystemPartMovesBetweenShards.cpp b/src/Storages/System/StorageSystemPartMovesBetweenShards.cpp index 70bc473e241..c397392e9fb 100644 --- a/src/Storages/System/StorageSystemPartMovesBetweenShards.cpp +++ b/src/Storages/System/StorageSystemPartMovesBetweenShards.cpp @@ -30,10 +30,12 @@ NamesAndTypesList StorageSystemPartMovesBetweenShards::getNamesAndTypes() { "part_name", std::make_shared() }, { "part_uuid", std::make_shared() }, { "to_shard", std::make_shared() }, + { "dst_part_name", std::make_shared() }, /// Processing status of item. { "update_time", std::make_shared() }, { "state", std::make_shared() }, + { "rollback", std::make_shared() }, { "num_tries", std::make_shared() }, { "last_exception", std::make_shared() }, }; @@ -122,11 +124,13 @@ void StorageSystemPartMovesBetweenShards::fillData(MutableColumns & res_columns, res_columns[col_num++]->insert(entry.part_name); res_columns[col_num++]->insert(entry.part_uuid); res_columns[col_num++]->insert(entry.to_shard); + res_columns[col_num++]->insert(entry.dst_part_name); /// Processing status of item. res_columns[col_num++]->insert(entry.update_time); res_columns[col_num++]->insert(entry.state.toString()); - res_columns[col_num++]->insert(0); + res_columns[col_num++]->insert(entry.rollback); + res_columns[col_num++]->insert(entry.num_tries); res_columns[col_num++]->insert(entry.last_exception_msg); } } diff --git a/src/Storages/System/StorageSystemPrivileges.cpp b/src/Storages/System/StorageSystemPrivileges.cpp index ca369efe43a..ff3c6eecc6b 100644 --- a/src/Storages/System/StorageSystemPrivileges.cpp +++ b/src/Storages/System/StorageSystemPrivileges.cpp @@ -1,18 +1,18 @@ #include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include #include -#include -#include -#include -#include #include -#include -#include -#include -#include +#include namespace DB diff --git a/src/Storages/System/StorageSystemQuotaLimits.cpp b/src/Storages/System/StorageSystemQuotaLimits.cpp index 3b64f72d621..6d837018053 100644 --- a/src/Storages/System/StorageSystemQuotaLimits.cpp +++ b/src/Storages/System/StorageSystemQuotaLimits.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/Storages/System/StorageSystemQuotaUsage.cpp b/src/Storages/System/StorageSystemQuotaUsage.cpp index 6723037cf3b..2d2c5ec2864 100644 --- a/src/Storages/System/StorageSystemQuotaUsage.cpp +++ b/src/Storages/System/StorageSystemQuotaUsage.cpp @@ -9,7 +9,7 @@ #include #include #include -#include +#include #include diff --git a/src/Storages/System/StorageSystemQuotas.cpp b/src/Storages/System/StorageSystemQuotas.cpp index f5f57b48232..eaa2f79364b 100644 --- a/src/Storages/System/StorageSystemQuotas.cpp +++ b/src/Storages/System/StorageSystemQuotas.cpp @@ -1,17 +1,17 @@ #include +#include +#include +#include +#include +#include +#include #include #include #include #include #include -#include -#include -#include #include -#include -#include -#include -#include +#include #include diff --git a/src/Storages/System/StorageSystemQuotasUsage.cpp b/src/Storages/System/StorageSystemQuotasUsage.cpp index 363562bce19..98a77dde9f4 100644 --- a/src/Storages/System/StorageSystemQuotasUsage.cpp +++ b/src/Storages/System/StorageSystemQuotasUsage.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include diff --git a/src/Storages/System/StorageSystemRoles.cpp b/src/Storages/System/StorageSystemRoles.cpp index 42983670466..24a5b3ede4d 100644 --- a/src/Storages/System/StorageSystemRoles.cpp +++ b/src/Storages/System/StorageSystemRoles.cpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include diff --git a/src/Storages/System/StorageSystemRowPolicies.cpp b/src/Storages/System/StorageSystemRowPolicies.cpp index 3fa62bc784b..73323b13d79 100644 --- a/src/Storages/System/StorageSystemRowPolicies.cpp +++ b/src/Storages/System/StorageSystemRowPolicies.cpp @@ -1,18 +1,18 @@ #include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include #include -#include -#include -#include -#include #include -#include -#include -#include -#include +#include #include #include diff --git a/src/Storages/System/StorageSystemSettingsProfiles.cpp b/src/Storages/System/StorageSystemSettingsProfiles.cpp index 87847fb80bc..c81e9665d16 100644 --- a/src/Storages/System/StorageSystemSettingsProfiles.cpp +++ b/src/Storages/System/StorageSystemSettingsProfiles.cpp @@ -1,16 +1,16 @@ #include +#include +#include +#include +#include +#include +#include #include #include #include #include -#include -#include -#include #include -#include -#include -#include -#include +#include namespace DB diff --git a/src/Storages/System/StorageSystemUsers.cpp b/src/Storages/System/StorageSystemUsers.cpp index a48e12a1476..e72c1a95385 100644 --- a/src/Storages/System/StorageSystemUsers.cpp +++ b/src/Storages/System/StorageSystemUsers.cpp @@ -1,4 +1,7 @@ #include +#include +#include +#include #include #include #include @@ -8,10 +11,7 @@ #include #include #include -#include -#include -#include -#include +#include #include #include #include @@ -25,8 +25,8 @@ namespace DataTypeEnum8::Values getAuthenticationTypeEnumValues() { DataTypeEnum8::Values enum_values; - for (auto type : collections::range(Authentication::MAX_TYPE)) - enum_values.emplace_back(Authentication::TypeInfo::get(type).name, static_cast(type)); + for (auto type : collections::range(AuthenticationType::MAX_TYPE)) + enum_values.emplace_back(AuthenticationTypeInfo::get(type).name, static_cast(type)); return enum_values; } } @@ -91,7 +91,7 @@ void StorageSystemUsers::fillData(MutableColumns & res_columns, ContextPtr conte auto add_row = [&](const String & name, const UUID & id, const String & storage_name, - const Authentication & authentication, + const AuthenticationData & auth_data, const AllowedClientHosts & allowed_hosts, const RolesOrUsersSet & default_roles, const RolesOrUsersSet & grantees, @@ -100,19 +100,19 @@ void StorageSystemUsers::fillData(MutableColumns & res_columns, ContextPtr conte column_name.insertData(name.data(), name.length()); column_id.push_back(id.toUnderType()); column_storage.insertData(storage_name.data(), storage_name.length()); - column_auth_type.push_back(static_cast(authentication.getType())); + column_auth_type.push_back(static_cast(auth_data.getType())); if ( - authentication.getType() == Authentication::Type::LDAP || - authentication.getType() == Authentication::Type::KERBEROS + auth_data.getType() == AuthenticationType::LDAP || + auth_data.getType() == AuthenticationType::KERBEROS ) { Poco::JSON::Object auth_params_json; - if (authentication.getType() == Authentication::Type::LDAP) - auth_params_json.set("server", authentication.getLDAPServerName()); - else if (authentication.getType() == Authentication::Type::KERBEROS) - auth_params_json.set("realm", authentication.getKerberosRealm()); + if (auth_data.getType() == AuthenticationType::LDAP) + auth_params_json.set("server", auth_data.getLDAPServerName()); + else if (auth_data.getType() == AuthenticationType::KERBEROS) + auth_params_json.set("realm", auth_data.getKerberosRealm()); std::ostringstream oss; // STYLE_CHECK_ALLOW_STD_STRING_STREAM oss.exceptions(std::ios::failbit); @@ -197,7 +197,7 @@ void StorageSystemUsers::fillData(MutableColumns & res_columns, ContextPtr conte if (!storage) continue; - add_row(user->getName(), id, storage->getStorageName(), user->authentication, user->allowed_client_hosts, + add_row(user->getName(), id, storage->getStorageName(), user->auth_data, user->allowed_client_hosts, user->default_roles, user->grantees, user->default_database); } } diff --git a/src/Storages/System/attachSystemTables.cpp b/src/Storages/System/attachSystemTables.cpp index 4950a742dc9..30fe38f4936 100644 --- a/src/Storages/System/attachSystemTables.cpp +++ b/src/Storages/System/attachSystemTables.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #include #include @@ -21,7 +19,6 @@ #include #include #include - #include #include #include @@ -49,15 +46,11 @@ #include #include #include - -#if !defined(ARCADIA_BUILD) - #include - #include -#endif +#include +#include #include #include #include - #include #include #include @@ -128,10 +121,8 @@ void attachSystemTablesLocal(IDatabase & system_database) attach(system_database, "errors"); attach(system_database, "warnings"); attach(system_database, "data_skipping_indices"); -#if !defined(ARCADIA_BUILD) attach(system_database, "licenses"); attach(system_database, "time_zones"); -#endif #ifdef OS_LINUX attach(system_database, "stack_trace"); #endif diff --git a/src/Storages/TableLockHolder.h b/src/Storages/TableLockHolder.h index 6ec06a5e66c..36fda2c69bb 100644 --- a/src/Storages/TableLockHolder.h +++ b/src/Storages/TableLockHolder.h @@ -16,8 +16,6 @@ struct TableExclusiveLockHolder private: friend class IStorage; - /// Order is important. - TableLockHolder alter_lock; TableLockHolder drop_lock; }; diff --git a/src/Storages/registerStorages.cpp b/src/Storages/registerStorages.cpp index af2e4732803..adbb51a3732 100644 --- a/src/Storages/registerStorages.cpp +++ b/src/Storages/registerStorages.cpp @@ -1,16 +1,13 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -# include "config_core.h" -#endif +#include +#include "config_core.h" namespace DB { void registerStorageLog(StorageFactory & factory); -void registerStorageTinyLog(StorageFactory & factory); void registerStorageStripeLog(StorageFactory & factory); void registerStorageMergeTree(StorageFactory & factory); void registerStorageNull(StorageFactory & factory); @@ -68,6 +65,10 @@ void registerStorageMaterializedPostgreSQL(StorageFactory & factory); void registerStorageExternalDistributed(StorageFactory & factory); #endif +#if USE_FILELOG +void registerStorageFileLog(StorageFactory & factory); +#endif + #if USE_SQLITE void registerStorageSQLite(StorageFactory & factory); #endif @@ -78,7 +79,6 @@ void registerStorages() auto & factory = StorageFactory::instance(); registerStorageLog(factory); - registerStorageTinyLog(factory); registerStorageStripeLog(factory); registerStorageMergeTree(factory); registerStorageNull(factory); @@ -119,7 +119,11 @@ void registerStorages() registerStorageKafka(factory); #endif - #if USE_AMQPCPP +#if USE_FILELOG + registerStorageFileLog(factory); +#endif + +#if USE_AMQPCPP registerStorageRabbitMQ(factory); #endif diff --git a/src/Storages/tests/gtest_storage_log.cpp b/src/Storages/tests/gtest_storage_log.cpp index f86295cd06b..a48b764b62c 100644 --- a/src/Storages/tests/gtest_storage_log.cpp +++ b/src/Storages/tests/gtest_storage_log.cpp @@ -35,7 +35,8 @@ DB::StoragePtr createStorage(DB::DiskPtr & disk) names_and_types.emplace_back("a", std::make_shared()); StoragePtr table = StorageLog::create( - disk, "table/", StorageID("test", "test"), ColumnsDescription{names_and_types}, ConstraintsDescription{}, String{}, false, 1048576); + "Log", disk, "table/", StorageID("test", "test"), ColumnsDescription{names_and_types}, + ConstraintsDescription{}, String{}, false, 1048576); table->startup(); diff --git a/src/TableFunctions/ITableFunction.cpp b/src/TableFunctions/ITableFunction.cpp index 218d86fe4a2..fa7f6e52220 100644 --- a/src/TableFunctions/ITableFunction.cpp +++ b/src/TableFunctions/ITableFunction.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include diff --git a/src/TableFunctions/ITableFunctionXDBC.h b/src/TableFunctions/ITableFunctionXDBC.h index 4f6656773b1..ddeaeaa9b10 100644 --- a/src/TableFunctions/ITableFunctionXDBC.h +++ b/src/TableFunctions/ITableFunctionXDBC.h @@ -5,9 +5,7 @@ #include #include -#if !defined(ARCADIA_BUILD) -# include -#endif +#include namespace DB { diff --git a/src/TableFunctions/TableFunctionFile.cpp b/src/TableFunctions/TableFunctionFile.cpp index dcb91c8cc2e..d8bdb3b45c4 100644 --- a/src/TableFunctions/TableFunctionFile.cpp +++ b/src/TableFunctions/TableFunctionFile.cpp @@ -1,7 +1,7 @@ #include #include "registerTableFunctions.h" -#include +#include #include #include #include diff --git a/src/TableFunctions/TableFunctionMySQL.cpp b/src/TableFunctions/TableFunctionMySQL.cpp index 80f108eb68a..b7c6ee8803e 100644 --- a/src/TableFunctions/TableFunctionMySQL.cpp +++ b/src/TableFunctions/TableFunctionMySQL.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_MYSQL #include diff --git a/src/TableFunctions/TableFunctionMySQL.h b/src/TableFunctions/TableFunctionMySQL.h index 78e84dfed29..876dd43f598 100644 --- a/src/TableFunctions/TableFunctionMySQL.h +++ b/src/TableFunctions/TableFunctionMySQL.h @@ -1,7 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include "config_core.h" -#endif +#include "config_core.h" #if USE_MYSQL #include diff --git a/src/TableFunctions/TableFunctionPostgreSQL.cpp b/src/TableFunctions/TableFunctionPostgreSQL.cpp index 980066622c8..d929c62237c 100644 --- a/src/TableFunctions/TableFunctionPostgreSQL.cpp +++ b/src/TableFunctions/TableFunctionPostgreSQL.cpp @@ -49,11 +49,10 @@ ColumnsDescription TableFunctionPostgreSQL::getActualTableStructure(ContextPtr c const bool use_nulls = context->getSettingsRef().external_table_functions_use_nulls; auto connection_holder = connection_pool->get(); auto columns = fetchPostgreSQLTableStructure( - connection_holder->get(), - configuration->schema.empty() ? doubleQuoteString(configuration->table) - : doubleQuoteString(configuration->schema) + '.' + doubleQuoteString(configuration->table), - use_nulls).columns; + connection_holder->get(), configuration->table, configuration->schema, use_nulls).columns; + if (!columns) + throw Exception(ErrorCodes::BAD_ARGUMENTS, "Table structure not returned"); return ColumnsDescription{*columns}; } diff --git a/src/TableFunctions/TableFunctionPostgreSQL.h b/src/TableFunctions/TableFunctionPostgreSQL.h index ff363e3a6cf..7b33998a967 100644 --- a/src/TableFunctions/TableFunctionPostgreSQL.h +++ b/src/TableFunctions/TableFunctionPostgreSQL.h @@ -1,7 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_LIBPQXX #include diff --git a/src/TableFunctions/TableFunctionRemote.cpp b/src/TableFunctions/TableFunctionRemote.cpp index 296076344a4..ca13b7277ce 100644 --- a/src/TableFunctions/TableFunctionRemote.cpp +++ b/src/TableFunctions/TableFunctionRemote.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -32,126 +33,171 @@ namespace ErrorCodes void TableFunctionRemote::parseArguments(const ASTPtr & ast_function, ContextPtr context) { ASTs & args_func = ast_function->children; + ExternalDataSourceConfiguration configuration; + + String cluster_name; + String cluster_description; if (args_func.size() != 1) throw Exception(help_message, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); ASTs & args = args_func.at(0)->children; - const size_t max_args = is_cluster_function ? 4 : 6; - if (args.size() < 2 || args.size() > max_args) - throw Exception(help_message, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); - - String cluster_name; - String cluster_description; - String remote_database; - String remote_table; - String username; - String password; - - size_t arg_num = 0; - - auto get_string_literal = [](const IAST & node, String & res) + /** + * Number of arguments for remote function is 4. + * Number of arguments for cluster function is 6. + * For now named collection can be used only for remote as cluster does not require credentials. + */ + size_t max_args = is_cluster_function ? 4 : 6; + auto named_collection = getExternalDataSourceConfiguration(args, context, false, false); + if (named_collection) { - const auto * lit = node.as(); - if (!lit) - return false; + if (is_cluster_function) + throw Exception(ErrorCodes::BAD_ARGUMENTS, "Named collection cannot be used for table function cluster"); - if (lit->value.getType() != Field::Types::String) - return false; + /** + * Common arguments: database, table, username, password, addresses_expr. + * Specific args (remote): sharding_key, or database (in case it is not ASTLiteral). + * None of the common arguments is empty at this point, it is checked in getExternalDataSourceConfiguration. + */ + auto [common_configuration, storage_specific_args] = named_collection.value(); + configuration.set(common_configuration); - res = safeGet(lit->value); - return true; - }; - - if (is_cluster_function) - { - args[arg_num] = evaluateConstantExpressionOrIdentifierAsLiteral(args[arg_num], context); - cluster_name = args[arg_num]->as().value.safeGet(); - } - else - { - if (!tryGetIdentifierNameInto(args[arg_num], cluster_name)) + for (const auto & [arg_name, arg_value] : storage_specific_args) { - if (!get_string_literal(*args[arg_num], cluster_description)) - throw Exception("Hosts pattern must be string literal (in single quotes).", ErrorCodes::BAD_ARGUMENTS); - } - } - ++arg_num; - - const auto * function = args[arg_num]->as(); - - if (function && TableFunctionFactory::instance().isTableFunctionName(function->name)) - { - remote_table_function_ptr = args[arg_num]; - ++arg_num; - } - else - { - args[arg_num] = evaluateConstantExpressionForDatabaseName(args[arg_num], context); - remote_database = args[arg_num]->as().value.safeGet(); - - ++arg_num; - - auto qualified_name = QualifiedTableName::parseFromString(remote_database); - if (qualified_name.database.empty()) - { - if (arg_num >= args.size()) + if (arg_name == "sharding_key") { - throw Exception(help_message, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); + sharding_key = arg_value; + } + else if (arg_name == "database") + { + const auto * function = arg_value->as(); + if (function && TableFunctionFactory::instance().isTableFunctionName(function->name)) + { + remote_table_function_ptr = arg_value; + } + else + { + auto database_literal = evaluateConstantExpressionOrIdentifierAsLiteral(arg_value, context); + configuration.database = database_literal->as()->value.safeGet(); + } } else + throw Exception(ErrorCodes::BAD_ARGUMENTS, + "Unexpected key-value argument." + "Got: {}, but expected: sharding_key", arg_name); + } + cluster_description = configuration.addresses_expr; + if (cluster_description.empty()) + cluster_description = configuration.port ? configuration.host + ':' + toString(configuration.port) : configuration.host; + } + else + { + if (args.size() < 2 || args.size() > max_args) + throw Exception(help_message, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); + + size_t arg_num = 0; + auto get_string_literal = [](const IAST & node, String & res) + { + const auto * lit = node.as(); + if (!lit) + return false; + + if (lit->value.getType() != Field::Types::String) + return false; + + res = safeGet(lit->value); + return true; + }; + + if (is_cluster_function) + { + args[arg_num] = evaluateConstantExpressionOrIdentifierAsLiteral(args[arg_num], context); + cluster_name = args[arg_num]->as().value.safeGet(); + } + else + { + if (!tryGetIdentifierNameInto(args[arg_num], cluster_name)) { - std::swap(qualified_name.database, qualified_name.table); - args[arg_num] = evaluateConstantExpressionOrIdentifierAsLiteral(args[arg_num], context); - qualified_name.table = args[arg_num]->as().value.safeGet(); + if (!get_string_literal(*args[arg_num], cluster_description)) + throw Exception("Hosts pattern must be string literal (in single quotes).", ErrorCodes::BAD_ARGUMENTS); + } + } + + ++arg_num; + const auto * function = args[arg_num]->as(); + if (function && TableFunctionFactory::instance().isTableFunctionName(function->name)) + { + remote_table_function_ptr = args[arg_num]; + ++arg_num; + } + else + { + args[arg_num] = evaluateConstantExpressionForDatabaseName(args[arg_num], context); + configuration.database = args[arg_num]->as().value.safeGet(); + + ++arg_num; + + auto qualified_name = QualifiedTableName::parseFromString(configuration.database); + if (qualified_name.database.empty()) + { + if (arg_num >= args.size()) + { + throw Exception(help_message, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); + } + else + { + std::swap(qualified_name.database, qualified_name.table); + args[arg_num] = evaluateConstantExpressionOrIdentifierAsLiteral(args[arg_num], context); + qualified_name.table = args[arg_num]->as().value.safeGet(); + ++arg_num; + } + } + + configuration.database = std::move(qualified_name.database); + configuration.table = std::move(qualified_name.table); + + /// Cluster function may have sharding key for insert + if (is_cluster_function && arg_num < args.size()) + { + sharding_key = args[arg_num]; ++arg_num; } } - remote_database = std::move(qualified_name.database); - remote_table = std::move(qualified_name.table); - } + /// Username and password parameters are prohibited in cluster version of the function + if (!is_cluster_function) + { + if (arg_num < args.size()) + { + if (!get_string_literal(*args[arg_num], configuration.username)) + { + configuration.username = "default"; + sharding_key = args[arg_num]; + } + ++arg_num; + } - /// Cluster function may have sharding key for insert - if (is_cluster_function && arg_num < args.size()) - { - sharding_key = args[arg_num]; - ++arg_num; - } + if (arg_num < args.size() && !sharding_key) + { + if (!get_string_literal(*args[arg_num], configuration.password)) + { + sharding_key = args[arg_num]; + } + ++arg_num; + } + + if (arg_num < args.size() && !sharding_key) + { + sharding_key = args[arg_num]; + ++arg_num; + } + } - /// Username and password parameters are prohibited in cluster version of the function - if (!is_cluster_function) - { if (arg_num < args.size()) - { - if (!get_string_literal(*args[arg_num], username)) - { - username = "default"; - sharding_key = args[arg_num]; - } - ++arg_num; - } - - if (arg_num < args.size() && !sharding_key) - { - if (!get_string_literal(*args[arg_num], password)) - { - sharding_key = args[arg_num]; - } - ++arg_num; - } - - if (arg_num < args.size() && !sharding_key) - { - sharding_key = args[arg_num]; - ++arg_num; - } + throw Exception(help_message, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); } - if (arg_num < args.size()) - throw Exception(help_message, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); - if (!cluster_name.empty()) { /// Use an existing cluster from the main config @@ -197,19 +243,19 @@ void TableFunctionRemote::parseArguments(const ASTPtr & ast_function, ContextPtr cluster = std::make_shared( context->getSettings(), names, - username, - password, + configuration.username, + configuration.password, (secure ? (maybe_secure_port ? *maybe_secure_port : DBMS_DEFAULT_SECURE_PORT) : context->getTCPPort()), treat_local_as_remote, treat_local_port_as_remote, secure); } - if (!remote_table_function_ptr && remote_table.empty()) + if (!remote_table_function_ptr && configuration.table.empty()) throw Exception("The name of remote table cannot be empty", ErrorCodes::BAD_ARGUMENTS); - remote_table_id.database_name = remote_database; - remote_table_id.table_name = remote_table; + remote_table_id.database_name = configuration.database; + remote_table_id.table_name = configuration.table; } StoragePtr TableFunctionRemote::executeImpl(const ASTPtr & /*ast_function*/, ContextPtr context, const std::string & table_name, ColumnsDescription cached_columns) const diff --git a/src/TableFunctions/TableFunctionS3.cpp b/src/TableFunctions/TableFunctionS3.cpp index 4faf3f15aa4..e26c282c622 100644 --- a/src/TableFunctions/TableFunctionS3.cpp +++ b/src/TableFunctions/TableFunctionS3.cpp @@ -48,9 +48,9 @@ void TableFunctionS3::parseArguments(const ASTPtr & ast_function, ContextPtr con for (const auto & [arg_name, arg_value] : storage_specific_args) { if (arg_name == "access_key_id") - configuration.access_key_id = arg_value.safeGet(); + configuration.access_key_id = arg_value->as()->value.safeGet(); else if (arg_name == "secret_access_key") - configuration.secret_access_key = arg_value.safeGet(); + configuration.secret_access_key = arg_value->as()->value.safeGet(); else throw Exception(ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH, "Unknown key-value argument `{}` for StorageS3, expected: " diff --git a/src/TableFunctions/TableFunctionS3Cluster.cpp b/src/TableFunctions/TableFunctionS3Cluster.cpp index 7e28decfdb0..aa3ae20b61d 100644 --- a/src/TableFunctions/TableFunctionS3Cluster.cpp +++ b/src/TableFunctions/TableFunctionS3Cluster.cpp @@ -1,6 +1,4 @@ -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 diff --git a/src/TableFunctions/TableFunctionS3Cluster.h b/src/TableFunctions/TableFunctionS3Cluster.h index 3f2be12497c..cc857725ce6 100644 --- a/src/TableFunctions/TableFunctionS3Cluster.h +++ b/src/TableFunctions/TableFunctionS3Cluster.h @@ -1,8 +1,6 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include -#endif #if USE_AWS_S3 diff --git a/src/TableFunctions/TableFunctionSQLite.h b/src/TableFunctions/TableFunctionSQLite.h index 4649dac016f..e80e04260bc 100644 --- a/src/TableFunctions/TableFunctionSQLite.h +++ b/src/TableFunctions/TableFunctionSQLite.h @@ -1,7 +1,5 @@ #pragma once -#if !defined(ARCADIA_BUILD) #include "config_core.h" -#endif #if USE_SQLITE #include diff --git a/src/TableFunctions/TableFunctionURL.cpp b/src/TableFunctions/TableFunctionURL.cpp index bbaa1b5f048..f2947268905 100644 --- a/src/TableFunctions/TableFunctionURL.cpp +++ b/src/TableFunctions/TableFunctionURL.cpp @@ -1,7 +1,7 @@ #include #include "registerTableFunctions.h" -#include +#include #include #include #include diff --git a/src/TableFunctions/registerTableFunctions.h b/src/TableFunctions/registerTableFunctions.h index 5b01f284c95..8dbb5ebb5fa 100644 --- a/src/TableFunctions/registerTableFunctions.h +++ b/src/TableFunctions/registerTableFunctions.h @@ -1,9 +1,7 @@ #pragma once -#if !defined(ARCADIA_BUILD) -# include -# include "config_core.h" -#endif +#include +#include "config_core.h" namespace DB { diff --git a/tests/ci/build_check.py b/tests/ci/build_check.py new file mode 100644 index 00000000000..fbb0fc11c74 --- /dev/null +++ b/tests/ci/build_check.py @@ -0,0 +1,207 @@ +#!/usr/bin/env python3 +# +import subprocess +import logging +import json +import os +import sys +import time +from github import Github +from s3_helper import S3Helper +from pr_info import PRInfo +from get_robot_token import get_best_robot_token +from version_helper import get_version_from_repo, update_version_local + + +def get_build_config(build_check_name, build_number, repo_path): + if build_check_name == 'ClickHouse build check (actions)': + build_config_name = 'build_config' + elif build_check_name == 'ClickHouse special build check (actions)': + build_config_name = 'special_build_config' + else: + raise Exception(f"Unknown build check name {build_check_name}") + + ci_config_path = os.path.join(repo_path, "tests/ci/ci_config.json") + with open(ci_config_path, 'r') as ci_config: + config_dict = json.load(ci_config) + return config_dict[build_config_name][build_number] + + +def _can_export_binaries(build_config): + if build_config['package-type'] != 'deb': + return False + if build_config['bundled'] != "bundled": + return False + if build_config['splitted'] == 'splitted': + return False + if build_config['sanitizer'] != '': + return True + if build_config['build-type'] != '': + return True + return False + + +def get_packager_cmd(build_config, packager_path, output_path, build_version, image_version, ccache_path): + package_type = build_config['package-type'] + comp = build_config['compiler'] + cmd = f"cd {packager_path} && ./packager --output-dir={output_path} --package-type={package_type} --compiler={comp}" + + if build_config['build-type']: + cmd += ' --build-type={}'.format(build_config['build-type']) + if build_config['sanitizer']: + cmd += ' --sanitizer={}'.format(build_config['sanitizer']) + if build_config['bundled'] == 'unbundled': + cmd += ' --unbundled' + if build_config['splitted'] == 'splitted': + cmd += ' --split-binary' + if build_config['tidy'] == 'enable': + cmd += ' --clang-tidy' + + cmd += ' --cache=ccache' + cmd += ' --ccache_dir={}'.format(ccache_path) + + if 'alien_pkgs' in build_config and build_config['alien_pkgs']: + cmd += ' --alien-pkgs' + + cmd += ' --docker-image-version={}'.format(image_version) + cmd += ' --version={}'.format(build_version) + + if _can_export_binaries(build_config): + cmd += ' --with-binaries=tests' + + return cmd + +def get_image_name(build_config): + if build_config['bundled'] != 'bundled': + return 'clickhouse/unbundled-builder' + elif build_config['package-type'] != 'deb': + return 'clickhouse/binary-builder' + else: + return 'clickhouse/deb-builder' + + +def build_clickhouse(packager_cmd, logs_path): + build_log_path = os.path.join(logs_path, 'build_log.log') + with open(build_log_path, 'w') as log_file: + retcode = subprocess.Popen(packager_cmd, shell=True, stderr=log_file, stdout=log_file).wait() + if retcode == 0: + logging.info("Built successfully") + else: + logging.info("Build failed") + return build_log_path, retcode == 0 + +def build_config_to_string(build_config): + if build_config["package-type"] == "performance": + return "performance" + + return "_".join([ + build_config['compiler'], + build_config['build-type'] if build_config['build-type'] else "relwithdebuginfo", + build_config['sanitizer'] if build_config['sanitizer'] else "none", + build_config['bundled'], + build_config['splitted'], + "tidy" if build_config['tidy'] == "enable" else "notidy", + "with_coverage" if build_config['with_coverage'] else "without_coverage", + build_config['package-type'], + ]) + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + repo_path = os.getenv("REPO_COPY", os.path.abspath("../../")) + temp_path = os.getenv("TEMP_PATH", os.path.abspath(".")) + caches_path = os.getenv("CACHES_PATH", temp_path) + + build_check_name = sys.argv[1] + build_number = int(sys.argv[2]) + + build_config = get_build_config(build_check_name, build_number, repo_path) + + if not os.path.exists(temp_path): + os.makedirs(temp_path) + + with open(os.getenv('GITHUB_EVENT_PATH'), 'r') as event_file: + event = json.load(event_file) + + pr_info = PRInfo(event) + + logging.info("Repo copy path %s", repo_path) + + gh = Github(get_best_robot_token()) + + images_path = os.path.join(os.getenv("IMAGES_PATH", temp_path), 'changed_images.json') + image_name = get_image_name(build_config) + image_version = 'latest' + if os.path.exists(images_path): + logging.info("Images file exists") + with open(images_path, 'r') as images_fd: + images = json.load(images_fd) + logging.info("Got images %s", images) + if image_name in images: + image_version = images[image_name] + + for i in range(10): + try: + logging.info("Pulling image %s:%s", image_name, image_version) + subprocess.check_output(f"docker pull {image_name}:{image_version}", stderr=subprocess.STDOUT, shell=True) + break + except Exception as ex: + time.sleep(i * 3) + logging.info("Got execption pulling docker %s", ex) + else: + raise Exception(f"Cannot pull dockerhub for image docker pull {image_name}:{image_version}") + + version = get_version_from_repo(repo_path) + version.tweak_update() + update_version_local(repo_path, pr_info.sha, version) + + build_name = build_config_to_string(build_config) + logging.info("Build short name %s", build_name) + subprocess.check_call(f"echo 'BUILD_NAME=build_urls_{build_name}' >> $GITHUB_ENV", shell=True) + + build_output_path = os.path.join(temp_path, build_name) + if not os.path.exists(build_output_path): + os.makedirs(build_output_path) + + ccache_path = os.path.join(caches_path, build_name + '_ccache') + if not os.path.exists(ccache_path): + os.makedirs(ccache_path) + + packager_cmd = get_packager_cmd(build_config, os.path.join(repo_path, "docker/packager"), build_output_path, version.get_version_string(), image_version, ccache_path) + logging.info("Going to run packager with %s", packager_cmd) + + build_clickhouse_log = os.path.join(temp_path, "build_log") + if not os.path.exists(build_clickhouse_log): + os.makedirs(build_clickhouse_log) + + start = time.time() + log_path, success = build_clickhouse(packager_cmd, build_clickhouse_log) + elapsed = int(time.time() - start) + subprocess.check_call(f"sudo chown -R ubuntu:ubuntu {build_output_path}", shell=True) + subprocess.check_call(f"sudo chown -R ubuntu:ubuntu {ccache_path}", shell=True) + logging.info("Build finished with %s, log path %s", success, log_path) + + s3_helper = S3Helper('https://s3.amazonaws.com') + s3_path_prefix = str(pr_info.number) + "/" + pr_info.sha + "/" + build_check_name.lower().replace(' ', '_') + "/" + build_name + if os.path.exists(log_path): + log_url = s3_helper.upload_build_file_to_s3(log_path, s3_path_prefix + "/" + os.path.basename(log_path)) + logging.info("Log url %s", log_url) + else: + logging.info("Build log doesn't exist") + + build_urls = s3_helper.upload_build_folder_to_s3(build_output_path, s3_path_prefix, keep_dirs_in_s3_path=False, upload_symlinks=False) + logging.info("Got build URLs %s", build_urls) + + print("::notice ::Build URLs: {}".format('\n'.join(build_urls))) + + result = { + "log_url": log_url, + "build_urls": build_urls, + "build_config": build_config, + "elapsed_seconds": elapsed, + "status": success, + } + + print("::notice ::Log URL: {}".format(log_url)) + + with open(os.path.join(temp_path, "build_urls_" + build_name + '.json'), 'w') as build_links: + json.dump(result, build_links) diff --git a/tests/ci/build_report_check.py b/tests/ci/build_report_check.py new file mode 100644 index 00000000000..e060ce39a0d --- /dev/null +++ b/tests/ci/build_report_check.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 + +import json +import logging +import os +import sys +from github import Github +from report import create_build_html_report +from s3_helper import S3Helper +from get_robot_token import get_best_robot_token +from pr_info import PRInfo + +class BuildResult(): + def __init__(self, compiler, build_type, sanitizer, bundled, splitted, status, elapsed_seconds, with_coverage): + self.compiler = compiler + self.build_type = build_type + self.sanitizer = sanitizer + self.bundled = bundled + self.splitted = splitted + self.status = status + self.elapsed_seconds = elapsed_seconds + self.with_coverage = with_coverage + +def group_by_artifacts(build_urls): + groups = {'deb': [], 'binary': [], 'tgz': [], 'rpm': [], 'preformance': []} + for url in build_urls: + if url.endswith('performance.tgz'): + groups['performance'].append(url) + elif url.endswith('.deb') or url.endswith('.buildinfo') or url.endswith('.changes') or url.endswith('.tar.gz'): + groups['deb'].append(url) + elif url.endswith('.rpm'): + groups['rpm'].append(url) + elif url.endswith('.tgz'): + groups['tgz'].append(url) + else: + groups['binary'].append(url) + return groups + +def get_commit(gh, commit_sha): + repo = gh.get_repo(os.getenv("GITHUB_REPOSITORY", "ClickHouse/ClickHouse")) + commit = repo.get_commit(commit_sha) + return commit + +def process_report(build_report): + build_config = build_report['build_config'] + build_result = BuildResult( + compiler=build_config['compiler'], + build_type=build_config['build-type'], + sanitizer=build_config['sanitizer'], + bundled=build_config['bundled'], + splitted=build_config['splitted'], + status="success" if build_report['status'] else "failure", + elapsed_seconds=build_report['elapsed_seconds'], + with_coverage=False + ) + build_results = [] + build_urls = [] + build_logs_urls = [] + urls_groups = group_by_artifacts(build_report['build_urls']) + found_group = False + for _, group_urls in urls_groups.items(): + if group_urls: + build_results.append(build_result) + build_urls.append(group_urls) + build_logs_urls.append(build_report['log_url']) + found_group = True + + if not found_group: + build_results.append(build_result) + build_urls.append([""]) + build_logs_urls.append(build_report['log_url']) + + return build_results, build_urls, build_logs_urls + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + reports_path = os.getenv("REPORTS_PATH", "./reports") + temp_path = os.path.join(os.getenv("TEMP_PATH", ".")) + logging.info("Reports path %s", reports_path) + + if not os.path.exists(temp_path): + os.makedirs(temp_path) + + build_check_name = sys.argv[1] + + build_reports = [] + for root, dirs, files in os.walk(reports_path): + for f in files: + if f.startswith("build_urls_") and f.endswith('.json'): + logging.info("Found build report json %s", f) + with open(os.path.join(root, f), 'r') as file_handler: + build_report = json.load(file_handler) + build_reports.append(build_report) + + + build_results = [] + build_artifacts = [] + build_logs = [] + + for build_report in build_reports: + build_result, build_artifacts_url, build_logs_url = process_report(build_report) + logging.info("Got %s result for report", len(build_result)) + build_results += build_result + build_artifacts += build_artifacts_url + build_logs += build_logs_url + + logging.info("Totally got %s results", len(build_results)) + + gh = Github(get_best_robot_token()) + s3_helper = S3Helper('https://s3.amazonaws.com') + with open(os.getenv('GITHUB_EVENT_PATH'), 'r') as event_file: + event = json.load(event_file) + + pr_info = PRInfo(event) + + branch_url = "https://github.com/ClickHouse/ClickHouse/commits/master" + branch_name = "master" + if pr_info.number != 0: + branch_name = "PR #{}".format(pr_info.number) + branch_url = "https://github.com/ClickHouse/ClickHouse/pull/" + str(pr_info.number) + commit_url = f"https://github.com/ClickHouse/ClickHouse/commit/{pr_info.sha}" + task_url = f"https://github.com/ClickHouse/ClickHouse/actions/runs/{os.getenv('GITHUB_RUN_ID', '0')}" + report = create_build_html_report( + build_check_name, + build_results, + build_logs, + build_artifacts, + task_url, + branch_url, + branch_name, + commit_url + ) + + report_path = os.path.join(temp_path, 'report.html') + with open(report_path, 'w') as f: + f.write(report) + + logging.info("Going to upload prepared report") + context_name_for_path = build_check_name.lower().replace(' ', '_') + s3_path_prefix = str(pr_info.number) + "/" + pr_info.sha + "/" + context_name_for_path + + url = s3_helper.upload_build_file_to_s3(report_path, s3_path_prefix + "/report.html") + logging.info("Report url %s", url) + + total_builds = len(build_results) + ok_builds = 0 + summary_status = "success" + for build_result in build_results: + if build_result.status == "failure" and summary_status != "error": + summary_status = "failure" + if build_result.status == "error" or not build_result.status: + summary_status = "error" + + if build_result.status == "success": + ok_builds += 1 + + description = "{}/{} builds are OK".format(ok_builds, total_builds) + + print("::notice ::Report url: {}".format(url)) + + commit = get_commit(gh, pr_info.sha) + commit.create_status(context=build_check_name, description=description, state=summary_status, target_url=url) diff --git a/tests/ci/compress_files.py b/tests/ci/compress_files.py index f095b04872b..f3d2349408f 100644 --- a/tests/ci/compress_files.py +++ b/tests/ci/compress_files.py @@ -32,18 +32,18 @@ def compress_fast(path, archive_path, exclude=None): else: path += "/.." cmd = "tar {} {} -cf {} -C {} {}".format(pigz_part, exclude_part, archive_path, path, fname) - logging.debug("compress_fast cmd:{}".format(cmd)) + logging.debug("compress_fast cmd: %s", cmd) subprocess.check_call(cmd, shell=True) def decompress_fast(archive_path, result_path=None): pigz_part = '' if os.path.exists('/usr/bin/pigz'): - logging.info("pigz found, will compress and decompress faster ('{}' -> '{}')".format(archive_path, result_path)) + logging.info("pigz found, will compress and decompress faster ('%s' -> '%s')", archive_path, result_path) pigz_part = "--use-compress-program='pigz'" else: pigz_part = '-z' - logging.info("no pigz, decompressing with default tar ('{}' -> '{}')".format(archive_path, result_path)) + logging.info("no pigz, decompressing with default tar ('%s' -> '%s')", archive_path, result_path) if result_path is None: subprocess.check_call("tar {} -xf {}".format(pigz_part, archive_path), shell=True) diff --git a/tests/ci/docker_images_check.py b/tests/ci/docker_images_check.py index 9bd3f431429..d874ca422c3 100644 --- a/tests/ci/docker_images_check.py +++ b/tests/ci/docker_images_check.py @@ -1,13 +1,14 @@ #!/usr/bin/env python3 import subprocess import logging -from report import create_test_html_report -from s3_helper import S3Helper import json import os -from pr_info import PRInfo -from github import Github +import time import shutil +from github import Github +from report import create_test_html_report +from s3_helper import S3Helper +from pr_info import PRInfo from get_robot_token import get_best_robot_token, get_parameter_from_ssm NAME = "Push to Dockerhub (actions)" @@ -56,7 +57,7 @@ def get_changed_docker_images(pr_info, repo_path, image_file_path): index += 1 if index > 100: # Sanity check to prevent infinite loop. - raise "Too many changed docker images, this is a bug." + str(changed_images) + raise RuntimeError("Too many changed docker images, this is a bug." + str(changed_images)) # If a dependent image was already in the list because its own files # changed, but then it was added as a dependent of a changed base, we @@ -192,8 +193,9 @@ if __name__ == "__main__": changed_images, dockerhub_repo_name = get_changed_docker_images(pr_info, repo_path, "docker/images.json") logging.info("Has changed images %s", ', '.join([str(image[0]) for image in changed_images])) pr_commit_version = str(pr_info.number) + '-' + pr_info.sha - versions = [str(pr_info.number), pr_commit_version] + if pr_info.number == 0: + versions.append("latest") subprocess.check_output("docker login --username 'robotclickhouse' --password '{}'".format(dockerhub_password), shell=True) @@ -204,7 +206,7 @@ if __name__ == "__main__": images_processing_result += process_single_image(versions, full_path, image_name) result_images[image_name] = pr_commit_version - if len(changed_images): + if changed_images: description = "Updated " + ','.join([im[1] for im in changed_images]) else: description = "Nothing to update" diff --git a/tests/ci/docs_check.py b/tests/ci/docs_check.py new file mode 100644 index 00000000000..aece781a703 --- /dev/null +++ b/tests/ci/docs_check.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python3 +import logging +import subprocess +import os +import time +import json +import sys +from github import Github +from report import create_test_html_report +from s3_helper import S3Helper +from pr_info import PRInfo +from get_robot_token import get_best_robot_token + +NAME = "Docs Check (actions)" + +def process_logs(s3_client, additional_logs, s3_path_prefix): + additional_urls = [] + for log_path in additional_logs: + if log_path: + additional_urls.append( + s3_client.upload_test_report_to_s3( + log_path, + s3_path_prefix + "/" + os.path.basename(log_path))) + + return additional_urls + +def upload_results(s3_client, pr_number, commit_sha, test_results, additional_files): + s3_path_prefix = f"{pr_number}/{commit_sha}/docs_check" + additional_urls = process_logs(s3_client, additional_files, s3_path_prefix) + + branch_url = "https://github.com/ClickHouse/ClickHouse/commits/master" + branch_name = "master" + if pr_number != 0: + branch_name = f"PR #{pr_number}" + branch_url = f"https://github.com/ClickHouse/ClickHouse/pull/{pr_number}" + commit_url = f"https://github.com/ClickHouse/ClickHouse/commit/{commit_sha}" + + task_url = f"https://github.com/ClickHouse/ClickHouse/actions/runs/{os.getenv('GITHUB_RUN_ID')}" + + raw_log_url = additional_urls[0] + additional_urls.pop(0) + + html_report = create_test_html_report(NAME, test_results, raw_log_url, task_url, branch_url, branch_name, commit_url, additional_urls) + with open('report.html', 'w', encoding='utf-8') as f: + f.write(html_report) + + url = s3_client.upload_test_report_to_s3('report.html', s3_path_prefix + ".html") + logging.info("Search result in url %s", url) + return url + +def get_commit(gh, commit_sha): + repo = gh.get_repo(os.getenv("GITHUB_REPOSITORY", "ClickHouse/ClickHouse")) + commit = repo.get_commit(commit_sha) + return commit + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + + temp_path = os.path.join(os.getenv("TEMP_PATH")) + repo_path = os.path.join(os.getenv("REPO_COPY")) + + with open(os.getenv('GITHUB_EVENT_PATH'), 'r', encoding='utf-8') as event_file: + event = json.load(event_file) + + pr_info = PRInfo(event, need_changed_files=True) + + gh = Github(get_best_robot_token()) + if not pr_info.has_changes_in_documentation(): + logging.info ("No changes in documentation") + commit = get_commit(gh, pr_info.sha) + commit.create_status(context=NAME, description="No changes in docs", state="success") + sys.exit(0) + + logging.info("Has changes in docs") + + if not os.path.exists(temp_path): + os.makedirs(temp_path) + + images_path = os.path.join(temp_path, 'changed_images.json') + + docker_image = 'clickhouse/docs-check' + if os.path.exists(images_path): + logging.info("Images file exists") + with open(images_path, 'r', encoding='utf-8') as images_fd: + images = json.load(images_fd) + logging.info("Got images %s", images) + if 'clickhouse/docs-check' in images: + docker_image += ':' + images['clickhouse/docs-check'] + + logging.info("Got docker image %s", docker_image) + for i in range(10): + try: + subprocess.check_output(f"docker pull {docker_image}", shell=True) + break + except Exception as ex: + time.sleep(i * 3) + logging.info("Got execption pulling docker %s", ex) + else: + raise Exception(f"Cannot pull dockerhub for image {docker_image}") + + test_output = os.path.join(temp_path, 'docs_check_log') + if not os.path.exists(test_output): + os.makedirs(test_output) + + cmd = f"docker run --cap-add=SYS_PTRACE --volume={repo_path}:/repo_path --volume={test_output}:/output_path {docker_image}" + + run_log_path = os.path.join(test_output, 'runlog.log') + + with open(run_log_path, 'w', encoding='utf-8') as log: + with subprocess.Popen(cmd, shell=True, stderr=log, stdout=log) as process: + retcode = process.wait() + if retcode == 0: + logging.info("Run successfully") + status = "success" + description = "Docs check passed" + else: + description = "Docs check failed (non zero exit code)" + status = "failure" + logging.info("Run failed") + + subprocess.check_call(f"sudo chown -R ubuntu:ubuntu {temp_path}", shell=True) + files = os.listdir(test_output) + lines = [] + additional_files = [] + if not files: + logging.error("No output files after docs check") + description = "No output files after docs check" + status = "failure" + else: + for f in files: + path = os.path.join(test_output, f) + additional_files.append(path) + with open(path, 'r', encoding='utf-8') as check_file: + for line in check_file: + if "ERROR" in line: + lines.append((line.split(':')[-1], "FAIL")) + if lines: + status = "failure" + description = "Found errors in docs" + elif status != "failure": + lines.append(("No errors found", "OK")) + else: + lines.append(("Non zero exit code", "FAIL")) + + s3_helper = S3Helper('https://s3.amazonaws.com') + + report_url = upload_results(s3_helper, pr_info.number, pr_info.sha, lines, additional_files) + print("::notice ::Report url: {report_url}") + commit = get_commit(gh, pr_info.sha) + commit.create_status(context=NAME, description=description, state=status, target_url=report_url) diff --git a/tests/ci/docs_release.py b/tests/ci/docs_release.py new file mode 100644 index 00000000000..832a3293ae2 --- /dev/null +++ b/tests/ci/docs_release.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python3 + +#!/usr/bin/env python3 +import logging +import subprocess +import os +import time +import json +import sys +from github import Github +from report import create_test_html_report +from s3_helper import S3Helper +from pr_info import PRInfo +from get_robot_token import get_best_robot_token +from ssh import SSHKey + +NAME = "Docs Release (actions)" + +def process_logs(s3_client, additional_logs, s3_path_prefix): + additional_urls = [] + for log_path in additional_logs: + if log_path: + additional_urls.append( + s3_client.upload_test_report_to_s3( + log_path, + s3_path_prefix + "/" + os.path.basename(log_path))) + + return additional_urls + +def upload_results(s3_client, pr_number, commit_sha, test_results, additional_files): + s3_path_prefix = f"{pr_number}/{commit_sha}/docs_release" + additional_urls = process_logs(s3_client, additional_files, s3_path_prefix) + + branch_url = "https://github.com/ClickHouse/ClickHouse/commits/master" + branch_name = "master" + if pr_number != 0: + branch_name = f"PR #{pr_number}" + branch_url = f"https://github.com/ClickHouse/ClickHouse/pull/{pr_number}" + commit_url = f"https://github.com/ClickHouse/ClickHouse/commit/{commit_sha}" + + task_url = f"https://github.com/ClickHouse/ClickHouse/actions/runs/{os.getenv('GITHUB_RUN_ID')}" + + raw_log_url = additional_urls[0] + additional_urls.pop(0) + + html_report = create_test_html_report(NAME, test_results, raw_log_url, task_url, branch_url, branch_name, commit_url, additional_urls) + with open('report.html', 'w', encoding='utf-8') as f: + f.write(html_report) + + url = s3_client.upload_test_report_to_s3('report.html', s3_path_prefix + ".html") + logging.info("Search result in url %s", url) + return url + +def get_commit(gh, commit_sha): + repo = gh.get_repo(os.getenv("GITHUB_REPOSITORY", "ClickHouse/ClickHouse")) + commit = repo.get_commit(commit_sha) + return commit + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + + temp_path = os.path.join(os.getenv("TEMP_PATH")) + repo_path = os.path.join(os.getenv("REPO_COPY")) + + with open(os.getenv('GITHUB_EVENT_PATH'), 'r', encoding='utf-8') as event_file: + event = json.load(event_file) + + pr_info = PRInfo(event, need_changed_files=True) + + gh = Github(get_best_robot_token()) + if not pr_info.has_changes_in_documentation(): + logging.info ("No changes in documentation") + commit = get_commit(gh, pr_info.sha) + commit.create_status(context=NAME, description="No changes in docs", state="success") + sys.exit(0) + + logging.info("Has changes in docs") + + if not os.path.exists(temp_path): + os.makedirs(temp_path) + + images_path = os.path.join(temp_path, 'changed_images.json') + + docker_image = 'clickhouse/docs-release' + if os.path.exists(images_path): + logging.info("Images file exists") + with open(images_path, 'r', encoding='utf-8') as images_fd: + images = json.load(images_fd) + logging.info("Got images %s", images) + if 'clickhouse/docs-release' in images: + docker_image += ':' + images['clickhouse/docs-release'] + + logging.info("Got docker image %s", docker_image) + for i in range(10): + try: + subprocess.check_output(f"docker pull {docker_image}", shell=True) + break + except Exception as ex: + time.sleep(i * 3) + logging.info("Got execption pulling docker %s", ex) + else: + raise Exception(f"Cannot pull dockerhub for image {docker_image}") + + test_output = os.path.join(temp_path, 'docs_release_log') + if not os.path.exists(test_output): + os.makedirs(test_output) + + token = os.getenv('CLOUDFLARE_TOKEN') + cmd = "docker run --cap-add=SYS_PTRACE --volume=$SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent " \ + f"-e CLOUDFLARE_TOKEN={token} --volume={repo_path}:/repo_path --volume={test_output}:/output_path {docker_image}" + + run_log_path = os.path.join(test_output, 'runlog.log') + + with open(run_log_path, 'w', encoding='utf-8') as log, SSHKey("ROBOT_CLICKHOUSE_SSH_KEY"): + with subprocess.Popen(cmd, shell=True, stderr=log, stdout=log) as process: + retcode = process.wait() + if retcode == 0: + logging.info("Run successfully") + status = "success" + description = "Released successfuly" + else: + description = "Release failed (non zero exit code)" + status = "failure" + logging.info("Run failed") + + subprocess.check_call(f"sudo chown -R ubuntu:ubuntu {temp_path}", shell=True) + files = os.listdir(test_output) + lines = [] + additional_files = [] + if not files: + logging.error("No output files after docs release") + description = "No output files after docs release" + status = "failure" + else: + for f in files: + path = os.path.join(test_output, f) + additional_files.append(path) + with open(path, 'r', encoding='utf-8') as check_file: + for line in check_file: + if "ERROR" in line: + lines.append((line.split(':')[-1], "FAIL")) + if lines: + status = "failure" + description = "Found errors in docs" + elif status != "failure": + lines.append(("No errors found", "OK")) + else: + lines.append(("Non zero exit code", "FAIL")) + + s3_helper = S3Helper('https://s3.amazonaws.com') + + report_url = upload_results(s3_helper, pr_info.number, pr_info.sha, lines, additional_files) + print("::notice ::Report url: {report_url}") + commit = get_commit(gh, pr_info.sha) + commit.create_status(context=NAME, description=description, state=status, target_url=report_url) diff --git a/tests/ci/fast_test_check.py b/tests/ci/fast_test_check.py new file mode 100644 index 00000000000..ae5a18613ee --- /dev/null +++ b/tests/ci/fast_test_check.py @@ -0,0 +1,195 @@ +#!/usr/bin/env python3 + +import logging +import subprocess +import os +import json +import time +import csv +from github import Github +from pr_info import PRInfo +from report import create_test_html_report +from s3_helper import S3Helper +from get_robot_token import get_best_robot_token + +NAME = 'Fast test (actions)' + +def get_fasttest_cmd(workspace, output_path, ccache_path, repo_path, pr_number, commit_sha, image): + return f"docker run --cap-add=SYS_PTRACE " \ + f"-e FASTTEST_WORKSPACE=/fasttest-workspace -e FASTTEST_OUTPUT=/test_output " \ + f"-e FASTTEST_SOURCE=/ClickHouse --cap-add=SYS_PTRACE " \ + f"-e PULL_REQUEST_NUMBER={pr_number} -e COMMIT_SHA={commit_sha} -e COPY_CLICKHOUSE_BINARY_TO_OUTPUT=1 " \ + f"--volume={workspace}:/fasttest-workspace --volume={repo_path}:/ClickHouse --volume={output_path}:/test_output "\ + f"--volume={ccache_path}:/fasttest-workspace/ccache {image}" + + +def process_results(result_folder): + test_results = [] + additional_files = [] + # Just upload all files from result_folder. + # If task provides processed results, then it's responsible for content of result_folder. + if os.path.exists(result_folder): + test_files = [f for f in os.listdir(result_folder) if os.path.isfile(os.path.join(result_folder, f))] + additional_files = [os.path.join(result_folder, f) for f in test_files] + + status_path = os.path.join(result_folder, "check_status.tsv") + logging.info("Found test_results.tsv") + status = list(csv.reader(open(status_path, 'r'), delimiter='\t')) + if len(status) != 1 or len(status[0]) != 2: + return "error", "Invalid check_status.tsv", test_results, additional_files + state, description = status[0][0], status[0][1] + + results_path = os.path.join(result_folder, "test_results.tsv") + test_results = list(csv.reader(open(results_path, 'r'), delimiter='\t')) + if len(test_results) == 0: + raise Exception("Empty results") + + return state, description, test_results, additional_files + + +def process_logs(s3_client, additional_logs, s3_path_prefix): + additional_urls = [] + for log_path in additional_logs: + if log_path: + additional_urls.append( + s3_client.upload_test_report_to_s3( + log_path, + s3_path_prefix + "/" + os.path.basename(log_path))) + + return additional_urls + + +def upload_results(s3_client, pr_number, commit_sha, test_results, raw_log, additional_files): + additional_files = [raw_log] + additional_files + s3_path_prefix = f"{pr_number}/{commit_sha}/fasttest" + additional_urls = process_logs(s3_client, additional_files, s3_path_prefix) + + branch_url = "https://github.com/ClickHouse/ClickHouse/commits/master" + branch_name = "master" + if pr_number != 0: + branch_name = "PR #{}".format(pr_number) + branch_url = "https://github.com/ClickHouse/ClickHouse/pull/" + str(pr_number) + commit_url = f"https://github.com/ClickHouse/ClickHouse/commit/{commit_sha}" + + task_url = f"https://github.com/ClickHouse/ClickHouse/actions/runs/{os.getenv('GITHUB_RUN_ID')}" + + raw_log_url = additional_urls[0] + additional_urls.pop(0) + + html_report = create_test_html_report(NAME, test_results, raw_log_url, task_url, branch_url, branch_name, commit_url, additional_urls, True) + with open('report.html', 'w') as f: + f.write(html_report) + + url = s3_client.upload_test_report_to_s3('report.html', s3_path_prefix + ".html") + logging.info("Search result in url %s", url) + return url + +def get_commit(gh, commit_sha): + repo = gh.get_repo(os.getenv("GITHUB_REPOSITORY", "ClickHouse/ClickHouse")) + commit = repo.get_commit(commit_sha) + return commit + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + temp_path = os.getenv("TEMP_PATH", os.path.abspath(".")) + caches_path = os.getenv("CACHES_PATH", temp_path) + + if not os.path.exists(temp_path): + os.makedirs(temp_path) + + with open(os.getenv('GITHUB_EVENT_PATH'), 'r') as event_file: + event = json.load(event_file) + + pr_info = PRInfo(event) + + gh = Github(get_best_robot_token()) + + images_path = os.path.join(temp_path, 'changed_images.json') + docker_image = 'clickhouse/fasttest' + if os.path.exists(images_path): + logging.info("Images file exists") + with open(images_path, 'r') as images_fd: + images = json.load(images_fd) + logging.info("Got images %s", images) + if 'clickhouse/fasttest' in images: + docker_image += ':' + images['clickhouse/fasttest'] + + logging.info("Got docker image %s", docker_image) + for i in range(10): + try: + subprocess.check_output(f"docker pull {docker_image}", shell=True) + break + except Exception as ex: + time.sleep(i * 3) + logging.info("Got execption pulling docker %s", ex) + else: + raise Exception(f"Cannot pull dockerhub for image {docker_image}") + + + s3_helper = S3Helper('https://s3.amazonaws.com') + + workspace = os.path.join(temp_path, "fasttest-workspace") + if not os.path.exists(workspace): + os.makedirs(workspace) + + output_path = os.path.join(temp_path, "fasttest-output") + if not os.path.exists(output_path): + os.makedirs(output_path) + + cache_path = os.path.join(caches_path, "fasttest") + if not os.path.exists(cache_path): + os.makedirs(cache_path) + + repo_path = os.path.join(temp_path, "fasttest-repo") + if not os.path.exists(repo_path): + os.makedirs(repo_path) + + run_cmd = get_fasttest_cmd(workspace, output_path, cache_path, repo_path, pr_info.number, pr_info.sha, docker_image) + logging.info("Going to run fasttest with cmd %s", run_cmd) + + logs_path = os.path.join(temp_path, "fasttest-logs") + if not os.path.exists(logs_path): + os.makedirs(logs_path) + + run_log_path = os.path.join(logs_path, 'runlog.log') + with open(run_log_path, 'w') as log: + retcode = subprocess.Popen(run_cmd, shell=True, stderr=log, stdout=log).wait() + if retcode == 0: + logging.info("Run successfully") + else: + logging.info("Run failed") + + subprocess.check_call(f"sudo chown -R ubuntu:ubuntu {temp_path}", shell=True) + subprocess.check_call(f"sudo chown -R ubuntu:ubuntu {cache_path}", shell=True) + + test_output_files = os.listdir(output_path) + additional_logs = [] + for f in test_output_files: + additional_logs.append(os.path.join(output_path, f)) + + test_log_exists = 'test_log.txt' in test_output_files or 'test_result.txt' in test_output_files + test_result_exists = 'test_results.tsv' in test_output_files + test_results = [] + if 'submodule_log.txt' not in test_output_files: + description = "Cannot clone repository" + state = "failure" + elif 'cmake_log.txt' not in test_output_files: + description = "Cannot fetch submodules" + state = "failure" + elif 'build_log.txt' not in test_output_files: + description = "Cannot finish cmake" + state = "failure" + elif 'install_log.txt' not in test_output_files: + description = "Cannot build ClickHouse" + state = "failure" + elif not test_log_exists and not test_result_exists: + description = "Cannot install or start ClickHouse" + state = "failure" + else: + state, description, test_results, additional_logs = process_results(output_path) + + report_url = upload_results(s3_helper, pr_info.number, pr_info.sha, test_results, run_log_path, additional_logs) + print("::notice ::Report url: {}".format(report_url)) + commit = get_commit(gh, pr_info.sha) + commit.create_status(context=NAME, description=description, state=state, target_url=report_url) diff --git a/tests/ci/finish_check.py b/tests/ci/finish_check.py index db405cf8f73..4833f62443c 100644 --- a/tests/ci/finish_check.py +++ b/tests/ci/finish_check.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 import logging -from github import Github -from pr_info import PRInfo import json import os +from github import Github +from pr_info import PRInfo from get_robot_token import get_best_robot_token NAME = 'Run Check (actions)' diff --git a/tests/ci/functional_test_check.py b/tests/ci/functional_test_check.py new file mode 100644 index 00000000000..75a0b31a221 --- /dev/null +++ b/tests/ci/functional_test_check.py @@ -0,0 +1,285 @@ +#!/usr/bin/env python3 + +import csv +import logging +import subprocess +import os +import json +import time +import sys + +from github import Github +import requests + +from report import create_test_html_report +from s3_helper import S3Helper +from get_robot_token import get_best_robot_token +from pr_info import PRInfo + +DOWNLOAD_RETRIES_COUNT = 5 + +def process_logs(s3_client, additional_logs, s3_path_prefix): + additional_urls = [] + for log_path in additional_logs: + if log_path: + additional_urls.append( + s3_client.upload_test_report_to_s3( + log_path, + s3_path_prefix + "/" + os.path.basename(log_path))) + + return additional_urls + + +def upload_results(s3_client, pr_number, commit_sha, test_results, raw_log, additional_files, check_name): + additional_files = [raw_log] + additional_files + s3_path_prefix = f"{pr_number}/{commit_sha}/" + check_name.lower().replace(' ', '_').replace('(', '_').replace(')', '_').replace(',', '_') + additional_urls = process_logs(s3_client, additional_files, s3_path_prefix) + + branch_url = "https://github.com/ClickHouse/ClickHouse/commits/master" + branch_name = "master" + if pr_number != 0: + branch_name = f"PR #{pr_number}" + branch_url = f"https://github.com/ClickHouse/ClickHouse/pull/{pr_number}" + commit_url = f"https://github.com/ClickHouse/ClickHouse/commit/{commit_sha}" + + task_url = f"https://github.com/ClickHouse/ClickHouse/actions/runs/{os.getenv('GITHUB_RUN_ID')}" + + raw_log_url = additional_urls[0] + additional_urls.pop(0) + + html_report = create_test_html_report(check_name, test_results, raw_log_url, task_url, branch_url, branch_name, commit_url, additional_urls, True) + with open('report.html', 'w', encoding='utf-8') as f: + f.write(html_report) + + url = s3_client.upload_test_report_to_s3('report.html', s3_path_prefix + ".html") + logging.info("Search result in url %s", url) + return url + +def get_commit(gh, commit_sha): + repo = gh.get_repo(os.getenv("GITHUB_REPOSITORY", "ClickHouse/ClickHouse")) + commit = repo.get_commit(commit_sha) + return commit + +def get_image_name(check_name): + if 'stateless' in check_name.lower(): + return 'clickhouse/stateless-test' + if 'stateful' in check_name.lower(): + return 'clickhouse/stateful-test' + else: + raise Exception(f"Cannot deduce image name based on check name {check_name}") + + +def dowload_build_with_progress(url, path): + logging.info("Downloading from %s to temp path %s", url, path) + for i in range(DOWNLOAD_RETRIES_COUNT): + try: + with open(path, 'wb') as f: + response = requests.get(url, stream=True) + response.raise_for_status() + total_length = response.headers.get('content-length') + if total_length is None or int(total_length) == 0: + logging.info("No content-length, will download file without progress") + f.write(response.content) + else: + dl = 0 + total_length = int(total_length) + logging.info("Content length is %ld bytes", total_length) + for data in response.iter_content(chunk_size=4096): + dl += len(data) + f.write(data) + if sys.stdout.isatty(): + done = int(50 * dl / total_length) + percent = int(100 * float(dl) / total_length) + eq_str = '=' * done + space_str = ' ' * (50 - done) + sys.stdout.write(f"\r[{eq_str}{space_str}] {percent}%") + sys.stdout.flush() + break + except Exception as ex: + sys.stdout.write("\n") + time.sleep(3) + logging.info("Exception while downloading %s, retry %s", ex, i + 1) + if os.path.exists(path): + os.remove(path) + else: + raise Exception(f"Cannot download dataset from {url}, all retries exceeded") + + sys.stdout.write("\n") + logging.info("Downloading finished") + + +def download_builds(result_path, build_urls): + for url in build_urls: + if url.endswith('.deb'): + fname = os.path.basename(url) + logging.info("Will download %s to %s", fname, result_path) + dowload_build_with_progress(url, os.path.join(result_path, fname)) + + +def get_build_config(build_number, repo_path): + ci_config_path = os.path.join(repo_path, "tests/ci/ci_config.json") + with open(ci_config_path, 'r', encoding='utf-8') as ci_config: + config_dict = json.load(ci_config) + return config_dict['build_config'][build_number] + +def get_build_urls(build_config_str, reports_path): + for root, _, files in os.walk(reports_path): + for f in files: + if build_config_str in f : + logging.info("Found build report json %s", f) + with open(os.path.join(root, f), 'r', encoding='utf-8') as file_handler: + build_report = json.load(file_handler) + return build_report['build_urls'] + return [] + +def build_config_to_string(build_config): + if build_config["package-type"] == "performance": + return "performance" + + return "_".join([ + build_config['compiler'], + build_config['build-type'] if build_config['build-type'] else "relwithdebuginfo", + build_config['sanitizer'] if build_config['sanitizer'] else "none", + build_config['bundled'], + build_config['splitted'], + "tidy" if build_config['tidy'] == "enable" else "notidy", + "with_coverage" if build_config['with_coverage'] else "without_coverage", + build_config['package-type'], + ]) + +def get_run_command(builds_path, result_path, server_log_path, kill_timeout, additional_envs, image): + additional_options = ['--hung-check'] + additional_options.append('--print-time') + additional_options_str = '-e ADDITIONAL_OPTIONS="' + ' '.join(additional_options) + '"' + + envs = [f'-e MAX_RUN_TIME={int(0.9 * kill_timeout)}', '-e S3_URL="https://clickhouse-datasets.s3.amazonaws.com"'] + envs += [f'-e {e}' for e in additional_envs] + env_str = ' '.join(envs) + + return f"docker run --volume={builds_path}:/package_folder " \ + f"--volume={result_path}:/test_output --volume={server_log_path}:/var/log/clickhouse-server " \ + f"--cap-add=SYS_PTRACE {env_str} {additional_options_str} {image}" + + +def process_results(result_folder, server_log_path): + test_results = [] + additional_files = [] + # Just upload all files from result_folder. + # If task provides processed results, then it's responsible for content of result_folder. + if os.path.exists(result_folder): + test_files = [f for f in os.listdir(result_folder) if os.path.isfile(os.path.join(result_folder, f))] + additional_files = [os.path.join(result_folder, f) for f in test_files] + + if os.path.exists(server_log_path): + server_log_files = [f for f in os.listdir(server_log_path) if os.path.isfile(os.path.join(server_log_path, f))] + additional_files = additional_files + [os.path.join(server_log_path, f) for f in server_log_files] + + status_path = os.path.join(result_folder, "check_status.tsv") + logging.info("Found test_results.tsv") + with open(status_path, 'r', encoding='utf-8') as status_file: + status = list(csv.reader(status_file, delimiter='\t')) + + if len(status) != 1 or len(status[0]) != 2: + return "error", "Invalid check_status.tsv", test_results, additional_files + state, description = status[0][0], status[0][1] + + results_path = os.path.join(result_folder, "test_results.tsv") + with open(results_path, 'r', encoding='utf-8') as results_file: + test_results = list(csv.reader(results_file, delimiter='\t')) + if len(test_results) == 0: + raise Exception("Empty results") + + return state, description, test_results, additional_files + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + temp_path = os.getenv("TEMP_PATH", os.path.abspath(".")) + repo_path = os.getenv("REPO_COPY", os.path.abspath("../../")) + reports_path = os.getenv("REPORTS_PATH", "./reports") + + check_name = sys.argv[1] + build_number = int(sys.argv[2]) + kill_timeout = int(sys.argv[3]) + + if not os.path.exists(temp_path): + os.makedirs(temp_path) + + with open(os.getenv('GITHUB_EVENT_PATH'), 'r', encoding='utf-8') as event_file: + event = json.load(event_file) + + pr_info = PRInfo(event) + + gh = Github(get_best_robot_token()) + + + for root, _, files in os.walk(reports_path): + for f in files: + if f == 'changed_images.json': + images_path = os.path.join(root, 'changed_images.json') + break + + image_name = get_image_name(check_name) + + docker_image = image_name + if images_path and os.path.exists(images_path): + logging.info("Images file exists") + with open(images_path, 'r', encoding='utf-8') as images_fd: + images = json.load(images_fd) + logging.info("Got images %s", images) + if image_name in images: + docker_image += ':' + images[image_name] + else: + logging.info("Images file not found") + + for i in range(10): + try: + logging.info("Pulling image %s", docker_image) + subprocess.check_output(f"docker pull {docker_image}", stderr=subprocess.STDOUT, shell=True) + break + except Exception as ex: + time.sleep(i * 3) + logging.info("Got execption pulling docker %s", ex) + else: + raise Exception(f"Cannot pull dockerhub for image docker pull {docker_image}") + + build_config = get_build_config(build_number, repo_path) + build_config_str = build_config_to_string(build_config) + urls = get_build_urls(build_config_str, reports_path) + if not urls: + raise Exception("No build URLs found") + + packages_path = os.path.join(temp_path, "packages") + if not os.path.exists(packages_path): + os.makedirs(packages_path) + + server_log_path = os.path.join(temp_path, "server_log") + if not os.path.exists(server_log_path): + os.makedirs(server_log_path) + + result_path = os.path.join(temp_path, "result_path") + if not os.path.exists(result_path): + os.makedirs(result_path) + + run_log_path = os.path.join(result_path, "runlog.log") + + download_builds(packages_path, urls) + run_command = get_run_command(packages_path, result_path, server_log_path, kill_timeout, [], docker_image) + logging.info("Going to run func tests: %s", run_command) + + with open(run_log_path, 'w', encoding='utf-8') as log: + with subprocess.Popen(run_command, shell=True, stderr=log, stdout=log) as process: + retcode = process.wait() + if retcode == 0: + logging.info("Run successfully") + else: + logging.info("Run failed") + + subprocess.check_call(f"sudo chown -R ubuntu:ubuntu {temp_path}", shell=True) + + s3_helper = S3Helper('https://s3.amazonaws.com') + state, description, test_results, additional_logs = process_results(result_path, server_log_path) + report_url = upload_results(s3_helper, pr_info.number, pr_info.sha, test_results, run_log_path, additional_logs, check_name) + print(f"::notice ::Report url: {report_url}") + commit = get_commit(gh, pr_info.sha) + commit.create_status(context=check_name, description=description, state=state, target_url=report_url) diff --git a/tests/ci/metrics_lambda/app.py b/tests/ci/metrics_lambda/app.py index d2fb048638b..d88e3e45b07 100644 --- a/tests/ci/metrics_lambda/app.py +++ b/tests/ci/metrics_lambda/app.py @@ -53,12 +53,21 @@ def list_runners(access_token): "Authorization": f"token {access_token}", "Accept": "application/vnd.github.v3+json", } - - response = requests.get("https://api.github.com/orgs/ClickHouse/actions/runners", headers=headers) + response = requests.get("https://api.github.com/orgs/ClickHouse/actions/runners?per_page=100", headers=headers) response.raise_for_status() data = response.json() - print("Total runners", data['total_count']) + total_runners = data['total_count'] runners = data['runners'] + + total_pages = int(total_runners / 100 + 1) + print("Total pages", total_pages) + for i in range(2, total_pages + 1): + response = requests.get(f"https://api.github.com/orgs/ClickHouse/actions/runners?page={i}&per_page=100", headers=headers) + response.raise_for_status() + data = response.json() + runners += data['runners'] + + print("Total runners", len(runners)) result = [] for runner in runners: tags = [tag['name'] for tag in runner['labels']] @@ -67,6 +76,24 @@ def list_runners(access_token): result.append(desc) return result +def group_runners_by_tag(listed_runners): + result = {} + + RUNNER_TYPE_LABELS = ['style-checker', 'builder', 'func-tester', 'stress-tester'] + for runner in listed_runners: + for tag in runner.tags: + if tag in RUNNER_TYPE_LABELS: + if tag not in result: + result[tag] = [] + result[tag].append(runner) + break + else: + if 'unlabeled' not in result: + result['unlabeled'] = [] + result['unlabeled'].append(runner) + return result + + def push_metrics_to_cloudwatch(listed_runners, namespace): import boto3 client = boto3.client('cloudwatch') @@ -100,7 +127,7 @@ def push_metrics_to_cloudwatch(listed_runners, namespace): 'Unit': 'Percent', }) - client.put_metric_data(Namespace='RunnersMetrics', MetricData=metrics_data) + client.put_metric_data(Namespace=namespace, MetricData=metrics_data) def main(github_secret_key, github_app_id, push_to_cloudwatch): payload = { @@ -113,10 +140,14 @@ def main(github_secret_key, github_app_id, push_to_cloudwatch): installation_id = get_installation_id(encoded_jwt) access_token = get_access_token(encoded_jwt, installation_id) runners = list_runners(access_token) - if push_to_cloudwatch: - push_metrics_to_cloudwatch(runners, 'RunnersMetrics') - else: - print(runners) + grouped_runners = group_runners_by_tag(runners) + for group, group_runners in grouped_runners.items(): + if push_to_cloudwatch: + push_metrics_to_cloudwatch(group_runners, 'RunnersMetrics/' + group) + else: + print(group) + for runner in group_runners: + print('\t', runner) if __name__ == "__main__": diff --git a/tests/ci/pr_info.py b/tests/ci/pr_info.py index 8feedb2d4d7..46499514027 100644 --- a/tests/ci/pr_info.py +++ b/tests/ci/pr_info.py @@ -1,35 +1,56 @@ #!/usr/bin/env python3 -import requests -import json import os -import subprocess import urllib + +import requests from unidiff import PatchSet +DIFF_IN_DOCUMENTATION_EXT = [".html", ".md", ".yml", ".txt", ".css", ".js", ".xml", ".ico", ".conf", ".svg", ".png", ".jpg", ".py", ".sh"] + class PRInfo: def __init__(self, github_event, need_orgs=False, need_changed_files=False): - self.number = github_event['number'] - if 'after' in github_event: + if 'pull_request' in github_event: # pull request and other similar events + self.number = github_event['number'] + if 'after' in github_event: + self.sha = github_event['after'] + else: + self.sha = github_event['pull_request']['head']['sha'] + + self.labels = { l['name'] for l in github_event['pull_request']['labels'] } + self.user_login = github_event['pull_request']['user']['login'] + self.user_orgs = set([]) + if need_orgs: + user_orgs_response = requests.get(github_event['pull_request']['user']['organizations_url']) + if user_orgs_response.ok: + response_json = user_orgs_response.json() + self.user_orgs = set(org['id'] for org in response_json) + + self.changed_files = set([]) + if need_changed_files: + diff_url = github_event['pull_request']['diff_url'] + diff = urllib.request.urlopen(diff_url) + diff_object = PatchSet(diff, diff.headers.get_charsets()[0]) + self.changed_files = { f.path for f in diff_object } + elif 'commits' in github_event: + self.number = 0 self.sha = github_event['after'] + self.labels = {} + if need_changed_files: + commit_before = github_event['before'] + response = requests.get(f'https://api.github.com/repos/ClickHouse/ClickHouse/compare/{commit_before}...{self.sha}') + response.raise_for_status() + diff = response.json() + + if 'files' in diff: + self.changed_files = [f['filename'] for f in diff['files']] + else: + self.changed_files = set([]) + else: + self.changed_files = set([]) else: - self.sha = github_event['pull_request']['head']['sha'] + raise Exception("Cannot detect type of event") - self.labels = set([l['name'] for l in github_event['pull_request']['labels']]) - self.user_login = github_event['pull_request']['user']['login'] - self.user_orgs = set([]) - if need_orgs: - user_orgs_response = requests.get(github_event['pull_request']['user']['organizations_url']) - if user_orgs_response.ok: - response_json = user_orgs_response.json() - self.user_orgs = set(org['id'] for org in response_json) - - self.changed_files = set([]) - if need_changed_files: - diff_url = github_event['pull_request']['diff_url'] - diff = urllib.request.urlopen(github_event['pull_request']['diff_url']) - diff_object = PatchSet(diff, diff.headers.get_charsets()[0]) - self.changed_files = set([f.path for f in diff_object]) def get_dict(self): return { @@ -39,3 +60,21 @@ class PRInfo: 'user_login': self.user_login, 'user_orgs': self.user_orgs, } + + def has_changes_in_documentation(self): + # If the list wasn't built yet the best we can do is to + # assume that there were changes. + if self.changed_files is None or not self.changed_files: + return True + + for f in self.changed_files: + _, ext = os.path.splitext(f) + if ext in DIFF_IN_DOCUMENTATION_EXT or 'Dockerfile' in f: + return True + return False + + +class FakePRInfo: + def __init__(self): + self.number = 11111 + self.sha = "xxxxxxxxxxxxxxxxxx" diff --git a/tests/ci/pvs_check.py b/tests/ci/pvs_check.py index f8b1b58f307..96dfb01e234 100644 --- a/tests/ci/pvs_check.py +++ b/tests/ci/pvs_check.py @@ -1,15 +1,17 @@ #!/usr/bin/env python3 + +# pylint: disable=line-too-long + import subprocess import os import json import logging +import sys from github import Github from report import create_test_html_report from s3_helper import S3Helper from pr_info import PRInfo -import shutil -import sys -from get_robot_token import get_best_robot_token +from get_robot_token import get_best_robot_token, get_parameter_from_ssm NAME = 'PVS Studio (actions)' LICENCE_NAME = 'Free license: ClickHouse, Yandex' @@ -34,10 +36,12 @@ def _process_txt_report(path): for line in report_file: if 'viva64' in line: continue - elif 'warn' in line: + + if 'warn' in line: warnings.append(':'.join(line.split('\t')[0:2])) elif 'err' in line: errors.append(':'.join(line.split('\t')[0:2])) + return warnings, errors def get_commit(gh, commit_sha): @@ -97,7 +101,7 @@ if __name__ == "__main__": s3_helper = S3Helper('https://s3.amazonaws.com') - licence_key = os.getenv('PVS_STUDIO_KEY') + licence_key = get_parameter_from_ssm('pvs_studio_key') cmd = f"docker run -u $(id -u ${{USER}}):$(id -g ${{USER}}) --volume={repo_path}:/repo_folder --volume={temp_path}:/test_output -e LICENCE_NAME='{LICENCE_NAME}' -e LICENCE_KEY='{licence_key}' {docker_image}" commit = get_commit(gh, pr_info.sha) diff --git a/tests/ci/report.py b/tests/ci/report.py index 5c9b174599d..156e6096605 100644 --- a/tests/ci/report.py +++ b/tests/ci/report.py @@ -32,6 +32,9 @@ table {{ border: 0; }} .main {{ margin-left: 10%; }} p.links a {{ padding: 5px; margin: 3px; background: #FFF; line-height: 2; white-space: nowrap; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05), 0 8px 25px -5px rgba(0, 0, 0, 0.1); }} th {{ cursor: pointer; }} +.failed {{ cursor: pointer; }} +.failed-content.open {{}} +.failed-content {{ display: none; }} {title} @@ -51,7 +54,13 @@ th {{ cursor: pointer; }} """ @@ -107,13 +122,16 @@ def _get_status_style(status): def _get_html_url(url): if isinstance(url, str): - return '{name}'.format(url=url, name=os.path.basename(url)) + return '{name}'.format(url=url, name=os.path.basename(url).replace('%2B', '+').replace('%20', ' ')) if isinstance(url, tuple): - return '{name}'.format(url=url[0], name=url[1]) + return '{name}'.format(url=url[0], name=url[1].replace('%2B', '+').replace('%20', ' ')) return '' -def create_test_html_report(header, test_result, raw_log_url, task_url, branch_url, branch_name, commit_url, additional_urls=[]): +def create_test_html_report(header, test_result, raw_log_url, task_url, branch_url, branch_name, commit_url, additional_urls=None, with_raw_logs=False): + if additional_urls is None: + additional_urls = [] + if test_result: rows_part = "" num_fails = 0 @@ -134,11 +152,13 @@ def create_test_html_report(header, test_result, raw_log_url, task_url, branch_u has_test_logs = True row = "" + is_fail = test_status in ('FAIL', 'FLAKY') + if is_fail and with_raw_logs and test_logs is not None: + row = "" row += "" + test_name + "" style = _get_status_style(test_status) # Allow to quickly scroll to the first failure. - is_fail = test_status == "FAIL" or test_status == 'FLAKY' is_fail_id = "" if is_fail: num_fails = num_fails + 1 @@ -149,17 +169,23 @@ def create_test_html_report(header, test_result, raw_log_url, task_url, branch_u if test_time is not None: row += "" + test_time + "" - if test_logs is not None: + if test_logs is not None and not with_raw_logs: test_logs_html = "
".join([_get_html_url(url) for url in test_logs]) row += "" + test_logs_html + "" row += "" rows_part += row + if test_logs is not None and with_raw_logs: + row = "" + # TODO: compute colspan too + row += "
" + test_logs + "
" + row += "" + rows_part += row headers = BASE_HEADERS if has_test_time: headers.append('Test time, sec.') - if has_test_logs: + if has_test_logs and not with_raw_logs: headers.append('Logs') headers = ''.join(['' + h + '' for h in headers]) @@ -235,7 +261,7 @@ tr:hover td {{filter: brightness(95%);}} @@ -281,7 +307,7 @@ def create_build_html_report(header, build_results, build_logs_urls, artifact_ur link_separator = "
" if artifact_urls: for artifact_url in artifact_urls: - links += LINK_TEMPLATE.format(text=os.path.basename(artifact_url), url=artifact_url) + links += LINK_TEMPLATE.format(text=os.path.basename(artifact_url.replace('%2B', '+').replace('%20', ' ')), url=artifact_url) links += link_separator if links: links = links[:-len(link_separator)] diff --git a/tests/ci/run_check.py b/tests/ci/run_check.py index e6bc7259330..2af50c895da 100644 --- a/tests/ci/run_check.py +++ b/tests/ci/run_check.py @@ -1,11 +1,10 @@ #!/usr/bin/env python3 import os import json -import requests -from pr_info import PRInfo import sys import logging from github import Github +from pr_info import PRInfo from get_robot_token import get_best_robot_token NAME = 'Run Check (actions)' @@ -70,16 +69,16 @@ TRUSTED_CONTRIBUTORS = { def pr_is_by_trusted_user(pr_user_login, pr_user_orgs): if pr_user_login in TRUSTED_CONTRIBUTORS: - logging.info("User '{}' is trusted".format(pr_user_login)) + logging.info("User '%s' is trusted", pr_user_login) return True - logging.info("User '{}' is not trusted".format(pr_user_login)) + logging.info("User '%s' is not trusted", pr_user_login) for org_id in pr_user_orgs: if org_id in TRUSTED_ORG_IDS: - logging.info("Org '{}' is trusted; will mark user {} as trusted".format(org_id, pr_user_login)) + logging.info("Org '%s' is trusted; will mark user %s as trusted", org_id, pr_user_login) return True - logging.info("Org '{}' is not trusted".format(org_id)) + logging.info("Org '%s' is not trusted", org_id) return False @@ -122,5 +121,9 @@ if __name__ == "__main__": commit.create_status(context=NAME, description=description, state="failure", target_url=url) sys.exit(1) else: - print("::notice ::Can run") - commit.create_status(context=NAME, description=description, state="pending", target_url=url) + if 'pr-documentation' in pr_info.labels or 'pr-doc-fix' in pr_info.labels: + commit.create_status(context=NAME, description="Skipping checks for documentation", state="success", target_url=url) + print("::notice ::Can run, but it's documentation PR, skipping") + else: + print("::notice ::Can run") + commit.create_status(context=NAME, description=description, state="pending", target_url=url) diff --git a/tests/ci/s3_helper.py b/tests/ci/s3_helper.py index 3c930f26634..292aa5c0472 100644 --- a/tests/ci/s3_helper.py +++ b/tests/ci/s3_helper.py @@ -2,18 +2,16 @@ import hashlib import logging import os -import boto3 -from botocore.exceptions import ClientError, BotoCoreError from multiprocessing.dummy import Pool +import boto3 from compress_files import compress_file_fast -from get_robot_token import get_parameter_from_ssm def _md5(fname): hash_md5 = hashlib.md5() with open(fname, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): hash_md5.update(chunk) - logging.debug("MD5 for {} is {}".format(fname, hash_md5.hexdigest())) + logging.debug("MD5 for %s is %s", fname, hash_md5.hexdigest()) return hash_md5.hexdigest() @@ -27,13 +25,13 @@ def _flatten_list(lst): return result -class S3Helper(object): +class S3Helper(): def __init__(self, host): self.session = boto3.session.Session(region_name='us-east-1') self.client = self.session.client('s3', endpoint_url=host) def _upload_file_to_s3(self, bucket_name, file_path, s3_path): - logging.debug("Start uploading {} to bucket={} path={}".format(file_path, bucket_name, s3_path)) + logging.debug("Start uploading %s to bucket=%s path=%s", file_path, bucket_name, s3_path) metadata = {} if os.path.getsize(file_path) < 64 * 1024 * 1024: if s3_path.endswith("txt") or s3_path.endswith("log") or s3_path.endswith("err") or s3_path.endswith("out"): @@ -55,8 +53,9 @@ class S3Helper(object): logging.info("File is too large, do not provide content type") self.client.upload_file(file_path, bucket_name, s3_path, ExtraArgs=metadata) - logging.info("Upload {} to {}. Meta: {}".format(file_path, s3_path, metadata)) - return "https://s3.amazonaws.com/{bucket}/{path}".format(bucket=bucket_name, path=s3_path) + logging.info("Upload %s to %s. Meta: %s", file_path, s3_path, metadata) + # last two replacements are specifics of AWS urls: https://jamesd3142.wordpress.com/2018/02/28/amazon-s3-and-the-plus-symbol/ + return "https://s3.amazonaws.com/{bucket}/{path}".format(bucket=bucket_name, path=s3_path).replace('+', '%2B').replace(' ', '%20') def upload_test_report_to_s3(self, file_path, s3_path): return self._upload_file_to_s3('clickhouse-test-reports', file_path, s3_path) @@ -65,7 +64,7 @@ class S3Helper(object): return self._upload_file_to_s3('clickhouse-builds', file_path, s3_path) def _upload_folder_to_s3(self, folder_path, s3_folder_path, bucket_name, keep_dirs_in_s3_path, upload_symlinks): - logging.info("Upload folder '{}' to bucket={} of s3 folder '{}'".format(folder_path, bucket_name, s3_folder_path)) + logging.info("Upload folder '%s' to bucket=%s of s3 folder '%s'", folder_path, bucket_name, s3_folder_path) if not os.path.exists(folder_path): return [] files = os.listdir(folder_path) diff --git a/tests/ci/ssh.py b/tests/ci/ssh.py new file mode 100644 index 00000000000..1c0515364a8 --- /dev/null +++ b/tests/ci/ssh.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python3 + +import shutil +import os +import subprocess +import tempfile +import logging +import signal + + +class SSHAgent: + def __init__(self): + self._env = {} + self._env_backup = {} + self._keys = {} + self.start() + + @property + def pid(self): + return int(self._env["SSH_AGENT_PID"]) + + def start(self): + if shutil.which("ssh-agent") is None: + raise Exception("ssh-agent binary is not available") + + self._env_backup["SSH_AUTH_SOCK"] = os.environ.get("SSH_AUTH_SOCK") + self._env_backup["SSH_OPTIONS"] = os.environ.get("SSH_OPTIONS") + + # set ENV from stdout of ssh-agent + for line in self._run(['ssh-agent']).splitlines(): + name, _, value = line.partition(b"=") + if _ == b"=": + value = value.split(b";", 1)[0] + self._env[name.decode()] = value.decode() + os.environ[name.decode()] = value.decode() + + ssh_options = "," + os.environ["SSH_OPTIONS"] if os.environ.get("SSH_OPTIONS") else "" + os.environ["SSH_OPTIONS"] = f"{ssh_options}UserKnownHostsFile=/dev/null,StrictHostKeyChecking=no" + + def add(self, key): + key_pub = self._key_pub(key) + + if key_pub in self._keys: + self._keys[key_pub] += 1 + else: + self._run(["ssh-add", "-"], stdin=key.encode()) + self._keys[key_pub] = 1 + + return key_pub + + def remove(self, key_pub): + if key_pub not in self._keys: + raise Exception(f"Private key not found, public part: {key_pub}") + + if self._keys[key_pub] > 1: + self._keys[key_pub] -= 1 + else: + with tempfile.NamedTemporaryFile() as f: + f.write(key_pub) + f.flush() + self._run(["ssh-add", "-d", f.name]) + self._keys.pop(key_pub) + + def print_keys(self): + keys = self._run(["ssh-add", "-l"]).splitlines() + if keys: + logging.info("ssh-agent keys:") + for key in keys: + logging.info("%s", key) + else: + logging.info("ssh-agent (pid %d) is empty", self.pid) + + def kill(self): + for k, v in self._env.items(): + os.environ.pop(k, None) + + for k, v in self._env_backup.items(): + if v is not None: + os.environ[k] = v + + os.kill(self.pid, signal.SIGTERM) + + def _key_pub(self, key): + with tempfile.NamedTemporaryFile() as f: + f.write(key.encode()) + f.flush() + return self._run(["ssh-keygen", "-y", "-f", f.name]) + + @staticmethod + def _run(cmd, stdin=None): + shell = isinstance(cmd, str) + with subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE if stdin else None, shell=shell) as p: + stdout, stderr = p.communicate(stdin) + + if stdout.strip().decode() == "The agent has no identities.": + return "" + + if p.returncode: + message = stderr.strip() + b"\n" + stdout.strip() + raise Exception(message.strip().decode()) + + return stdout + +class SSHKey: + def __init__(self, key_name): + self.key = os.getenv(key_name) + self._key_pub = None + self._ssh_agent = SSHAgent() + + def __enter__(self): + self._key_pub = self._ssh_agent.add(self.key) + self._ssh_agent.print_keys() + + def __exit__(self, exc_type, exc_val, exc_tb): + self._ssh_agent.remove(self._key_pub) + self._ssh_agent.print_keys() diff --git a/tests/ci/stress_check.py b/tests/ci/stress_check.py new file mode 100644 index 00000000000..a7730285025 --- /dev/null +++ b/tests/ci/stress_check.py @@ -0,0 +1,275 @@ +#!/usr/bin/env python3 + +#!/usr/bin/env python3 + +import csv +import logging +import subprocess +import os +import json +import time +import sys + +from github import Github +import requests + +from report import create_test_html_report +from s3_helper import S3Helper +from get_robot_token import get_best_robot_token +from pr_info import PRInfo + + +DOWNLOAD_RETRIES_COUNT = 5 + +def dowload_build_with_progress(url, path): + logging.info("Downloading from %s to temp path %s", url, path) + for i in range(DOWNLOAD_RETRIES_COUNT): + try: + with open(path, 'wb') as f: + response = requests.get(url, stream=True) + response.raise_for_status() + total_length = response.headers.get('content-length') + if total_length is None or int(total_length) == 0: + logging.info("No content-length, will download file without progress") + f.write(response.content) + else: + dl = 0 + total_length = int(total_length) + logging.info("Content length is %ld bytes", total_length) + for data in response.iter_content(chunk_size=4096): + dl += len(data) + f.write(data) + if sys.stdout.isatty(): + done = int(50 * dl / total_length) + percent = int(100 * float(dl) / total_length) + eq_str = '=' * done + space_str = ' ' * (50 - done) + sys.stdout.write(f"\r[{eq_str}{space_str}] {percent}%") + sys.stdout.flush() + break + except Exception as ex: + sys.stdout.write("\n") + time.sleep(3) + logging.info("Exception while downloading %s, retry %s", ex, i + 1) + if os.path.exists(path): + os.remove(path) + else: + raise Exception(f"Cannot download dataset from {url}, all retries exceeded") + + sys.stdout.write("\n") + logging.info("Downloading finished") + + +def download_builds(result_path, build_urls): + for url in build_urls: + if url.endswith('.deb'): + fname = os.path.basename(url) + logging.info("Will download %s to %s", fname, result_path) + dowload_build_with_progress(url, os.path.join(result_path, fname)) + +def get_build_config(build_number, repo_path): + ci_config_path = os.path.join(repo_path, "tests/ci/ci_config.json") + with open(ci_config_path, 'r', encoding='utf-8') as ci_config: + config_dict = json.load(ci_config) + return config_dict['build_config'][build_number] + +def get_build_urls(build_config_str, reports_path): + for root, _, files in os.walk(reports_path): + for f in files: + if build_config_str in f : + logging.info("Found build report json %s", f) + with open(os.path.join(root, f), 'r', encoding='utf-8') as file_handler: + build_report = json.load(file_handler) + return build_report['build_urls'] + return [] + +def build_config_to_string(build_config): + if build_config["package-type"] == "performance": + return "performance" + + return "_".join([ + build_config['compiler'], + build_config['build-type'] if build_config['build-type'] else "relwithdebuginfo", + build_config['sanitizer'] if build_config['sanitizer'] else "none", + build_config['bundled'], + build_config['splitted'], + "tidy" if build_config['tidy'] == "enable" else "notidy", + "with_coverage" if build_config['with_coverage'] else "without_coverage", + build_config['package-type'], + ]) + + +def get_run_command(build_path, result_folder, server_log_folder, image): + cmd = "docker run -e S3_URL='https://clickhouse-datasets.s3.amazonaws.com' " + \ + f"--volume={build_path}:/package_folder " \ + f"--volume={result_folder}:/test_output " \ + f"--volume={server_log_folder}:/var/log/clickhouse-server {image}" + + return cmd + +def process_logs(s3_client, additional_logs, s3_path_prefix): + additional_urls = [] + for log_path in additional_logs: + if log_path: + additional_urls.append( + s3_client.upload_test_report_to_s3( + log_path, + s3_path_prefix + "/" + os.path.basename(log_path))) + + return additional_urls + +def upload_results(s3_client, pr_number, commit_sha, test_results, raw_log, additional_files, check_name): + additional_files = [raw_log] + additional_files + s3_path_prefix = f"{pr_number}/{commit_sha}/" + check_name.lower().replace(' ', '_').replace('(', '_').replace(')', '_').replace(',', '_') + additional_urls = process_logs(s3_client, additional_files, s3_path_prefix) + + branch_url = "https://github.com/ClickHouse/ClickHouse/commits/master" + branch_name = "master" + if pr_number != 0: + branch_name = f"PR #{pr_number}" + branch_url = f"https://github.com/ClickHouse/ClickHouse/pull/{pr_number}" + commit_url = f"https://github.com/ClickHouse/ClickHouse/commit/{commit_sha}" + + task_url = f"https://github.com/ClickHouse/ClickHouse/actions/runs/{os.getenv('GITHUB_RUN_ID')}" + + raw_log_url = additional_urls[0] + additional_urls.pop(0) + + html_report = create_test_html_report(check_name, test_results, raw_log_url, task_url, branch_url, branch_name, commit_url, additional_urls, True) + with open('report.html', 'w', encoding='utf-8') as f: + f.write(html_report) + + url = s3_client.upload_test_report_to_s3('report.html', s3_path_prefix + ".html") + logging.info("Search result in url %s", url) + return url + +def get_commit(gh, commit_sha): + repo = gh.get_repo(os.getenv("GITHUB_REPOSITORY", "ClickHouse/ClickHouse")) + commit = repo.get_commit(commit_sha) + return commit + +def process_results(result_folder, server_log_path, run_log_path): + test_results = [] + additional_files = [] + # Just upload all files from result_folder. + # If task provides processed results, then it's responsible for content of result_folder. + if os.path.exists(result_folder): + test_files = [f for f in os.listdir(result_folder) if os.path.isfile(os.path.join(result_folder, f))] + additional_files = [os.path.join(result_folder, f) for f in test_files] + + if os.path.exists(server_log_path): + server_log_files = [f for f in os.listdir(server_log_path) if os.path.isfile(os.path.join(server_log_path, f))] + additional_files = additional_files + [os.path.join(server_log_path, f) for f in server_log_files] + + additional_files.append(run_log_path) + + status_path = os.path.join(result_folder, "check_status.tsv") + if not os.path.exists(status_path): + return "failure", "check_status.tsv doesn't exists", test_results, additional_files + + logging.info("Found check_status.tsv") + with open(status_path, 'r', encoding='utf-8') as status_file: + status = list(csv.reader(status_file, delimiter='\t')) + + if len(status) != 1 or len(status[0]) != 2: + return "error", "Invalid check_status.tsv", test_results, additional_files + state, description = status[0][0], status[0][1] + + results_path = os.path.join(result_folder, "test_results.tsv") + with open(results_path, 'r', encoding='utf-8') as results_file: + test_results = list(csv.reader(results_file, delimiter='\t')) + if len(test_results) == 0: + raise Exception("Empty results") + + return state, description, test_results, additional_files + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + temp_path = os.getenv("TEMP_PATH", os.path.abspath(".")) + repo_path = os.getenv("REPO_COPY", os.path.abspath("../../")) + reports_path = os.getenv("REPORTS_PATH", "./reports") + + check_name = sys.argv[1] + build_number = int(sys.argv[2]) + + if not os.path.exists(temp_path): + os.makedirs(temp_path) + + with open(os.getenv('GITHUB_EVENT_PATH'), 'r', encoding='utf-8') as event_file: + event = json.load(event_file) + + pr_info = PRInfo(event) + + gh = Github(get_best_robot_token()) + + for root, _, files in os.walk(reports_path): + for f in files: + if f == 'changed_images.json': + images_path = os.path.join(root, 'changed_images.json') + break + + image_name = "clickhouse/stress-test" + + docker_image = image_name + if images_path and os.path.exists(images_path): + logging.info("Images file exists") + with open(images_path, 'r', encoding='utf-8') as images_fd: + images = json.load(images_fd) + logging.info("Got images %s", images) + if image_name in images: + docker_image += ':' + images[image_name] + else: + logging.info("Images file not found") + + for i in range(10): + try: + logging.info("Pulling image %s", docker_image) + subprocess.check_output(f"docker pull {docker_image}", stderr=subprocess.STDOUT, shell=True) + break + except Exception as ex: + time.sleep(i * 3) + logging.info("Got execption pulling docker %s", ex) + else: + raise Exception(f"Cannot pull dockerhub for image docker pull {docker_image}") + + build_config = get_build_config(build_number, repo_path) + build_config_str = build_config_to_string(build_config) + urls = get_build_urls(build_config_str, reports_path) + if not urls: + raise Exception("No build URLs found") + + packages_path = os.path.join(temp_path, "packages") + if not os.path.exists(packages_path): + os.makedirs(packages_path) + + server_log_path = os.path.join(temp_path, "server_log") + if not os.path.exists(server_log_path): + os.makedirs(server_log_path) + + result_path = os.path.join(temp_path, "result_path") + if not os.path.exists(result_path): + os.makedirs(result_path) + + run_log_path = os.path.join(temp_path, "runlog.log") + + download_builds(packages_path, urls) + run_command = get_run_command(packages_path, result_path, server_log_path, docker_image) + logging.info("Going to run func tests: %s", run_command) + + with open(run_log_path, 'w', encoding='utf-8') as log: + with subprocess.Popen(run_command, shell=True, stderr=log, stdout=log) as process: + retcode = process.wait() + if retcode == 0: + logging.info("Run successfully") + else: + logging.info("Run failed") + + subprocess.check_call(f"sudo chown -R ubuntu:ubuntu {temp_path}", shell=True) + + s3_helper = S3Helper('https://s3.amazonaws.com') + state, description, test_results, additional_logs = process_results(result_path, server_log_path, run_log_path) + report_url = upload_results(s3_helper, pr_info.number, pr_info.sha, test_results, run_log_path, additional_logs, check_name) + print(f"::notice ::Report url: {report_url}") + commit = get_commit(gh, pr_info.sha) + commit.create_status(context=check_name, description=description, state=state, target_url=report_url) diff --git a/tests/ci/style_check.py b/tests/ci/style_check.py index 4a8cde70bc2..a0516623c41 100644 --- a/tests/ci/style_check.py +++ b/tests/ci/style_check.py @@ -1,14 +1,13 @@ #!/usr/bin/env python3 -from github import Github -from report import create_test_html_report -import shutil import logging import subprocess import os import csv -from s3_helper import S3Helper import time import json +from github import Github +from report import create_test_html_report +from s3_helper import S3Helper from pr_info import PRInfo from get_robot_token import get_best_robot_token @@ -85,15 +84,6 @@ def get_commit(gh, commit_sha): commit = repo.get_commit(commit_sha) return commit -def update_check_with_curl(check_id): - cmd_template = ("curl -v --request PATCH --url https://api.github.com/repos/ClickHouse/ClickHouse/check-runs/{} " - "--header 'authorization: Bearer {}' " - "--header 'Accept: application/vnd.github.v3+json' " - "--header 'content-type: application/json' " - "-d '{{\"name\" : \"hello-world-name\"}}'") - cmd = cmd_template.format(check_id, os.getenv("GITHUB_TOKEN")) - subprocess.check_call(cmd, shell=True) - if __name__ == "__main__": logging.basicConfig(level=logging.INFO) repo_path = os.path.join(os.getenv("GITHUB_WORKSPACE", os.path.abspath("../../"))) diff --git a/tests/ci/termination_lambda/app.py b/tests/ci/termination_lambda/app.py index 0b39cf73f25..cd7d51ae8eb 100644 --- a/tests/ci/termination_lambda/app.py +++ b/tests/ci/termination_lambda/app.py @@ -49,12 +49,20 @@ def list_runners(access_token): "Authorization": f"token {access_token}", "Accept": "application/vnd.github.v3+json", } - - response = requests.get("https://api.github.com/orgs/ClickHouse/actions/runners", headers=headers) + response = requests.get("https://api.github.com/orgs/ClickHouse/actions/runners?per_page=100", headers=headers) response.raise_for_status() data = response.json() - print("Total runners", data['total_count']) + total_runners = data['total_count'] runners = data['runners'] + + total_pages = int(total_runners / 100 + 1) + for i in range(2, total_pages + 1): + response = requests.get(f"https://api.github.com/orgs/ClickHouse/actions/runners?page={i}&per_page=100", headers=headers) + response.raise_for_status() + data = response.json() + runners += data['runners'] + + print("Total runners", len(runners)) result = [] for runner in runners: tags = [tag['name'] for tag in runner['labels']] diff --git a/tests/ci/version_helper.py b/tests/ci/version_helper.py new file mode 100644 index 00000000000..dd3845eae66 --- /dev/null +++ b/tests/ci/version_helper.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python3 +import os +import subprocess +import datetime + +FILE_WITH_VERSION_PATH = "cmake/autogenerated_versions.txt" +CHANGELOG_IN_PATH = "debian/changelog.in" +CHANGELOG_PATH = "debian/changelog" +CONTRIBUTORS_SCRIPT_DIR = "src/Storages/System/" + + +class ClickHouseVersion(): + def __init__(self, major, minor, patch, tweak, revision): + self.major = major + self.minor = minor + self.patch = patch + self.tweak = tweak + self.revision = revision + + def minor_update(self): + return ClickHouseVersion( + self.major, + self.minor + 1, + 1, + 1, + self.revision + 1) + + def patch_update(self): + return ClickHouseVersion( + self.major, + self.minor, + self.patch + 1, + 1, + self.revision) + + def tweak_update(self): + return ClickHouseVersion( + self.major, + self.minor, + self.patch, + self.tweak + 1, + self.revision) + + def get_version_string(self): + return '.'.join([ + str(self.major), + str(self.minor), + str(self.patch), + str(self.tweak) + ]) + + def as_tuple(self): + return (self.major, self.minor, self.patch, self.tweak) + + +class VersionType(): + STABLE = "stable" + TESTING = "testing" + + +def build_version_description(version, version_type): + return "v" + version.get_version_string() + "-" + version_type + + +def _get_version_from_line(line): + _, ver_with_bracket = line.strip().split(' ') + return ver_with_bracket[:-1] + + +def get_version_from_repo(repo_path): + path_to_file = os.path.join(repo_path, FILE_WITH_VERSION_PATH) + major = 0 + minor = 0 + patch = 0 + tweak = 0 + version_revision = 0 + with open(path_to_file, 'r') as ver_file: + for line in ver_file: + if "VERSION_MAJOR" in line and "math" not in line and "SET" in line: + major = _get_version_from_line(line) + elif "VERSION_MINOR" in line and "math" not in line and "SET" in line: + minor = _get_version_from_line(line) + elif "VERSION_PATCH" in line and "math" not in line and "SET" in line: + patch = _get_version_from_line(line) + elif "VERSION_REVISION" in line and "math" not in line: + version_revision = _get_version_from_line(line) + return ClickHouseVersion(major, minor, patch, tweak, version_revision) + + +def _update_cmake_version(repo_path, version, sha, version_type): + cmd = """sed -i --follow-symlinks -e "s/SET(VERSION_REVISION [^) ]*/SET(VERSION_REVISION {revision}/g;" \ + -e "s/SET(VERSION_DESCRIBE [^) ]*/SET(VERSION_DESCRIBE {version_desc}/g;" \ + -e "s/SET(VERSION_GITHASH [^) ]*/SET(VERSION_GITHASH {sha}/g;" \ + -e "s/SET(VERSION_MAJOR [^) ]*/SET(VERSION_MAJOR {major}/g;" \ + -e "s/SET(VERSION_MINOR [^) ]*/SET(VERSION_MINOR {minor}/g;" \ + -e "s/SET(VERSION_PATCH [^) ]*/SET(VERSION_PATCH {patch}/g;" \ + -e "s/SET(VERSION_STRING [^) ]*/SET(VERSION_STRING {version_string}/g;" \ + {path}""".format( + revision=version.revision, + version_desc=build_version_description(version, version_type), + sha=sha, + major=version.major, + minor=version.minor, + patch=version.patch, + version_string=version.get_version_string(), + path=os.path.join(repo_path, FILE_WITH_VERSION_PATH), + ) + subprocess.check_call(cmd, shell=True) + + +def _update_changelog(repo_path, version): + cmd = """sed \ + -e "s/[@]VERSION_STRING[@]/{version_str}/g" \ + -e "s/[@]DATE[@]/{date}/g" \ + -e "s/[@]AUTHOR[@]/clickhouse-release/g" \ + -e "s/[@]EMAIL[@]/clickhouse-release@yandex-team.ru/g" \ + < {in_path} > {changelog_path} + """.format( + version_str=version.get_version_string(), + date=datetime.datetime.now().strftime("%a, %d %b %Y %H:%M:%S") + " +0300", + in_path=os.path.join(repo_path, CHANGELOG_IN_PATH), + changelog_path=os.path.join(repo_path, CHANGELOG_PATH) + ) + subprocess.check_call(cmd, shell=True) + +def _update_contributors(repo_path): + cmd = "cd {} && ./StorageSystemContributors.sh".format(os.path.join(repo_path, CONTRIBUTORS_SCRIPT_DIR)) + subprocess.check_call(cmd, shell=True) + +def _update_dockerfile(repo_path, version): + version_str_for_docker = '.'.join([str(version.major), str(version.minor), str(version.patch), '*']) + cmd = "ls -1 {path}/docker/*/Dockerfile | xargs sed -i -r -e 's/ARG version=.+$/ARG version='{ver}'/'".format(path=repo_path, ver=version_str_for_docker) + subprocess.check_call(cmd, shell=True) + +def update_version_local(repo_path, sha, version, version_type="testing"): + _update_contributors(repo_path) + _update_cmake_version(repo_path, version, sha, version_type) + _update_changelog(repo_path, version) + _update_dockerfile(repo_path, version) diff --git a/tests/ci/worker/init_builder.sh b/tests/ci/worker/init_builder.sh new file mode 100644 index 00000000000..dc3f777bcca --- /dev/null +++ b/tests/ci/worker/init_builder.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "Running init script" +export DEBIAN_FRONTEND=noninteractive +export RUNNER_HOME=/home/ubuntu/actions-runner + +echo "Receiving token" +export RUNNER_TOKEN=`/usr/local/bin/aws ssm get-parameter --name github_runner_registration_token --with-decryption --output text --query Parameter.Value` +export RUNNER_URL="https://github.com/ClickHouse" +# Funny fact, but metadata service has fixed IP +export INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id` + +cd $RUNNER_HOME + +echo "Going to configure runner" +sudo -u ubuntu ./config.sh --url $RUNNER_URL --token $RUNNER_TOKEN --name $INSTANCE_ID --runnergroup Default --labels 'self-hosted,Linux,X64,builder' --work _work + +echo "Run" +sudo -u ubuntu ./run.sh diff --git a/tests/ci/worker/init_func_tester.sh b/tests/ci/worker/init_func_tester.sh new file mode 100644 index 00000000000..b117f11556d --- /dev/null +++ b/tests/ci/worker/init_func_tester.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "Running init script" +export DEBIAN_FRONTEND=noninteractive +export RUNNER_HOME=/home/ubuntu/actions-runner + +echo "Receiving token" +export RUNNER_TOKEN=`/usr/local/bin/aws ssm get-parameter --name github_runner_registration_token --with-decryption --output text --query Parameter.Value` +export RUNNER_URL="https://github.com/ClickHouse" +# Funny fact, but metadata service has fixed IP +export INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id` + +cd $RUNNER_HOME + +echo "Going to configure runner" +sudo -u ubuntu ./config.sh --url $RUNNER_URL --token $RUNNER_TOKEN --name $INSTANCE_ID --runnergroup Default --labels 'self-hosted,Linux,X64,func-tester' --work _work + +echo "Run" +sudo -u ubuntu ./run.sh diff --git a/tests/ci/worker/init_stress_tester.sh b/tests/ci/worker/init_stress_tester.sh new file mode 100644 index 00000000000..54ed944b274 --- /dev/null +++ b/tests/ci/worker/init_stress_tester.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "Running init script" +export DEBIAN_FRONTEND=noninteractive +export RUNNER_HOME=/home/ubuntu/actions-runner + +echo "Receiving token" +export RUNNER_TOKEN=`/usr/local/bin/aws ssm get-parameter --name github_runner_registration_token --with-decryption --output text --query Parameter.Value` +export RUNNER_URL="https://github.com/ClickHouse" +# Funny fact, but metadata service has fixed IP +export INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id` + +cd $RUNNER_HOME + +echo "Going to configure runner" +sudo -u ubuntu ./config.sh --url $RUNNER_URL --token $RUNNER_TOKEN --name $INSTANCE_ID --runnergroup Default --labels 'self-hosted,Linux,X64,stress-tester' --work _work + +echo "Run" +sudo -u ubuntu ./run.sh diff --git a/tests/ci/worker/init.sh b/tests/ci/worker/init_style_checker.sh similarity index 94% rename from tests/ci/worker/init.sh rename to tests/ci/worker/init_style_checker.sh index 2f6638f14b5..77cf66b5262 100644 --- a/tests/ci/worker/init.sh +++ b/tests/ci/worker/init_style_checker.sh @@ -14,7 +14,7 @@ export INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id` cd $RUNNER_HOME echo "Going to configure runner" -sudo -u ubuntu ./config.sh --url $RUNNER_URL --token $RUNNER_TOKEN --name $INSTANCE_ID --runnergroup Default --labels 'self-hosted,Linux,X64' --work _work +sudo -u ubuntu ./config.sh --url $RUNNER_URL --token $RUNNER_TOKEN --name $INSTANCE_ID --runnergroup Default --labels 'self-hosted,Linux,X64,style-checker' --work _work echo "Run" sudo -u ubuntu ./run.sh diff --git a/tests/ci/worker/ubuntu_ami.sh b/tests/ci/worker/ubuntu_style_check.sh similarity index 87% rename from tests/ci/worker/ubuntu_ami.sh rename to tests/ci/worker/ubuntu_style_check.sh index 2609c1a69f3..bf5c6057bed 100644 --- a/tests/ci/worker/ubuntu_ami.sh +++ b/tests/ci/worker/ubuntu_style_check.sh @@ -27,6 +27,16 @@ apt-get install --yes --no-install-recommends docker-ce docker-ce-cli containerd usermod -aG docker ubuntu +# enable ipv6 in containers (fixed-cidr-v6 is some random network mask) +cat < /etc/docker/daemon.json +{ + "ipv6": true, + "fixed-cidr-v6": "2001:db8:1::/64" +} +EOT + +systemctl restart docker + pip install boto3 pygithub requests urllib3 unidiff mkdir -p $RUNNER_HOME && cd $RUNNER_HOME diff --git a/tests/clickhouse-test b/tests/clickhouse-test index 5f6960e57c4..3fd49477906 100755 --- a/tests/clickhouse-test +++ b/tests/clickhouse-test @@ -170,12 +170,15 @@ def get_zookeeper_session_uptime(args): def need_retry(args, stdout, stderr, total_time): - # Sometimes we may get unexpected exception like "Replica is readonly" or "Shutdown is called for table" - # instead of "Session expired" or "Connection loss" - # Retry if session was expired during test execution - session_uptime = get_zookeeper_session_uptime(args) - if session_uptime is not None and session_uptime < math.ceil(total_time): - return True + if args.check_zookeeper_session: + # Sometimes we may get unexpected exception like "Replica is readonly" or "Shutdown is called for table" + # instead of "Session expired" or "Connection loss" + # Retry if session was expired during test execution. + # If ZooKeeper is configured, then it's more reliable than checking stderr, + # but the following condition is always true if ZooKeeper is not configured. + session_uptime = get_zookeeper_session_uptime(args) + if session_uptime is not None and session_uptime < math.ceil(total_time): + return True return any(msg in stdout for msg in MESSAGES_TO_RETRY) or any(msg in stderr for msg in MESSAGES_TO_RETRY) @@ -1309,7 +1312,7 @@ if __name__ == '__main__': parser.add_argument('-j', '--jobs', default=1, nargs='?', type=int, help='Run all tests in parallel') parser.add_argument('--test-runs', default=1, nargs='?', type=int, help='Run each test many times (useful for e.g. flaky check)') parser.add_argument('-U', '--unified', default=3, type=int, help='output NUM lines of unified context') - parser.add_argument('-r', '--server-check-retries', default=90, type=int, help='Num of tries to execute SELECT 1 before tests started') + parser.add_argument('-r', '--server-check-retries', default=180, type=int, help='Num of tries to execute SELECT 1 before tests started') parser.add_argument('--db-engine', help='Database engine name') parser.add_argument('--replicated-database', action='store_true', default=False, help='Run tests with Replicated database engine') parser.add_argument('--fast-tests-only', action='store_true', default=False, help='Run only fast tests (the tests without the "no-fasttest" tag)') @@ -1320,6 +1323,7 @@ if __name__ == '__main__': parser.add_argument('--no-long', action='store_true', dest='no_long', help='Do not run long tests') parser.add_argument('--client-option', nargs='+', help='Specify additional client argument') parser.add_argument('--print-time', action='store_true', dest='print_time', help='Print test time') + parser.add_argument('--check-zookeeper-session', action='store_true', help='Check ZooKeeper session uptime to determine if failed test should be retried') group = parser.add_mutually_exclusive_group(required=False) group.add_argument('--zookeeper', action='store_true', default=None, dest='zookeeper', help='Run zookeeper related tests') diff --git a/tests/config/config.d/keeper_port.xml b/tests/config/config.d/keeper_port.xml index 9523c25df21..fc6f8240f1e 100644 --- a/tests/config/config.d/keeper_port.xml +++ b/tests/config/config.d/keeper_port.xml @@ -11,6 +11,11 @@ 1000000000000000 10000 + + + 0 + 0 + 0 diff --git a/tests/config/config.d/named_collection.xml b/tests/config/config.d/named_collection.xml new file mode 100644 index 00000000000..e48bac7d4ef --- /dev/null +++ b/tests/config/config.d/named_collection.xml @@ -0,0 +1,13 @@ + + + + 127.0.0.2 + 9000 + remote_test
+
+ + 127.0.0.{1,2} + remote_test
+
+
+
diff --git a/tests/config/install.sh b/tests/config/install.sh index ba6ba0cd07c..a451c9f3ed1 100755 --- a/tests/config/install.sh +++ b/tests/config/install.sh @@ -40,6 +40,7 @@ ln -sf $SRC_PATH/config.d/encryption.xml $DEST_SERVER_PATH/config.d/ ln -sf $SRC_PATH/config.d/CORS.xml $DEST_SERVER_PATH/config.d/ ln -sf $SRC_PATH/config.d/zookeeper_log.xml $DEST_SERVER_PATH/config.d/ ln -sf $SRC_PATH/config.d/logger.xml $DEST_SERVER_PATH/config.d/ +ln -sf $SRC_PATH/config.d/named_collection.xml $DEST_SERVER_PATH/config.d/ ln -sf $SRC_PATH/users.d/log_queries.xml $DEST_SERVER_PATH/users.d/ ln -sf $SRC_PATH/users.d/readonly.xml $DEST_SERVER_PATH/users.d/ ln -sf $SRC_PATH/users.d/access_management.xml $DEST_SERVER_PATH/users.d/ diff --git a/tests/config/users.d/memory_profiler.xml b/tests/config/users.d/memory_profiler.xml index 56e9ba28347..a165ac701b0 100644 --- a/tests/config/users.d/memory_profiler.xml +++ b/tests/config/users.d/memory_profiler.xml @@ -1,8 +1,8 @@ - + 1Mi 1Mi - + diff --git a/tests/integration/helpers/0_common_enable_dictionaries.xml b/tests/integration/helpers/0_common_enable_dictionaries.xml index b6e52983db2..c7a763eb942 100644 --- a/tests/integration/helpers/0_common_enable_dictionaries.xml +++ b/tests/integration/helpers/0_common_enable_dictionaries.xml @@ -1,4 +1,4 @@ - + /etc/clickhouse-server/dictionaries/*.xml - + diff --git a/tests/integration/helpers/0_common_instance_config.xml b/tests/integration/helpers/0_common_instance_config.xml index c848ebdf45c..f4a9a0b6296 100644 --- a/tests/integration/helpers/0_common_instance_config.xml +++ b/tests/integration/helpers/0_common_instance_config.xml @@ -1,4 +1,4 @@ - + Europe/Moscow 0.0.0.0 custom_ @@ -17,4 +17,4 @@ /var/log/clickhouse-server/stderr.log /var/log/clickhouse-server/stdout.log - + diff --git a/tests/integration/helpers/0_common_instance_users.xml b/tests/integration/helpers/0_common_instance_users.xml index 7e799cb7b10..3399ef5915a 100644 --- a/tests/integration/helpers/0_common_instance_users.xml +++ b/tests/integration/helpers/0_common_instance_users.xml @@ -1,7 +1,7 @@ - + 1 - + diff --git a/tests/integration/helpers/cluster.py b/tests/integration/helpers/cluster.py index 3854cadaba5..70f76c6f1e6 100644 --- a/tests/integration/helpers/cluster.py +++ b/tests/integration/helpers/cluster.py @@ -760,7 +760,7 @@ class ClickHouseCluster: hostname=None, env_variables=None, image="clickhouse/integration-test", tag=None, stay_alive=False, ipv4_address=None, ipv6_address=None, with_installed_binary=False, tmpfs=None, zookeeper_docker_compose_path=None, minio_certs_dir=None, use_keeper=True, - main_config_name="config.xml", users_config_name="users.xml", copy_common_configs=True, config_root_name="yandex"): + main_config_name="config.xml", users_config_name="users.xml", copy_common_configs=True, config_root_name="clickhouse"): """Add an instance to the cluster. @@ -1827,7 +1827,7 @@ class ClickHouseInstance: main_config_name="config.xml", users_config_name="users.xml", copy_common_configs=True, hostname=None, env_variables=None, image="clickhouse/integration-test", tag="latest", - stay_alive=False, ipv4_address=None, ipv6_address=None, with_installed_binary=False, tmpfs=None, config_root_name="yandex"): + stay_alive=False, ipv4_address=None, ipv6_address=None, with_installed_binary=False, tmpfs=None, config_root_name="clickhouse"): self.name = name self.base_cmd = cluster.base_cmd @@ -2056,12 +2056,31 @@ class ClickHouseInstance: def start_clickhouse(self, start_wait_sec=30): if not self.stay_alive: - raise Exception("clickhouse can be started again only with stay_alive=True instance") + raise Exception("ClickHouse can be started again only with stay_alive=True instance") + + time_to_sleep = 0.5 + start_tries = 5 + + total_tries = int(start_wait_sec / time_to_sleep) + query_tries = int(total_tries / start_tries) + + for i in range(start_tries): + # sometimes after SIGKILL (hard reset) server may refuse to start for some time + # for different reasons. + self.exec_in_container(["bash", "-c", "{} --daemon".format(self.clickhouse_start_command)], user=str(os.getuid())) + started = False + for _ in range(query_tries): + try: + self.query("select 1") + started = True + break + except: + time.sleep(time_to_sleep) + if started: + break + else: + raise Exception("Cannot start ClickHouse, see additional info in logs") - self.exec_in_container(["bash", "-c", "{} --daemon".format(self.clickhouse_start_command)], user=str(os.getuid())) - # wait start - from helpers.test_tools import assert_eq_with_retry - assert_eq_with_retry(self, "select 1", "1", retry_count=int(start_wait_sec / 0.5), sleep_time=0.5) def restart_clickhouse(self, stop_start_wait_sec=30, kill=False): self.stop_clickhouse(stop_start_wait_sec, kill) @@ -2341,11 +2360,6 @@ class ClickHouseInstance: shutil.copyfile(p.join(self.base_config_dir, self.main_config_name), p.join(instance_config_dir, self.main_config_name)) shutil.copyfile(p.join(self.base_config_dir, self.users_config_name), p.join(instance_config_dir, self.users_config_name)) - # For old images, keep 'yandex' as root element name. - if self.image.startswith('yandex/'): - os.system("sed -i 's!!!; s!!!;' '{}'".format(p.join(instance_config_dir, self.main_config_name))) - os.system("sed -i 's!!!; s!!!;' '{}'".format(p.join(instance_config_dir, self.users_config_name))) - logging.debug("Create directory for configuration generated in this helper") # used by all utils with any config conf_d_dir = p.abspath(p.join(instance_config_dir, 'conf.d')) @@ -2363,7 +2377,7 @@ class ClickHouseInstance: def write_embedded_config(name, dest_dir, fix_log_level=False): with open(p.join(HELPERS_DIR, name), 'r') as f: data = f.read() - data = data.replace('yandex', self.config_root_name) + data = data.replace('clickhouse', self.config_root_name) if fix_log_level: data = data.replace('test', 'trace') with open(p.join(dest_dir, name), 'w') as r: diff --git a/tests/integration/helpers/zookeeper_config.xml b/tests/integration/helpers/zookeeper_config.xml index 9f864fef276..7a0d7c1de92 100644 --- a/tests/integration/helpers/zookeeper_config.xml +++ b/tests/integration/helpers/zookeeper_config.xml @@ -1,4 +1,4 @@ - + zoo1 @@ -14,4 +14,4 @@ 3000 - + diff --git a/tests/integration/runner b/tests/integration/runner index 10c940afb46..03ea091d750 100755 --- a/tests/integration/runner +++ b/tests/integration/runner @@ -150,8 +150,7 @@ if __name__ == "__main__": parser.add_argument( "--network", - default='host', - help="Set network driver for runnner container") + help="Set network driver for runnner container (defaults to `host`)") parser.add_argument( "--docker-image-version", @@ -276,8 +275,9 @@ if __name__ == "__main__": --volume={library_bridge_bin}:/clickhouse-library-bridge --volume={bin}:/clickhouse \ --volume={base_cfg}:/clickhouse-config --volume={cases_dir}:/ClickHouse/tests/integration \ --volume={src_dir}/Server/grpc_protos:/ClickHouse/src/Server/grpc_protos \ - --volume=/run/xtables.lock:/run/xtables.lock:ro \ + --volume=/run:/run/host:ro \ {dockerd_internal_volume} -e DOCKER_CLIENT_TIMEOUT=300 -e COMPOSE_HTTP_TIMEOUT=600 \ + -e XTABLES_LOCKFILE=/run/host/xtables.lock \ {env_tags} {env_cleanup} -e PYTEST_OPTS='{parallel} {opts} {tests_list} -vvv' {img} {command}".format( net=net, tty=tty, diff --git a/tests/integration/test_allowed_url_from_config/test.py b/tests/integration/test_allowed_url_from_config/test.py index 16be9e755bb..71bcea482f8 100644 --- a/tests/integration/test_allowed_url_from_config/test.py +++ b/tests/integration/test_allowed_url_from_config/test.py @@ -73,23 +73,23 @@ def test_config_without_allowed_hosts(start_cluster): def test_table_function_remote(start_cluster): - assert "not allowed in config.xml" not in node6.query_and_get_error( + assert "not allowed in configuration file" not in node6.query_and_get_error( "SELECT * FROM remoteSecure('example01-01-{1|2}', system, events)", settings={"connections_with_failover_max_tries": 1, "connect_timeout_with_failover_ms": 1000, "connect_timeout_with_failover_secure_ms": 1000, "connect_timeout": 1, "send_timeout": 1}) - assert "not allowed in config.xml" not in node6.query_and_get_error( + assert "not allowed in configuration file" not in node6.query_and_get_error( "SELECT * FROM remoteSecure('example01-01-1,example01-02-1', system, events)", settings={"connections_with_failover_max_tries": 1, "connect_timeout_with_failover_ms": 1000, "connect_timeout_with_failover_secure_ms": 1000, "connect_timeout": 1, "send_timeout": 1}) - assert "not allowed in config.xml" not in node6.query_and_get_error( + assert "not allowed in configuration file" not in node6.query_and_get_error( "SELECT * FROM remote('example01-0{1,2}-1', system, events", settings={"connections_with_failover_max_tries": 1, "connect_timeout_with_failover_ms": 1000, "connect_timeout_with_failover_secure_ms": 1000, "connect_timeout": 1, "send_timeout": 1}) - assert "not allowed in config.xml" not in node6.query_and_get_error( + assert "not allowed in configuration file" not in node6.query_and_get_error( "SELECT * FROM remote('example01-0{1,2}-{1|2}', system, events)", settings={"connections_with_failover_max_tries": 1, "connect_timeout_with_failover_ms": 1000, "connect_timeout_with_failover_secure_ms": 1000, "connect_timeout": 1, "send_timeout": 1}) - assert "not allowed in config.xml" not in node6.query_and_get_error( + assert "not allowed in configuration file" not in node6.query_and_get_error( "SELECT * FROM remoteSecure('example01-{01..02}-{1|2}', system, events)", settings={"connections_with_failover_max_tries": 1, "connect_timeout_with_failover_ms": 1000, "connect_timeout_with_failover_secure_ms": 1000, "connect_timeout": 1, "send_timeout": 1}) @@ -108,9 +108,9 @@ def test_table_function_remote(start_cluster): "connect_timeout_with_failover_secure_ms": 1000, "connect_timeout": 1, "send_timeout": 1}) assert node6.query("SELECT * FROM remote('localhost', system, events)") != "" assert node6.query("SELECT * FROM remoteSecure('localhost', system, metrics)") != "" - assert "URL \"localhost:800\" is not allowed in config.xml" in node6.query_and_get_error( + assert "URL \"localhost:800\" is not allowed in configuration file" in node6.query_and_get_error( "SELECT * FROM remoteSecure('localhost:800', system, events)") - assert "URL \"localhost:800\" is not allowed in config.xml" in node6.query_and_get_error( + assert "URL \"localhost:800\" is not allowed in configuration file" in node6.query_and_get_error( "SELECT * FROM remote('localhost:800', system, metrics)") diff --git a/tests/integration/test_backup_restore_new/test.py b/tests/integration/test_backup_restore_new/test.py index 472ecaf608b..3ba73b3405f 100644 --- a/tests/integration/test_backup_restore_new/test.py +++ b/tests/integration/test_backup_restore_new/test.py @@ -6,9 +6,11 @@ cluster = ClickHouseCluster(__file__) instance = cluster.add_instance('instance') -def create_and_fill_table(): +def create_and_fill_table(engine="MergeTree"): + if engine == "MergeTree": + engine = "MergeTree ORDER BY y PARTITION BY x%10" instance.query("CREATE DATABASE test") - instance.query("CREATE TABLE test.table(x UInt32, y String) ENGINE=MergeTree ORDER BY y PARTITION BY x%10") + instance.query(f"CREATE TABLE test.table(x UInt32, y String) ENGINE={engine}") instance.query("INSERT INTO test.table SELECT number, toString(number) FROM numbers(100)") @@ -36,9 +38,11 @@ def new_backup_name(): return f"test-backup-{backup_id_counter}" -def test_restore_table(): + +@pytest.mark.parametrize("engine", ["MergeTree", "Log", "TinyLog", "StripeLog"]) +def test_restore_table(engine): backup_name = new_backup_name() - create_and_fill_table() + create_and_fill_table(engine=engine) assert instance.query("SELECT count(), sum(x) FROM test.table") == "100\t4950\n" instance.query(f"BACKUP TABLE test.table TO '{backup_name}'") @@ -50,9 +54,10 @@ def test_restore_table(): assert instance.query("SELECT count(), sum(x) FROM test.table") == "100\t4950\n" -def test_restore_table_into_existing_table(): +@pytest.mark.parametrize("engine", ["MergeTree", "Log", "TinyLog", "StripeLog"]) +def test_restore_table_into_existing_table(engine): backup_name = new_backup_name() - create_and_fill_table() + create_and_fill_table(engine=engine) assert instance.query("SELECT count(), sum(x) FROM test.table") == "100\t4950\n" instance.query(f"BACKUP TABLE test.table TO '{backup_name}'") diff --git a/tests/integration/test_backup_with_other_granularity/test.py b/tests/integration/test_backup_with_other_granularity/test.py index 832c1cf35ce..0f35c0f849e 100644 --- a/tests/integration/test_backup_with_other_granularity/test.py +++ b/tests/integration/test_backup_with_other_granularity/test.py @@ -111,7 +111,7 @@ def test_backup_from_old_version_config(started_cluster): def callback(n): n.replace_config("/etc/clickhouse-server/merge_tree_settings.xml", - "1") + "1") node3.restart_with_latest_version(callback_onstop=callback) diff --git a/tests/integration/test_backward_compatibility/test_aggregate_fixed_key.py b/tests/integration/test_backward_compatibility/test_aggregate_fixed_key.py new file mode 100644 index 00000000000..98658ec81d0 --- /dev/null +++ b/tests/integration/test_backward_compatibility/test_aggregate_fixed_key.py @@ -0,0 +1,61 @@ +import pytest + +from helpers.cluster import ClickHouseCluster + +cluster = ClickHouseCluster(__file__, name="aggregate_fixed_key") +node1 = cluster.add_instance('node1', with_zookeeper=True, image='yandex/clickhouse-server', tag='21.3', with_installed_binary=True) +node2 = cluster.add_instance('node2', with_zookeeper=True, image='yandex/clickhouse-server') +node3 = cluster.add_instance('node3', with_zookeeper=True, image='yandex/clickhouse-server') + + +@pytest.fixture(scope="module") +def start_cluster(): + try: + cluster.start() + yield cluster + + finally: + cluster.shutdown() + + +def test_two_level_merge(start_cluster): + for node in start_cluster.instances.values(): + node.query( + """ + CREATE TABLE IF NOT EXISTS test_two_level_merge(date Date, zone UInt32, number UInt32) + ENGINE = MergeTree() PARTITION BY toUInt64(number / 1000) ORDER BY tuple(); + + INSERT INTO + test_two_level_merge + SELECT + toDate('2021-09-28') - number / 1000, + 249081628, + number + FROM + numbers(15000); + """ + ) + + # covers only the keys64 method + for node in start_cluster.instances.values(): + print(node.query( + """ + SELECT + throwIf(uniqExact(date) != count(), 'group by is borked') + FROM ( + SELECT + date + FROM + remote('node{1,2}', default.test_two_level_merge) + WHERE + date BETWEEN toDate('2021-09-20') AND toDate('2021-09-28') + AND zone = 249081628 + GROUP by date, zone + ) + SETTINGS + group_by_two_level_threshold = 1, + group_by_two_level_threshold_bytes = 1, + max_threads = 2, + prefer_localhost_replica = 0 + """ + )) diff --git a/tests/integration/test_config_substitutions/configs/include_from_source.xml b/tests/integration/test_config_substitutions/configs/include_from_source.xml index 6095180bb59..88a8b9d6e3d 100644 --- a/tests/integration/test_config_substitutions/configs/include_from_source.xml +++ b/tests/integration/test_config_substitutions/configs/include_from_source.xml @@ -1,4 +1,4 @@ - + 99999 @@ -14,4 +14,4 @@ default - + diff --git a/tests/integration/test_default_compression_codec/configs/default_compression.xml b/tests/integration/test_default_compression_codec/configs/default_compression.xml index abb2108f780..c0af422a4e6 100644 --- a/tests/integration/test_default_compression_codec/configs/default_compression.xml +++ b/tests/integration/test_default_compression_codec/configs/default_compression.xml @@ -1,4 +1,4 @@ - + @@ -26,4 +26,4 @@ - + diff --git a/tests/integration/test_default_compression_codec/configs/wide_parts_only.xml b/tests/integration/test_default_compression_codec/configs/wide_parts_only.xml index 42e2173f718..10b9edef36d 100644 --- a/tests/integration/test_default_compression_codec/configs/wide_parts_only.xml +++ b/tests/integration/test_default_compression_codec/configs/wide_parts_only.xml @@ -1,6 +1,6 @@ - + 0 0 - + diff --git a/tests/integration/test_dictionaries_config_reload/config/dictionaries_config.xml b/tests/integration/test_dictionaries_config_reload/config/dictionaries_config.xml index 7e62283a83c..3cbf717bb67 100644 --- a/tests/integration/test_dictionaries_config_reload/config/dictionaries_config.xml +++ b/tests/integration/test_dictionaries_config_reload/config/dictionaries_config.xml @@ -1,2 +1,2 @@ - - + + diff --git a/tests/integration/test_dictionaries_config_reload/test.py b/tests/integration/test_dictionaries_config_reload/test.py index 6f6e2488abc..4f338767304 100644 --- a/tests/integration/test_dictionaries_config_reload/test.py +++ b/tests/integration/test_dictionaries_config_reload/test.py @@ -17,9 +17,9 @@ def copy_file_to_container(local_path, dist_path, container_id): os.system("docker cp {local} {cont_id}:{dist}".format(local=local_path, cont_id=container_id, dist=dist_path)) -config = ''' +config = ''' /etc/clickhouse-server/dictionaries/{dictionaries_config} -''' +''' @pytest.fixture(scope="module") diff --git a/tests/integration/test_dictionaries_ddl/test.py b/tests/integration/test_dictionaries_ddl/test.py index 6cce303781b..72652880c58 100644 --- a/tests/integration/test_dictionaries_ddl/test.py +++ b/tests/integration/test_dictionaries_ddl/test.py @@ -228,7 +228,7 @@ def test_http_dictionary_restrictions(started_cluster): """) node3.query("SELECT dictGetString('test.restricted_http_dictionary', 'value', toUInt64(1))") except QueryRuntimeException as ex: - assert 'is not allowed in config.xml' in str(ex) + assert 'is not allowed in configuration file' in str(ex) node3.query("DROP DICTIONARY test.restricted_http_dictionary") diff --git a/tests/integration/test_disk_over_web_server/configs/async_read.xml b/tests/integration/test_disk_over_web_server/configs/async_read.xml new file mode 100644 index 00000000000..4449d83779a --- /dev/null +++ b/tests/integration/test_disk_over_web_server/configs/async_read.xml @@ -0,0 +1,7 @@ + + + + read_threadpool + + + diff --git a/tests/integration/test_disk_over_web_server/test.py b/tests/integration/test_disk_over_web_server/test.py index b8629fdbe9e..55f760f514f 100644 --- a/tests/integration/test_disk_over_web_server/test.py +++ b/tests/integration/test_disk_over_web_server/test.py @@ -11,6 +11,7 @@ def cluster(): cluster.add_instance("node1", main_configs=["configs/storage_conf.xml"], with_nginx=True) cluster.add_instance("node2", main_configs=["configs/storage_conf_web.xml"], with_nginx=True) cluster.add_instance("node3", main_configs=["configs/storage_conf_web.xml"], with_nginx=True) + cluster.add_instance("node_async_read", main_configs=["configs/storage_conf_web.xml"], user_configs=["configs/async_read.xml"], with_nginx=True) cluster.start() node1 = cluster.instances["node1"] @@ -37,9 +38,10 @@ def cluster(): cluster.shutdown() -def test_usage(cluster): +@pytest.mark.parametrize("node_name", ["node2", "node_async_read"]) +def test_usage(cluster, node_name): node1 = cluster.instances["node1"] - node2 = cluster.instances["node2"] + node2 = cluster.instances[node_name] global uuids assert(len(uuids) == 3) for i in range(3): @@ -49,6 +51,8 @@ def test_usage(cluster): SETTINGS storage_policy = 'web'; """.format(i, uuids[i], i, i)) + result = node2.query("SELECT * FROM test{} settings max_threads=20".format(i)) + result = node2.query("SELECT count() FROM test{}".format(i)) assert(int(result) == 500000 * (i+1)) @@ -82,4 +86,3 @@ def test_incorrect_usage(cluster): assert("Table is read-only" in result) node2.query("DROP TABLE test0") - diff --git a/tests/integration/test_distributed_backward_compatability/configs/remote_servers.xml b/tests/integration/test_distributed_backward_compatability/configs/remote_servers.xml index ebce4697529..68b420f36b4 100644 --- a/tests/integration/test_distributed_backward_compatability/configs/remote_servers.xml +++ b/tests/integration/test_distributed_backward_compatability/configs/remote_servers.xml @@ -1,4 +1,4 @@ - + @@ -15,4 +15,4 @@ - + diff --git a/tests/integration/test_executable_user_defined_functions_config_reload/config/executable_user_defined_functions_config.xml b/tests/integration/test_executable_user_defined_functions_config_reload/config/executable_user_defined_functions_config.xml index 7e62283a83c..3cbf717bb67 100644 --- a/tests/integration/test_executable_user_defined_functions_config_reload/config/executable_user_defined_functions_config.xml +++ b/tests/integration/test_executable_user_defined_functions_config_reload/config/executable_user_defined_functions_config.xml @@ -1,2 +1,2 @@ - - + + diff --git a/tests/integration/test_executable_user_defined_functions_config_reload/test.py b/tests/integration/test_executable_user_defined_functions_config_reload/test.py index e5c4f4edb4e..3117b3e72b1 100644 --- a/tests/integration/test_executable_user_defined_functions_config_reload/test.py +++ b/tests/integration/test_executable_user_defined_functions_config_reload/test.py @@ -17,9 +17,9 @@ def copy_file_to_container(local_path, dist_path, container_id): os.system("docker cp {local} {cont_id}:{dist}".format(local=local_path, cont_id=container_id, dist=dist_path)) -config = ''' +config = ''' /etc/clickhouse-server/functions/{user_defined_executable_functions_config} -''' +''' @pytest.fixture(scope="module") diff --git a/tests/integration/test_explain_estimates/test.py b/tests/integration/test_explain_estimates/test.py index a2b65564dbc..7bccfb11a37 100644 --- a/tests/integration/test_explain_estimates/test.py +++ b/tests/integration/test_explain_estimates/test.py @@ -14,11 +14,12 @@ def start_cluster(): finally: cluster.shutdown() - def test_explain_estimates(start_cluster): - node1.query("CREATE TABLE test (i Int64) ENGINE = MergeTree() ORDER BY i SETTINGS index_granularity = 16, write_final_mark = 0") + node1.query("CREATE TABLE test (i Int64) ENGINE = MergeTree() ORDER BY i SETTINGS index_granularity = 16") node1.query("INSERT INTO test SELECT number FROM numbers(128)") node1.query("OPTIMIZE TABLE test") - system_parts_result = node1.query("SELECT any(database), any(table), count() as parts, sum(rows) as rows, sum(marks) as marks FROM system.parts WHERE database = 'default' AND table = 'test' and active = 1 GROUP BY (database, table)") + # sum(marks) - 1 because EXPLAIN ESIMATES does not include final mark. + system_parts_result = node1.query("SELECT any(database), any(table), count() as parts, sum(rows) as rows, sum(marks)-1 as marks FROM system.parts WHERE database = 'default' AND table = 'test' and active = 1 GROUP BY (database, table)") explain_estimates_result = node1.query("EXPLAIN ESTIMATE SELECT * FROM test") assert(system_parts_result == explain_estimates_result) + diff --git a/tests/integration/test_keeper_auth/configs/keeper_config.xml b/tests/integration/test_keeper_auth/configs/keeper_config.xml index b33722dd1d4..1a01b79cebd 100644 --- a/tests/integration/test_keeper_auth/configs/keeper_config.xml +++ b/tests/integration/test_keeper_auth/configs/keeper_config.xml @@ -11,6 +11,10 @@ 10000 trace 75 + + 0 + 0 + 0 diff --git a/tests/integration/test_keeper_back_to_back/configs/enable_keeper.xml b/tests/integration/test_keeper_back_to_back/configs/enable_keeper.xml index a4a560f855c..30a56c6e1e1 100644 --- a/tests/integration/test_keeper_back_to_back/configs/enable_keeper.xml +++ b/tests/integration/test_keeper_back_to_back/configs/enable_keeper.xml @@ -10,6 +10,10 @@ 10000 trace false + + 0 + 0 + 0 diff --git a/tests/integration/test_keeper_nodes_add/__init__.py b/tests/integration/test_keeper_nodes_add/__init__.py new file mode 100644 index 00000000000..e5a0d9b4834 --- /dev/null +++ b/tests/integration/test_keeper_nodes_add/__init__.py @@ -0,0 +1 @@ +#!/usr/bin/env python3 diff --git a/tests/integration/test_keeper_nodes_add/configs/enable_keeper1.xml b/tests/integration/test_keeper_nodes_add/configs/enable_keeper1.xml new file mode 100644 index 00000000000..bd695389fa6 --- /dev/null +++ b/tests/integration/test_keeper_nodes_add/configs/enable_keeper1.xml @@ -0,0 +1,22 @@ + + + 9181 + 1 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + + diff --git a/tests/integration/test_keeper_nodes_add/configs/enable_keeper_three_nodes_1.xml b/tests/integration/test_keeper_nodes_add/configs/enable_keeper_three_nodes_1.xml new file mode 100644 index 00000000000..510424715c4 --- /dev/null +++ b/tests/integration/test_keeper_nodes_add/configs/enable_keeper_three_nodes_1.xml @@ -0,0 +1,32 @@ + + + 9181 + 1 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + + + 3 + node3 + 44444 + + + + diff --git a/tests/integration/test_keeper_nodes_add/configs/enable_keeper_three_nodes_2.xml b/tests/integration/test_keeper_nodes_add/configs/enable_keeper_three_nodes_2.xml new file mode 100644 index 00000000000..264601d8c98 --- /dev/null +++ b/tests/integration/test_keeper_nodes_add/configs/enable_keeper_three_nodes_2.xml @@ -0,0 +1,32 @@ + + + 9181 + 2 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + + + 3 + node3 + 44444 + + + + diff --git a/tests/integration/test_keeper_nodes_add/configs/enable_keeper_three_nodes_3.xml b/tests/integration/test_keeper_nodes_add/configs/enable_keeper_three_nodes_3.xml new file mode 100644 index 00000000000..7f9775939bb --- /dev/null +++ b/tests/integration/test_keeper_nodes_add/configs/enable_keeper_three_nodes_3.xml @@ -0,0 +1,32 @@ + + + 9181 + 3 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + + + 3 + node3 + 44444 + + + + diff --git a/tests/integration/test_keeper_nodes_add/configs/enable_keeper_two_nodes_1.xml b/tests/integration/test_keeper_nodes_add/configs/enable_keeper_two_nodes_1.xml new file mode 100644 index 00000000000..3f6baf1ccc7 --- /dev/null +++ b/tests/integration/test_keeper_nodes_add/configs/enable_keeper_two_nodes_1.xml @@ -0,0 +1,27 @@ + + + 9181 + 1 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + + + + diff --git a/tests/integration/test_keeper_nodes_add/configs/enable_keeper_two_nodes_2.xml b/tests/integration/test_keeper_nodes_add/configs/enable_keeper_two_nodes_2.xml new file mode 100644 index 00000000000..61c9a00ffd6 --- /dev/null +++ b/tests/integration/test_keeper_nodes_add/configs/enable_keeper_two_nodes_2.xml @@ -0,0 +1,27 @@ + + + 9181 + 2 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + + + + diff --git a/tests/integration/test_keeper_nodes_add/test.py b/tests/integration/test_keeper_nodes_add/test.py new file mode 100644 index 00000000000..ae4a996f6b3 --- /dev/null +++ b/tests/integration/test_keeper_nodes_add/test.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 + +import pytest +from helpers.cluster import ClickHouseCluster +import random +import string +import os +import time +from multiprocessing.dummy import Pool +from helpers.network import PartitionManager +from helpers.test_tools import assert_eq_with_retry +from kazoo.client import KazooClient, KazooState + +cluster = ClickHouseCluster(__file__) +CONFIG_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'configs') + +node1 = cluster.add_instance('node1', main_configs=['configs/enable_keeper1.xml'], stay_alive=True) +node2 = cluster.add_instance('node2', main_configs=[], stay_alive=True) +node3 = cluster.add_instance('node3', main_configs=[], stay_alive=True) + + +def get_fake_zk(node, timeout=30.0): + _fake_zk_instance = KazooClient(hosts=cluster.get_instance_ip(node.name) + ":9181", timeout=timeout) + _fake_zk_instance.start() + return _fake_zk_instance + + +@pytest.fixture(scope="module") +def started_cluster(): + try: + cluster.start() + + yield cluster + + finally: + cluster.shutdown() + +def start(node): + node.start_clickhouse() + + +def test_nodes_add(started_cluster): + zk_conn = get_fake_zk(node1) + + for i in range(100): + zk_conn.create("/test_two_" + str(i), b"somedata") + + p = Pool(3) + node2.stop_clickhouse() + node2.copy_file_to_container(os.path.join(CONFIG_DIR, "enable_keeper_two_nodes_2.xml"), "/etc/clickhouse-server/config.d/enable_keeper2.xml") + waiter = p.apply_async(start, (node2,)) + node1.copy_file_to_container(os.path.join(CONFIG_DIR, "enable_keeper_two_nodes_1.xml"), "/etc/clickhouse-server/config.d/enable_keeper1.xml") + node1.query("SYSTEM RELOAD CONFIG") + waiter.wait() + + zk_conn2 = get_fake_zk(node2) + + for i in range(100): + assert zk_conn2.exists("/test_two_" + str(i)) is not None + + zk_conn = get_fake_zk(node1) + + for i in range(100): + zk_conn.create("/test_three_" + str(i), b"somedata") + + node3.stop_clickhouse() + + node3.copy_file_to_container(os.path.join(CONFIG_DIR, "enable_keeper_three_nodes_3.xml"), "/etc/clickhouse-server/config.d/enable_keeper3.xml") + waiter = p.apply_async(start, (node3,)) + node2.copy_file_to_container(os.path.join(CONFIG_DIR, "enable_keeper_three_nodes_2.xml"), "/etc/clickhouse-server/config.d/enable_keeper2.xml") + node1.copy_file_to_container(os.path.join(CONFIG_DIR, "enable_keeper_three_nodes_1.xml"), "/etc/clickhouse-server/config.d/enable_keeper1.xml") + + node1.query("SYSTEM RELOAD CONFIG") + node2.query("SYSTEM RELOAD CONFIG") + + waiter.wait() + zk_conn3 = get_fake_zk(node3) + + for i in range(100): + assert zk_conn3.exists("/test_three_" + str(i)) is not None diff --git a/tests/integration/test_keeper_nodes_move/__init__.py b/tests/integration/test_keeper_nodes_move/__init__.py new file mode 100644 index 00000000000..e5a0d9b4834 --- /dev/null +++ b/tests/integration/test_keeper_nodes_move/__init__.py @@ -0,0 +1 @@ +#!/usr/bin/env python3 diff --git a/tests/integration/test_keeper_nodes_move/configs/enable_keeper1.xml b/tests/integration/test_keeper_nodes_move/configs/enable_keeper1.xml new file mode 100644 index 00000000000..a8a1a17b831 --- /dev/null +++ b/tests/integration/test_keeper_nodes_move/configs/enable_keeper1.xml @@ -0,0 +1,34 @@ + + + 9181 + 1 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + true + + + 3 + node3 + 44444 + true + + + + diff --git a/tests/integration/test_keeper_nodes_move/configs/enable_keeper2.xml b/tests/integration/test_keeper_nodes_move/configs/enable_keeper2.xml new file mode 100644 index 00000000000..7820158680c --- /dev/null +++ b/tests/integration/test_keeper_nodes_move/configs/enable_keeper2.xml @@ -0,0 +1,34 @@ + + + 9181 + 2 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + true + + + 3 + node3 + 44444 + true + + + + diff --git a/tests/integration/test_keeper_nodes_move/configs/enable_keeper3.xml b/tests/integration/test_keeper_nodes_move/configs/enable_keeper3.xml new file mode 100644 index 00000000000..cd76b0d216e --- /dev/null +++ b/tests/integration/test_keeper_nodes_move/configs/enable_keeper3.xml @@ -0,0 +1,34 @@ + + + 9181 + 3 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + true + + + 3 + node3 + 44444 + true + + + + diff --git a/tests/integration/test_keeper_nodes_move/configs/enable_keeper_node4_1.xml b/tests/integration/test_keeper_nodes_move/configs/enable_keeper_node4_1.xml new file mode 100644 index 00000000000..d99502e2959 --- /dev/null +++ b/tests/integration/test_keeper_nodes_move/configs/enable_keeper_node4_1.xml @@ -0,0 +1,34 @@ + + + 9181 + 1 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + true + + + 4 + node4 + 44444 + true + + + + diff --git a/tests/integration/test_keeper_nodes_move/configs/enable_keeper_node4_2.xml b/tests/integration/test_keeper_nodes_move/configs/enable_keeper_node4_2.xml new file mode 100644 index 00000000000..04d8776782f --- /dev/null +++ b/tests/integration/test_keeper_nodes_move/configs/enable_keeper_node4_2.xml @@ -0,0 +1,34 @@ + + + 9181 + 2 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + true + + + 4 + node4 + 44444 + true + + + + diff --git a/tests/integration/test_keeper_nodes_move/configs/enable_keeper_node4_4.xml b/tests/integration/test_keeper_nodes_move/configs/enable_keeper_node4_4.xml new file mode 100644 index 00000000000..10abf71b9f6 --- /dev/null +++ b/tests/integration/test_keeper_nodes_move/configs/enable_keeper_node4_4.xml @@ -0,0 +1,34 @@ + + + 9181 + 4 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + true + + + 4 + node4 + 44444 + true + + + + diff --git a/tests/integration/test_keeper_nodes_move/test.py b/tests/integration/test_keeper_nodes_move/test.py new file mode 100644 index 00000000000..e3f1a161b07 --- /dev/null +++ b/tests/integration/test_keeper_nodes_move/test.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 + + +#!/usr/bin/env python3 + +import pytest +from helpers.cluster import ClickHouseCluster +import random +import string +import os +import time +from multiprocessing.dummy import Pool +from helpers.network import PartitionManager +from helpers.test_tools import assert_eq_with_retry +from kazoo.client import KazooClient, KazooState + +cluster = ClickHouseCluster(__file__) +CONFIG_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'configs') + +node1 = cluster.add_instance('node1', main_configs=['configs/enable_keeper1.xml'], stay_alive=True) +node2 = cluster.add_instance('node2', main_configs=['configs/enable_keeper2.xml'], stay_alive=True) +node3 = cluster.add_instance('node3', main_configs=['configs/enable_keeper3.xml'], stay_alive=True) +node4 = cluster.add_instance('node4', stay_alive=True) + + +@pytest.fixture(scope="module") +def started_cluster(): + try: + cluster.start() + + yield cluster + + finally: + cluster.shutdown() + + +def start(node): + node.start_clickhouse() + +def get_fake_zk(node, timeout=30.0): + _fake_zk_instance = KazooClient(hosts=cluster.get_instance_ip(node.name) + ":9181", timeout=timeout) + _fake_zk_instance.start() + return _fake_zk_instance + + +def test_node_move(started_cluster): + zk_conn = get_fake_zk(node1) + + for i in range(100): + zk_conn.create("/test_four_" + str(i), b"somedata") + + zk_conn2 = get_fake_zk(node2) + zk_conn2.sync("/test_four_0") + + zk_conn3 = get_fake_zk(node3) + zk_conn3.sync("/test_four_0") + + for i in range(100): + assert zk_conn2.exists("test_four_" + str(i)) is not None + assert zk_conn3.exists("test_four_" + str(i)) is not None + + node4.stop_clickhouse() + node4.copy_file_to_container(os.path.join(CONFIG_DIR, "enable_keeper_node4_4.xml"), "/etc/clickhouse-server/config.d/enable_keeper4.xml") + p = Pool(3) + waiter = p.apply_async(start, (node4,)) + node1.copy_file_to_container(os.path.join(CONFIG_DIR, "enable_keeper_node4_1.xml"), "/etc/clickhouse-server/config.d/enable_keeper1.xml") + node2.copy_file_to_container(os.path.join(CONFIG_DIR, "enable_keeper_node4_2.xml"), "/etc/clickhouse-server/config.d/enable_keeper2.xml") + + node1.query("SYSTEM RELOAD CONFIG") + node2.query("SYSTEM RELOAD CONFIG") + + waiter.wait() + + zk_conn4 = get_fake_zk(node4) + zk_conn4.sync("/test_four_0") + + for i in range(100): + assert zk_conn4.exists("/test_four_" + str(i)) is not None + + with pytest.raises(Exception): + # Adding and removing nodes is async operation + for i in range(10): + zk_conn3 = get_fake_zk(node3) + zk_conn3.sync("/test_four_0") + time.sleep(i) diff --git a/tests/integration/test_keeper_nodes_remove/__init__.py b/tests/integration/test_keeper_nodes_remove/__init__.py new file mode 100644 index 00000000000..e5a0d9b4834 --- /dev/null +++ b/tests/integration/test_keeper_nodes_remove/__init__.py @@ -0,0 +1 @@ +#!/usr/bin/env python3 diff --git a/tests/integration/test_keeper_nodes_remove/configs/enable_keeper1.xml b/tests/integration/test_keeper_nodes_remove/configs/enable_keeper1.xml new file mode 100644 index 00000000000..a8a1a17b831 --- /dev/null +++ b/tests/integration/test_keeper_nodes_remove/configs/enable_keeper1.xml @@ -0,0 +1,34 @@ + + + 9181 + 1 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + true + + + 3 + node3 + 44444 + true + + + + diff --git a/tests/integration/test_keeper_nodes_remove/configs/enable_keeper2.xml b/tests/integration/test_keeper_nodes_remove/configs/enable_keeper2.xml new file mode 100644 index 00000000000..7820158680c --- /dev/null +++ b/tests/integration/test_keeper_nodes_remove/configs/enable_keeper2.xml @@ -0,0 +1,34 @@ + + + 9181 + 2 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + true + + + 3 + node3 + 44444 + true + + + + diff --git a/tests/integration/test_keeper_nodes_remove/configs/enable_keeper3.xml b/tests/integration/test_keeper_nodes_remove/configs/enable_keeper3.xml new file mode 100644 index 00000000000..cd76b0d216e --- /dev/null +++ b/tests/integration/test_keeper_nodes_remove/configs/enable_keeper3.xml @@ -0,0 +1,34 @@ + + + 9181 + 3 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + true + + + 3 + node3 + 44444 + true + + + + diff --git a/tests/integration/test_keeper_nodes_remove/configs/enable_keeper_two_nodes_1.xml b/tests/integration/test_keeper_nodes_remove/configs/enable_keeper_two_nodes_1.xml new file mode 100644 index 00000000000..3f6baf1ccc7 --- /dev/null +++ b/tests/integration/test_keeper_nodes_remove/configs/enable_keeper_two_nodes_1.xml @@ -0,0 +1,27 @@ + + + 9181 + 1 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + + + + diff --git a/tests/integration/test_keeper_nodes_remove/configs/enable_keeper_two_nodes_2.xml b/tests/integration/test_keeper_nodes_remove/configs/enable_keeper_two_nodes_2.xml new file mode 100644 index 00000000000..61c9a00ffd6 --- /dev/null +++ b/tests/integration/test_keeper_nodes_remove/configs/enable_keeper_two_nodes_2.xml @@ -0,0 +1,27 @@ + + + 9181 + 2 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + 2 + node2 + 44444 + + + + diff --git a/tests/integration/test_keeper_nodes_remove/configs/enable_single_keeper1.xml b/tests/integration/test_keeper_nodes_remove/configs/enable_single_keeper1.xml new file mode 100644 index 00000000000..bd695389fa6 --- /dev/null +++ b/tests/integration/test_keeper_nodes_remove/configs/enable_single_keeper1.xml @@ -0,0 +1,22 @@ + + + 9181 + 1 + /var/lib/clickhouse/coordination/log + /var/lib/clickhouse/coordination/snapshots + + + 5000 + 10000 + trace + + + + + 1 + node1 + 44444 + + + + diff --git a/tests/integration/test_keeper_nodes_remove/test.py b/tests/integration/test_keeper_nodes_remove/test.py new file mode 100644 index 00000000000..6df4ee1c497 --- /dev/null +++ b/tests/integration/test_keeper_nodes_remove/test.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 + +import pytest +from helpers.cluster import ClickHouseCluster +import os +from kazoo.client import KazooClient, KazooState + +cluster = ClickHouseCluster(__file__) +CONFIG_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'configs') + +node1 = cluster.add_instance('node1', main_configs=['configs/enable_keeper1.xml'], stay_alive=True) +node2 = cluster.add_instance('node2', main_configs=['configs/enable_keeper2.xml'], stay_alive=True) +node3 = cluster.add_instance('node3', main_configs=['configs/enable_keeper3.xml'], stay_alive=True) + +@pytest.fixture(scope="module") +def started_cluster(): + try: + cluster.start() + + yield cluster + + finally: + cluster.shutdown() + + +def get_fake_zk(node, timeout=30.0): + _fake_zk_instance = KazooClient(hosts=cluster.get_instance_ip(node.name) + ":9181", timeout=timeout) + _fake_zk_instance.start() + return _fake_zk_instance + + +def test_nodes_remove(started_cluster): + zk_conn = get_fake_zk(node1) + + for i in range(100): + zk_conn.create("/test_two_" + str(i), b"somedata") + + zk_conn2 = get_fake_zk(node2) + zk_conn2.sync("/test_two_0") + + zk_conn3 = get_fake_zk(node3) + zk_conn3.sync("/test_two_0") + + for i in range(100): + assert zk_conn2.exists("test_two_" + str(i)) is not None + assert zk_conn3.exists("test_two_" + str(i)) is not None + + node2.copy_file_to_container(os.path.join(CONFIG_DIR, "enable_keeper_two_nodes_2.xml"), "/etc/clickhouse-server/config.d/enable_keeper2.xml") + node1.copy_file_to_container(os.path.join(CONFIG_DIR, "enable_keeper_two_nodes_1.xml"), "/etc/clickhouse-server/config.d/enable_keeper1.xml") + + node1.query("SYSTEM RELOAD CONFIG") + node2.query("SYSTEM RELOAD CONFIG") + + zk_conn2 = get_fake_zk(node2) + + for i in range(100): + assert zk_conn2.exists("test_two_" + str(i)) is not None + zk_conn2.create("/test_two_" + str(100 + i), b"otherdata") + + zk_conn = get_fake_zk(node1) + zk_conn.sync("/test_two_0") + + for i in range(100): + assert zk_conn.exists("test_two_" + str(i)) is not None + assert zk_conn.exists("test_two_" + str(100 + i)) is not None + + with pytest.raises(Exception): + zk_conn3 = get_fake_zk(node3) + zk_conn3.sync("/test_two_0") + + node3.stop_clickhouse() + + node1.copy_file_to_container(os.path.join(CONFIG_DIR, "enable_single_keeper1.xml"), "/etc/clickhouse-server/config.d/enable_keeper1.xml") + + node1.query("SYSTEM RELOAD CONFIG") + zk_conn = get_fake_zk(node1) + zk_conn.sync("/test_two_0") + + for i in range(100): + assert zk_conn.exists("test_two_" + str(i)) is not None + assert zk_conn.exists("test_two_" + str(100 + i)) is not None + + with pytest.raises(Exception): + zk_conn2 = get_fake_zk(node2) + zk_conn2.sync("/test_two_0") + + node2.stop_clickhouse() diff --git a/tests/integration/test_keeper_snapshots/configs/enable_keeper.xml b/tests/integration/test_keeper_snapshots/configs/enable_keeper.xml index 2be4246f7dd..15db48f4f37 100644 --- a/tests/integration/test_keeper_snapshots/configs/enable_keeper.xml +++ b/tests/integration/test_keeper_snapshots/configs/enable_keeper.xml @@ -11,6 +11,11 @@ 5000 10000 trace + + + 0 + 0 + 0 diff --git a/tests/integration/test_keeper_zookeeper_converter/configs/keeper_config.xml b/tests/integration/test_keeper_zookeeper_converter/configs/keeper_config.xml index d98c8d72e61..612cb979bb7 100644 --- a/tests/integration/test_keeper_zookeeper_converter/configs/keeper_config.xml +++ b/tests/integration/test_keeper_zookeeper_converter/configs/keeper_config.xml @@ -6,8 +6,8 @@ /var/lib/clickhouse/coordination/snapshots - 5000 - 10000 + 30000 + 600000 trace 75 diff --git a/tests/integration/test_keeper_zookeeper_converter/test.py b/tests/integration/test_keeper_zookeeper_converter/test.py index eac2b4c45c5..6829b4a9000 100644 --- a/tests/integration/test_keeper_zookeeper_converter/test.py +++ b/tests/integration/test_keeper_zookeeper_converter/test.py @@ -60,12 +60,12 @@ def started_cluster(): finally: cluster.shutdown() -def get_fake_zk(timeout=30.0): +def get_fake_zk(timeout=60.0): _fake_zk_instance = KazooClient(hosts=cluster.get_instance_ip('node') + ":9181", timeout=timeout) _fake_zk_instance.start() return _fake_zk_instance -def get_genuine_zk(timeout=30.0): +def get_genuine_zk(timeout=60.0): _genuine_zk_instance = KazooClient(hosts=cluster.get_instance_ip('node') + ":2181", timeout=timeout) _genuine_zk_instance.start() return _genuine_zk_instance diff --git a/tests/integration/test_log_family_hdfs/test.py b/tests/integration/test_log_family_hdfs/test.py index a38b067358e..7bb9cdfeaf5 100644 --- a/tests/integration/test_log_family_hdfs/test.py +++ b/tests/integration/test_log_family_hdfs/test.py @@ -31,10 +31,20 @@ def assert_objects_count(started_cluster, objects_count, path='data/'): hdfs_objects = fs.listdir('/clickhouse') assert objects_count == len(hdfs_objects) - +# TinyLog: files: id.bin, sizes.json +# INSERT overwrites 1 file (`sizes.json`) and appends 1 file (`id.bin`), so +# files_overhead=1, files_overhead_per_insert=1 +# +# Log: files: id.bin, __marks.mrk, sizes.json +# INSERT overwrites 1 file (`sizes.json`), and appends 2 files (`id.bin`, `__marks.mrk`), so +# files_overhead=1, files_overhead_per_insert=2 +# +# StripeLog: files: data.bin, index.mrk, sizes.json +# INSERT overwrites 1 file (`sizes.json`), and appends 2 files (`index.mrk`, `data.bin`), so +# files_overhead=1, files_overhead_per_insert=2 @pytest.mark.parametrize( "log_engine,files_overhead,files_overhead_per_insert", - [("TinyLog", 1, 1), ("Log", 2, 1), ("StripeLog", 1, 2)]) + [("TinyLog", 1, 1), ("Log", 1, 2), ("StripeLog", 1, 2)]) def test_log_family_hdfs(started_cluster, log_engine, files_overhead, files_overhead_per_insert): node = started_cluster.instances["node"] diff --git a/tests/integration/test_log_family_s3/test.py b/tests/integration/test_log_family_s3/test.py index 71d47a8a2e8..8531edd635f 100644 --- a/tests/integration/test_log_family_s3/test.py +++ b/tests/integration/test_log_family_s3/test.py @@ -30,10 +30,20 @@ def assert_objects_count(cluster, objects_count, path='data/'): logging.info("Existing S3 object: %s", str(object_meta)) assert objects_count == len(s3_objects) - +# TinyLog: files: id.bin, sizes.json +# INSERT overwrites 1 file (`sizes.json`) and appends 1 file (`id.bin`), so +# files_overhead=1, files_overhead_per_insert=1 +# +# Log: files: id.bin, __marks.mrk, sizes.json +# INSERT overwrites 1 file (`sizes.json`), and appends 2 files (`id.bin`, `__marks.mrk`), so +# files_overhead=1, files_overhead_per_insert=2 +# +# StripeLog: files: data.bin, index.mrk, sizes.json +# INSERT overwrites 1 file (`sizes.json`), and appends 2 files (`index.mrk`, `data.bin`), so +# files_overhead=1, files_overhead_per_insert=2 @pytest.mark.parametrize( "log_engine,files_overhead,files_overhead_per_insert", - [("TinyLog", 1, 1), ("Log", 2, 1), ("StripeLog", 1, 2)]) + [("TinyLog", 1, 1), ("Log", 1, 2), ("StripeLog", 1, 2)]) def test_log_family_s3(cluster, log_engine, files_overhead, files_overhead_per_insert): node = cluster.instances["node"] diff --git a/tests/integration/test_log_levels_update/configs/log.xml b/tests/integration/test_log_levels_update/configs/log.xml index 668a15f6afd..a85417d05b8 100644 --- a/tests/integration/test_log_levels_update/configs/log.xml +++ b/tests/integration/test_log_levels_update/configs/log.xml @@ -1,6 +1,6 @@ - + trace /var/log/clickhouse-server/clickhouse-server.log - \ No newline at end of file + \ No newline at end of file diff --git a/tests/integration/test_log_levels_update/test.py b/tests/integration/test_log_levels_update/test.py index dca660a2982..f631677a400 100644 --- a/tests/integration/test_log_levels_update/test.py +++ b/tests/integration/test_log_levels_update/test.py @@ -6,12 +6,12 @@ from helpers.cluster import ClickHouseCluster cluster = ClickHouseCluster(__file__, name="log_quries_probability") node = cluster.add_instance('node', with_zookeeper=False) -config = ''' +config = ''' information /var/log/clickhouse-server/clickhouse-server.log -''' +''' @pytest.fixture(scope="module") diff --git a/tests/integration/test_merge_tree_s3/configs/config.d/async_read.xml b/tests/integration/test_merge_tree_s3/configs/config.d/async_read.xml new file mode 100644 index 00000000000..4449d83779a --- /dev/null +++ b/tests/integration/test_merge_tree_s3/configs/config.d/async_read.xml @@ -0,0 +1,7 @@ + + + + read_threadpool + + + diff --git a/tests/integration/test_merge_tree_s3/test.py b/tests/integration/test_merge_tree_s3/test.py index c66b44c5639..e99adf01ec5 100644 --- a/tests/integration/test_merge_tree_s3/test.py +++ b/tests/integration/test_merge_tree_s3/test.py @@ -50,6 +50,11 @@ def cluster(): main_configs=["configs/config.d/storage_conf.xml", "configs/config.d/bg_processing_pool_conf.xml"], with_minio=True) + cluster.add_instance("node_async_read", + main_configs=["configs/config.d/storage_conf.xml", + "configs/config.d/bg_processing_pool_conf.xml"], + user_configs=["configs/config.d/async_read.xml"], + with_minio=True) logging.info("Starting cluster...") cluster.start() logging.info("Cluster started") @@ -77,8 +82,7 @@ def generate_values(date_str, count, sign=1): return ",".join(["('{}',{},'{}')".format(x, y, z) for x, y, z in data]) -def create_table(cluster, table_name, **additional_settings): - node = cluster.instances["node"] +def create_table(node, table_name, **additional_settings): settings = { "storage_policy": "s3", "old_parts_lifetime": 0, @@ -97,6 +101,7 @@ def create_table(cluster, table_name, **additional_settings): ORDER BY (dt, id) SETTINGS {",".join((k+"="+repr(v) for k, v in settings.items()))}""" + node.query(f"DROP TABLE IF EXISTS {table_name}") node.query(create_table_statement) @@ -140,9 +145,10 @@ def wait_for_delete_s3_objects(cluster, expected, timeout=30): @pytest.fixture(autouse=True) -def drop_table(cluster): +@pytest.mark.parametrize("node_name", ["node", "node_async_read"]) +def drop_table(cluster, node_name): yield - node = cluster.instances["node"] + node = cluster.instances[node_name] minio = cluster.minio_client node.query("DROP TABLE IF EXISTS s3_test NO DELAY") @@ -156,16 +162,17 @@ def drop_table(cluster): @pytest.mark.parametrize( - "min_rows_for_wide_part,files_per_part", + "min_rows_for_wide_part,files_per_part,node_name", [ - (0, FILES_OVERHEAD_PER_PART_WIDE), - (8192, FILES_OVERHEAD_PER_PART_COMPACT) + (0, FILES_OVERHEAD_PER_PART_WIDE, "node"), + (8192, FILES_OVERHEAD_PER_PART_COMPACT, "node"), + (0, FILES_OVERHEAD_PER_PART_WIDE, "node_async_read"), + (8192, FILES_OVERHEAD_PER_PART_COMPACT, "node_async_read") ] ) -def test_simple_insert_select(cluster, min_rows_for_wide_part, files_per_part): - create_table(cluster, "s3_test", min_rows_for_wide_part=min_rows_for_wide_part) - - node = cluster.instances["node"] +def test_simple_insert_select(cluster, min_rows_for_wide_part, files_per_part, node_name): + node = cluster.instances[node_name] + create_table(node, "s3_test", min_rows_for_wide_part=min_rows_for_wide_part) minio = cluster.minio_client values1 = generate_values('2020-01-03', 4096) @@ -182,17 +189,20 @@ def test_simple_insert_select(cluster, min_rows_for_wide_part, files_per_part): @pytest.mark.parametrize( - "merge_vertical", [False, True] -) -def test_insert_same_partition_and_merge(cluster, merge_vertical): + "merge_vertical,node_name", [ + (True, "node"), + (False, "node"), + (True, "node_async_read"), + (False, "node_async_read") +]) +def test_insert_same_partition_and_merge(cluster, merge_vertical, node_name): settings = {} if merge_vertical: settings['vertical_merge_algorithm_min_rows_to_activate'] = 0 settings['vertical_merge_algorithm_min_columns_to_activate'] = 0 - create_table(cluster, "s3_test", **settings) - - node = cluster.instances["node"] + node = cluster.instances[node_name] + create_table(node, "s3_test", **settings) minio = cluster.minio_client node.query("SYSTEM STOP MERGES s3_test") @@ -225,10 +235,10 @@ def test_insert_same_partition_and_merge(cluster, merge_vertical): wait_for_delete_s3_objects(cluster, FILES_OVERHEAD_PER_PART_WIDE + FILES_OVERHEAD) -def test_alter_table_columns(cluster): - create_table(cluster, "s3_test") - - node = cluster.instances["node"] +@pytest.mark.parametrize("node_name", ["node", "node_async_read"]) +def test_alter_table_columns(cluster, node_name): + node = cluster.instances[node_name] + create_table(node, "s3_test") minio = cluster.minio_client node.query("INSERT INTO s3_test VALUES {}".format(generate_values('2020-01-03', 4096))) @@ -254,10 +264,10 @@ def test_alter_table_columns(cluster): wait_for_delete_s3_objects(cluster, FILES_OVERHEAD + FILES_OVERHEAD_PER_PART_WIDE + 2) -def test_attach_detach_partition(cluster): - create_table(cluster, "s3_test") - - node = cluster.instances["node"] +@pytest.mark.parametrize("node_name", ["node", "node_async_read"]) +def test_attach_detach_partition(cluster, node_name): + node = cluster.instances[node_name] + create_table(node, "s3_test") minio = cluster.minio_client node.query("INSERT INTO s3_test VALUES {}".format(generate_values('2020-01-03', 4096))) @@ -286,10 +296,10 @@ def test_attach_detach_partition(cluster): assert len(list(minio.list_objects(cluster.minio_bucket, 'data/'))) == FILES_OVERHEAD -def test_move_partition_to_another_disk(cluster): - create_table(cluster, "s3_test") - - node = cluster.instances["node"] +@pytest.mark.parametrize("node_name", ["node", "node_async_read"]) +def test_move_partition_to_another_disk(cluster, node_name): + node = cluster.instances[node_name] + create_table(node, "s3_test") minio = cluster.minio_client node.query("INSERT INTO s3_test VALUES {}".format(generate_values('2020-01-03', 4096))) @@ -308,10 +318,10 @@ def test_move_partition_to_another_disk(cluster): list(minio.list_objects(cluster.minio_bucket, 'data/'))) == FILES_OVERHEAD + FILES_OVERHEAD_PER_PART_WIDE * 2 -def test_table_manipulations(cluster): - create_table(cluster, "s3_test") - - node = cluster.instances["node"] +@pytest.mark.parametrize("node_name", ["node"]) +def test_table_manipulations(cluster, node_name): + node = cluster.instances[node_name] + create_table(node, "s3_test") minio = cluster.minio_client node.query("INSERT INTO s3_test VALUES {}".format(generate_values('2020-01-03', 4096))) @@ -336,10 +346,10 @@ def test_table_manipulations(cluster): assert len(list(minio.list_objects(cluster.minio_bucket, 'data/'))) == FILES_OVERHEAD -def test_move_replace_partition_to_another_table(cluster): - create_table(cluster, "s3_test") - - node = cluster.instances["node"] +@pytest.mark.parametrize("node_name", ["node", "node_async_read"]) +def test_move_replace_partition_to_another_table(cluster, node_name): + node = cluster.instances[node_name] + create_table(node, "s3_test") minio = cluster.minio_client node.query("INSERT INTO s3_test VALUES {}".format(generate_values('2020-01-03', 4096))) @@ -351,7 +361,7 @@ def test_move_replace_partition_to_another_table(cluster): assert len( list(minio.list_objects(cluster.minio_bucket, 'data/'))) == FILES_OVERHEAD + FILES_OVERHEAD_PER_PART_WIDE * 4 - create_table(cluster, "s3_clone") + create_table(node, "s3_clone") node.query("ALTER TABLE s3_test MOVE PARTITION '2020-01-03' TO TABLE s3_clone") node.query("ALTER TABLE s3_test MOVE PARTITION '2020-01-05' TO TABLE s3_clone") @@ -402,10 +412,10 @@ def test_move_replace_partition_to_another_table(cluster): minio.remove_object(cluster.minio_bucket, obj.object_name) -def test_freeze_unfreeze(cluster): - create_table(cluster, "s3_test") - - node = cluster.instances["node"] +@pytest.mark.parametrize("node_name", ["node"]) +def test_freeze_unfreeze(cluster, node_name): + node = cluster.instances[node_name] + create_table(node, "s3_test") minio = cluster.minio_client node.query("INSERT INTO s3_test VALUES {}".format(generate_values('2020-01-03', 4096))) @@ -427,9 +437,10 @@ def test_freeze_unfreeze(cluster): list(minio.list_objects(cluster.minio_bucket, 'data/'))) == FILES_OVERHEAD -def test_s3_disk_apply_new_settings(cluster): - create_table(cluster, "s3_test") - node = cluster.instances["node"] +@pytest.mark.parametrize("node_name", ["node"]) +def test_s3_disk_apply_new_settings(cluster, node_name): + node = cluster.instances[node_name] + create_table(node, "s3_test") def get_s3_requests(): node.query("SYSTEM FLUSH LOGS") @@ -452,10 +463,10 @@ def test_s3_disk_apply_new_settings(cluster): assert get_s3_requests() - s3_requests_before == s3_requests_to_write_partition * 3 -def test_s3_disk_restart_during_load(cluster): - create_table(cluster, "s3_test") - - node = cluster.instances["node"] +@pytest.mark.parametrize("node_name", ["node"]) +def test_s3_disk_restart_during_load(cluster, node_name): + node = cluster.instances[node_name] + create_table(node, "s3_test") node.query("INSERT INTO s3_test VALUES {}".format(generate_values('2020-01-04', 1024 * 1024))) node.query("INSERT INTO s3_test VALUES {}".format(generate_values('2020-01-05', 1024 * 1024, -1))) @@ -487,11 +498,11 @@ def test_s3_disk_restart_during_load(cluster): thread.join() -def test_s3_disk_reads_on_unstable_connection(cluster): - create_table(cluster, "s3_test", storage_policy='unstable_s3') - node = cluster.instances["node"] +@pytest.mark.parametrize("node_name", ["node", "node_async_read"]) +def test_s3_disk_reads_on_unstable_connection(cluster, node_name): + node = cluster.instances[node_name] + create_table(node, "s3_test", storage_policy='unstable_s3') node.query("INSERT INTO s3_test SELECT today(), *, toString(*) FROM system.numbers LIMIT 9000000") for i in range(30): print(f"Read sequence {i}") assert node.query("SELECT sum(id) FROM s3_test").splitlines() == ["40499995500000"] - diff --git a/tests/integration/test_merge_tree_s3_failover/configs/config.d/storage_conf.xml b/tests/integration/test_merge_tree_s3_failover/configs/config.d/storage_conf.xml index f5e350e5b6b..32d78468a71 100644 --- a/tests/integration/test_merge_tree_s3_failover/configs/config.d/storage_conf.xml +++ b/tests/integration/test_merge_tree_s3_failover/configs/config.d/storage_conf.xml @@ -12,6 +12,15 @@ 0 + + s3 + + http://resolver:8080/root/data/ + minio + minio123 + + true +
@@ -32,6 +41,13 @@ + + +
+ s3_retryable +
+
+
diff --git a/tests/integration/test_merge_tree_s3_failover/s3_endpoint/endpoint.py b/tests/integration/test_merge_tree_s3_failover/s3_endpoint/endpoint.py index 1754b1f175c..3f219b6ba57 100644 --- a/tests/integration/test_merge_tree_s3_failover/s3_endpoint/endpoint.py +++ b/tests/integration/test_merge_tree_s3_failover/s3_endpoint/endpoint.py @@ -18,6 +18,16 @@ def fail_request(_request_number): return 'OK' +@route('/throttle_request/<_request_number>') +def fail_request(_request_number): + request_number = int(_request_number) + if request_number > 0: + cache['throttle_request_number'] = request_number + else: + cache.pop('throttle_request_number', None) + return 'OK' + + # Handle for MultipleObjectsDelete. @route('/<_bucket>', ['POST']) def delete(_bucket): @@ -37,6 +47,15 @@ def server(_bucket, _path): response.content_type = 'text/xml' return 'ExpectedErrorExpected Errortxfbd566d03042474888193-00608d7537' + if cache.get('throttle_request_number', None): + request_number = cache.pop('throttle_request_number') - 1 + if request_number > 0: + cache['throttle_request_number'] = request_number + else: + response.status = 429 + response.content_type = 'text/xml' + return 'TooManyRequestsExceptionPlease reduce your request rate.txfbd566d03042474888193-00608d7538' + response.set_header("Location", "http://minio1:9001/" + _bucket + '/' + _path) response.status = 307 return 'Redirected' diff --git a/tests/integration/test_merge_tree_s3_failover/test.py b/tests/integration/test_merge_tree_s3_failover/test.py index 56d9441aba6..b6b47417523 100644 --- a/tests/integration/test_merge_tree_s3_failover/test.py +++ b/tests/integration/test_merge_tree_s3_failover/test.py @@ -38,6 +38,12 @@ def fail_request(cluster, request): assert response == 'OK', 'Expected "OK", but got "{}"'.format(response) +def throttle_request(cluster, request): + response = cluster.exec_in_container(cluster.get_container_id('resolver'), + ["curl", "-s", "http://resolver:8080/throttle_request/{}".format(request)]) + assert response == 'OK', 'Expected "OK", but got "{}"'.format(response) + + @pytest.fixture(scope="module") def cluster(): try: @@ -186,3 +192,27 @@ def test_move_failover(cluster): # Ensure data is not corrupted. assert node.query("CHECK TABLE s3_failover_test") == '1\n' assert node.query("SELECT id,data FROM s3_failover_test FORMAT Values") == "(0,'data'),(1,'data')" + + +# Check that throttled request retries and does not cause an error on disk with default `retry_attempts` (>0) +def test_throttle_retry(cluster): + node = cluster.instances["node"] + + node.query( + """ + CREATE TABLE s3_throttle_retry_test ( + id Int64 + ) ENGINE=MergeTree() + ORDER BY id + SETTINGS storage_policy='s3_retryable' + """ + ) + + data = "(42)" + node.query("INSERT INTO s3_throttle_retry_test VALUES {}".format(data)) + + throttle_request(cluster, 1) + + assert node.query(""" + SELECT * FROM s3_throttle_retry_test + """) == '42\n' diff --git a/tests/integration/test_odbc_interaction/test.py b/tests/integration/test_odbc_interaction/test.py index 4d2f70ad08c..001a46e1237 100644 --- a/tests/integration/test_odbc_interaction/test.py +++ b/tests/integration/test_odbc_interaction/test.py @@ -554,7 +554,7 @@ def test_concurrent_queries(started_cluster): busy_pool = Pool(5) p = busy_pool.map_async(node_insert, range(5)) p.wait() - assert_eq_with_retry(node1, "SELECT count() FROM test_pg_table", str(5*5*1000)) + assert_eq_with_retry(node1, "SELECT count() FROM test_pg_table", str(5*5*1000), retry_count=100) def node_insert_select(_): for i in range(5): @@ -564,7 +564,7 @@ def test_concurrent_queries(started_cluster): busy_pool = Pool(5) p = busy_pool.map_async(node_insert_select, range(5)) p.wait() - assert_eq_with_retry(node1, "SELECT count() FROM test_pg_table", str(5*5*1000*2)) + assert_eq_with_retry(node1, "SELECT count() FROM test_pg_table", str(5*5*1000*2), retry_count=100) node1.query('DROP TABLE test_pg_table;') cursor.execute('DROP TABLE clickhouse.test_pg_table;') @@ -627,4 +627,3 @@ def test_odbc_long_text(started_cluster): cursor.execute("""insert into clickhouse.test_long_text (flen, field1) values (400000, '{}')""".format(long_text)); result = node1.query("select field1 from test_long_text where flen=400000;") assert(result.strip() == long_text) - diff --git a/tests/integration/test_old_versions/configs/config.d/test_cluster.xml b/tests/integration/test_old_versions/configs/config.d/test_cluster.xml index 56d53d63d78..f97538b35e3 100644 --- a/tests/integration/test_old_versions/configs/config.d/test_cluster.xml +++ b/tests/integration/test_old_versions/configs/config.d/test_cluster.xml @@ -1,4 +1,4 @@ - + @@ -10,4 +10,4 @@ - + diff --git a/tests/integration/test_part_moves_between_shards/test.py b/tests/integration/test_part_moves_between_shards/test.py index 00407f95389..ed7640e5f9e 100644 --- a/tests/integration/test_part_moves_between_shards/test.py +++ b/tests/integration/test_part_moves_between_shards/test.py @@ -1,32 +1,38 @@ -import random -import time - import pytest +import random +import threading +import time from helpers.client import QueryRuntimeException from helpers.cluster import ClickHouseCluster from helpers.test_tools import TSV +transient_ch_errors = [23, 32, 210] + cluster = ClickHouseCluster(__file__) s0r0 = cluster.add_instance( 's0r0', main_configs=['configs/remote_servers.xml', 'configs/merge_tree.xml'], + stay_alive=True, with_zookeeper=True) s0r1 = cluster.add_instance( 's0r1', main_configs=['configs/remote_servers.xml', 'configs/merge_tree.xml'], + stay_alive=True, with_zookeeper=True) s1r0 = cluster.add_instance( 's1r0', main_configs=['configs/remote_servers.xml', 'configs/merge_tree.xml'], + stay_alive=True, with_zookeeper=True) s1r1 = cluster.add_instance( 's1r1', main_configs=['configs/remote_servers.xml', 'configs/merge_tree.xml'], + stay_alive=True, with_zookeeper=True) @@ -43,12 +49,14 @@ def test_move(started_cluster): for shard_ix, rs in enumerate([[s0r0, s0r1], [s1r0, s1r1]]): for replica_ix, r in enumerate(rs): r.query(""" + DROP TABLE IF EXISTS test_move; CREATE TABLE test_move(v UInt64) ENGINE ReplicatedMergeTree('/clickhouse/shard_{}/tables/test_move', '{}') ORDER BY tuple() - """.format(shard_ix, replica_ix)) + """.format(shard_ix, r.name)) s0r0.query("SYSTEM STOP MERGES test_move") + s0r1.query("SYSTEM STOP MERGES test_move") s0r0.query("INSERT INTO test_move VALUES (1)") s0r0.query("INSERT INTO test_move VALUES (2)") @@ -63,14 +71,7 @@ def test_move(started_cluster): s0r0.query("SYSTEM START MERGES test_move") s0r0.query("OPTIMIZE TABLE test_move FINAL") - while True: - time.sleep(3) - - print(s0r0.query("SELECT * FROM system.part_moves_between_shards")) - - # Eventually. - if "DONE" == s0r0.query("SELECT state FROM system.part_moves_between_shards WHERE table = 'test_move'").strip(): - break + wait_for_state("DONE", s0r0, "test_move") for n in [s0r0, s0r1]: assert "1" == n.query("SELECT count() FROM test_move").strip() @@ -81,14 +82,7 @@ def test_move(started_cluster): # Move part back s1r0.query("ALTER TABLE test_move MOVE PART 'all_0_0_0' TO SHARD '/clickhouse/shard_0/tables/test_move'") - while True: - time.sleep(3) - - print(s1r0.query("SELECT * FROM system.part_moves_between_shards")) - - # Eventually. - if "DONE" == s1r0.query("SELECT state FROM system.part_moves_between_shards WHERE table = 'test_move'").strip(): - break + wait_for_state("DONE", s1r0, "test_move") for n in [s0r0, s0r1]: assert "2" == n.query("SELECT count() FROM test_move").strip() @@ -101,17 +95,20 @@ def test_deduplication_while_move(started_cluster): for shard_ix, rs in enumerate([[s0r0, s0r1], [s1r0, s1r1]]): for replica_ix, r in enumerate(rs): r.query(""" + DROP TABLE IF EXISTS test_deduplication; CREATE TABLE test_deduplication(v UInt64) ENGINE ReplicatedMergeTree('/clickhouse/shard_{}/tables/test_deduplication', '{}') ORDER BY tuple() - """.format(shard_ix, replica_ix)) + """.format(shard_ix, r.name)) r.query(""" - CREATE TABLE t_d AS test_deduplication + DROP TABLE IF EXISTS test_deduplication_d; + CREATE TABLE test_deduplication_d AS test_deduplication ENGINE Distributed('test_cluster', '', test_deduplication) """) s0r0.query("SYSTEM STOP MERGES test_deduplication") + s0r1.query("SYSTEM STOP MERGES test_deduplication") s0r0.query("INSERT INTO test_deduplication VALUES (1)") s0r0.query("INSERT INTO test_deduplication VALUES (2)") @@ -120,7 +117,8 @@ def test_deduplication_while_move(started_cluster): assert "2" == s0r0.query("SELECT count() FROM test_deduplication").strip() assert "0" == s1r0.query("SELECT count() FROM test_deduplication").strip() - s0r0.query("ALTER TABLE test_deduplication MOVE PART 'all_0_0_0' TO SHARD '/clickhouse/shard_1/tables/test_deduplication'") + s0r0.query( + "ALTER TABLE test_deduplication MOVE PART 'all_0_0_0' TO SHARD '/clickhouse/shard_1/tables/test_deduplication'") s0r0.query("SYSTEM START MERGES test_deduplication") expected = """ @@ -128,32 +126,363 @@ def test_deduplication_while_move(started_cluster): 2 """ - # Verify that we get consisntent result at all times while the part is moving from one shard to another. - while "DONE" != s0r0.query("SELECT state FROM system.part_moves_between_shards WHERE table = 'test_deduplication' ORDER BY create_time DESC LIMIT 1").strip(): + def deduplication_invariant_test(): n = random.choice(list(started_cluster.instances.values())) + assert TSV( + n.query("SELECT * FROM test_deduplication_d ORDER BY v", + settings={"allow_experimental_query_deduplication": 1}) + ) == TSV(expected) - assert TSV(n.query("SELECT * FROM t_d ORDER BY v", settings={ - "allow_experimental_query_deduplication": 1 - })) == TSV(expected) + deduplication_invariant = ConcurrentInvariant(deduplication_invariant_test) + deduplication_invariant.start() + + wait_for_state("DONE", s0r0, "test_deduplication") + + deduplication_invariant.stop_and_assert_no_exception() + + +def test_part_move_step_by_step(started_cluster): + for shard_ix, rs in enumerate([[s0r0, s0r1], [s1r0, s1r1]]): + for replica_ix, r in enumerate(rs): + r.query(""" + DROP TABLE IF EXISTS test_part_move_step_by_step; + CREATE TABLE test_part_move_step_by_step(v UInt64) + ENGINE ReplicatedMergeTree('/clickhouse/shard_{}/tables/test_part_move_step_by_step', '{}') + ORDER BY tuple() + """.format(shard_ix, r.name)) + + r.query(""" + DROP TABLE IF EXISTS test_part_move_step_by_step_d; + CREATE TABLE test_part_move_step_by_step_d AS test_part_move_step_by_step + ENGINE Distributed('test_cluster', currentDatabase(), test_part_move_step_by_step) + """) + + s0r0.query("SYSTEM STOP MERGES test_part_move_step_by_step") + s0r1.query("SYSTEM STOP MERGES test_part_move_step_by_step") + + s0r0.query("INSERT INTO test_part_move_step_by_step VALUES (1)") + s0r0.query("INSERT INTO test_part_move_step_by_step VALUES (2)") + s0r1.query("SYSTEM SYNC REPLICA test_part_move_step_by_step", timeout=20) + + assert "2" == s0r0.query("SELECT count() FROM test_part_move_step_by_step").strip() + assert "0" == s1r0.query("SELECT count() FROM test_part_move_step_by_step").strip() + + expected = """ +1 +2 +""" + + def deduplication_invariant_test(): + n = random.choice(list(started_cluster.instances.values())) + try: + assert TSV( + n.query("SELECT * FROM test_part_move_step_by_step_d ORDER BY v", + settings={"allow_experimental_query_deduplication": 1}) + ) == TSV(expected) + except QueryRuntimeException as e: + # ignore transient errors that are caused by us restarting nodes + if e.returncode not in transient_ch_errors: + raise e + + deduplication_invariant = ConcurrentInvariant(deduplication_invariant_test) + deduplication_invariant.start() + + # Stop a source replica to prevent SYNC_SOURCE succeeding. + s0r1.stop_clickhouse() + + s0r0.query( + "ALTER TABLE test_part_move_step_by_step MOVE PART 'all_0_0_0' TO SHARD '/clickhouse/shard_1/tables/test_part_move_step_by_step'") + + # Should hang on SYNC_SOURCE until all source replicas acknowledge new pinned UUIDs. + wait_for_state("SYNC_SOURCE", s0r0, "test_part_move_step_by_step", "Some replicas haven\\'t processed event") + deduplication_invariant.assert_no_exception() + + # Start all replicas in source shard but stop a replica in destination shard + # to prevent SYNC_DESTINATION succeeding. + s1r1.stop_clickhouse() + s0r1.start_clickhouse() + + # After SYNC_SOURCE step no merges will be assigned. + s0r0.query("SYSTEM START MERGES test_part_move_step_by_step; OPTIMIZE TABLE test_part_move_step_by_step;") + s0r1.query("SYSTEM START MERGES test_part_move_step_by_step; OPTIMIZE TABLE test_part_move_step_by_step;") + + wait_for_state("SYNC_DESTINATION", s0r0, "test_part_move_step_by_step", "Some replicas haven\\'t processed event") + deduplication_invariant.assert_no_exception() + + # Start previously stopped replica in destination shard to let SYNC_DESTINATION + # succeed. + # Stop the other replica in destination shard to prevent DESTINATION_FETCH succeed. + s1r0.stop_clickhouse() + s1r1.start_clickhouse() + wait_for_state("DESTINATION_FETCH", s0r0, "test_part_move_step_by_step", "Some replicas haven\\'t processed event") + deduplication_invariant.assert_no_exception() + + # Start previously stopped replica in destination shard to let DESTINATION_FETCH + # succeed. + # Stop the other replica in destination shard to prevent DESTINATION_ATTACH succeed. + s1r1.stop_clickhouse() + s1r0.start_clickhouse() + wait_for_state("DESTINATION_ATTACH", s0r0, "test_part_move_step_by_step", "Some replicas haven\\'t processed event") + deduplication_invariant.assert_no_exception() + + # Start all replicas in destination shard to let DESTINATION_ATTACH succeed. + # Stop a source replica to prevent SOURCE_DROP succeeding. + s0r0.stop_clickhouse() + s1r1.start_clickhouse() + wait_for_state("SOURCE_DROP", s0r1, "test_part_move_step_by_step", "Some replicas haven\\'t processed event") + deduplication_invariant.assert_no_exception() + + s0r0.start_clickhouse() + wait_for_state("DONE", s0r1, "test_part_move_step_by_step") + deduplication_invariant.assert_no_exception() + + # No hung tasks in replication queue. Would timeout otherwise. + for instance in started_cluster.instances.values(): + instance.query("SYSTEM SYNC REPLICA test_part_move_step_by_step") + + assert "1" == s0r0.query("SELECT count() FROM test_part_move_step_by_step").strip() + assert "1" == s1r0.query("SELECT count() FROM test_part_move_step_by_step").strip() + + deduplication_invariant.stop_and_assert_no_exception() + + +def test_part_move_step_by_step_kill(started_cluster): + for shard_ix, rs in enumerate([[s0r0, s0r1], [s1r0, s1r1]]): + for replica_ix, r in enumerate(rs): + r.query(""" + DROP TABLE IF EXISTS test_part_move_step_by_step_kill; + CREATE TABLE test_part_move_step_by_step_kill(v UInt64) + ENGINE ReplicatedMergeTree('/clickhouse/shard_{}/tables/test_part_move_step_by_step_kill', '{}') + ORDER BY tuple() + """.format(shard_ix, r.name)) + + r.query(""" + DROP TABLE IF EXISTS test_part_move_step_by_step_kill_d; + CREATE TABLE test_part_move_step_by_step_kill_d AS test_part_move_step_by_step_kill + ENGINE Distributed('test_cluster', currentDatabase(), test_part_move_step_by_step_kill) + """) + + s0r0.query("SYSTEM STOP MERGES test_part_move_step_by_step_kill") + s0r1.query("SYSTEM STOP MERGES test_part_move_step_by_step_kill") + + s0r0.query("INSERT INTO test_part_move_step_by_step_kill VALUES (1)") + s0r0.query("INSERT INTO test_part_move_step_by_step_kill VALUES (2)") + s0r1.query("SYSTEM SYNC REPLICA test_part_move_step_by_step_kill", timeout=20) + + assert "2" == s0r0.query("SELECT count() FROM test_part_move_step_by_step_kill").strip() + assert "0" == s1r0.query("SELECT count() FROM test_part_move_step_by_step_kill").strip() + + expected = """ +1 +2 +""" + + def deduplication_invariant_test(): + n = random.choice(list(started_cluster.instances.values())) + try: + assert TSV( + n.query("SELECT * FROM test_part_move_step_by_step_kill_d ORDER BY v", + settings={ + "allow_experimental_query_deduplication": 1 + }) + ) == TSV(expected) + except QueryRuntimeException as e: + # ignore transient errors that are caused by us restarting nodes + if e.returncode not in transient_ch_errors: + raise e + + deduplication_invariant = ConcurrentInvariant(deduplication_invariant_test) + deduplication_invariant.start() + + # Stop a source replica to prevent SYNC_SOURCE succeeding. + s0r1.stop_clickhouse() + + s0r0.query( + "ALTER TABLE test_part_move_step_by_step_kill MOVE PART 'all_0_0_0' TO SHARD '/clickhouse/shard_1/tables/test_part_move_step_by_step_kill'") + + # Should hang on SYNC_SOURCE until all source replicas acknowledge new pinned UUIDs. + wait_for_state("SYNC_SOURCE", s0r0, "test_part_move_step_by_step_kill", "Some replicas haven\\'t processed event") + deduplication_invariant.assert_no_exception() + + # Start all replicas in source shard but stop a replica in destination shard + # to prevent SYNC_DESTINATION succeeding. + s1r1.stop_clickhouse() + s0r1.start_clickhouse() + + # After SYNC_SOURCE step no merges will be assigned. + s0r0.query("SYSTEM START MERGES test_part_move_step_by_step_kill; OPTIMIZE TABLE test_part_move_step_by_step_kill;") + s0r1.query("SYSTEM START MERGES test_part_move_step_by_step_kill; OPTIMIZE TABLE test_part_move_step_by_step_kill;") + + wait_for_state("SYNC_DESTINATION", s0r0, "test_part_move_step_by_step_kill", + "Some replicas haven\\'t processed event") + deduplication_invariant.assert_no_exception() + + # Start previously stopped replica in destination shard to let SYNC_DESTINATION + # succeed. + # Stop the other replica in destination shard to prevent DESTINATION_FETCH succeed. + s1r0.stop_clickhouse() + s1r1.start_clickhouse() + wait_for_state("DESTINATION_FETCH", s0r0, "test_part_move_step_by_step_kill", + "Some replicas haven\\'t processed event") + + # Start previously stopped replica in destination shard to let DESTINATION_FETCH + # succeed. + # Stop the other replica in destination shard to prevent DESTINATION_ATTACH succeed. + s1r1.stop_clickhouse() + s1r0.start_clickhouse() + wait_for_state("DESTINATION_ATTACH", s0r0, "test_part_move_step_by_step_kill", + "Some replicas haven\\'t processed event") + deduplication_invariant.assert_no_exception() + + # Rollback here. + s0r0.query(""" + KILL PART_MOVE_TO_SHARD + WHERE task_uuid = (SELECT task_uuid FROM system.part_moves_between_shards WHERE table = 'test_part_move_step_by_step_kill') + """) + + wait_for_state("DESTINATION_ATTACH", s0r0, "test_part_move_step_by_step_kill", + assert_exception_msg="Some replicas haven\\'t processed event", + assert_rollback=True) + + s1r1.start_clickhouse() + + wait_for_state("CANCELLED", s0r0, "test_part_move_step_by_step_kill", assert_rollback=True) + deduplication_invariant.assert_no_exception() + + # No hung tasks in replication queue. Would timeout otherwise. + for instance in started_cluster.instances.values(): + instance.query("SYSTEM SYNC REPLICA test_part_move_step_by_step_kill") + + assert "2" == s0r0.query("SELECT count() FROM test_part_move_step_by_step_kill").strip() + assert "0" == s1r0.query("SELECT count() FROM test_part_move_step_by_step_kill").strip() + + deduplication_invariant.stop_and_assert_no_exception() def test_move_not_permitted(started_cluster): + # Verify that invariants for part compatibility are checked. + + # Tests are executed in order. Make sure cluster is up if previous test + # failed. + s0r0.start_clickhouse() + s1r0.start_clickhouse() + for ix, n in enumerate([s0r0, s1r0]): - n.query("DROP TABLE IF EXISTS not_permitted") n.query(""" - CREATE TABLE not_permitted(v_{} UInt64) - ENGINE ReplicatedMergeTree('/clickhouse/shard_{}/tables/not_permitted', 'r') - ORDER BY tuple() - """.format(ix, ix)) + DROP TABLE IF EXISTS not_permitted_columns; + + CREATE TABLE not_permitted_columns(v_{ix} UInt64) + ENGINE ReplicatedMergeTree('/clickhouse/shard_{ix}/tables/not_permitted_columns', 'r') + ORDER BY tuple(); + """.format(ix=ix)) - s0r0.query("INSERT INTO not_permitted VALUES (1)") + partition = "date" + if ix > 0: + partition = "v" - with pytest.raises(QueryRuntimeException) as exc: - s0r0.query("ALTER TABLE not_permitted MOVE PART 'all_0_0_0' TO SHARD '/clickhouse/shard_1/tables/not_permitted'") + n.query(""" + DROP TABLE IF EXISTS not_permitted_partition; + CREATE TABLE not_permitted_partition(date Date, v UInt64) + ENGINE ReplicatedMergeTree('/clickhouse/shard_{ix}/tables/not_permitted_partition', 'r') + PARTITION BY ({partition}) + ORDER BY tuple(); + """.format(ix=ix, partition=partition)) - assert "DB::Exception: Table columns structure in ZooKeeper is different from local table structure." in str(exc.value) + s0r0.query("INSERT INTO not_permitted_columns VALUES (1)") + s0r0.query("INSERT INTO not_permitted_partition VALUES ('2021-09-03', 1)") - with pytest.raises(QueryRuntimeException) as exc: - s0r0.query("ALTER TABLE not_permitted MOVE PART 'all_0_0_0' TO SHARD '/clickhouse/shard_0/tables/not_permitted'") + with pytest.raises(QueryRuntimeException, match="DB::Exception: Source and destination are the same"): + s0r0.query("ALTER TABLE not_permitted_columns MOVE PART 'all_0_0_0' TO SHARD '/clickhouse/shard_0/tables/not_permitted_columns'") - assert "DB::Exception: Source and destination are the same" in str(exc.value) + with pytest.raises(QueryRuntimeException, match="DB::Exception: Table columns structure in ZooKeeper is different from local table structure."): + s0r0.query("ALTER TABLE not_permitted_columns MOVE PART 'all_0_0_0' TO SHARD '/clickhouse/shard_1/tables/not_permitted_columns'") + + with pytest.raises(QueryRuntimeException, match="DB::Exception: Existing table metadata in ZooKeeper differs in partition key expression."): + s0r0.query("ALTER TABLE not_permitted_partition MOVE PART '20210903_0_0_0' TO SHARD '/clickhouse/shard_1/tables/not_permitted_partition'") + + +def wait_for_state(desired_state, instance, test_table, assert_exception_msg=None, assert_rollback=False): + last_debug_print_time = time.time() + + print("Waiting to reach state: {}".format(desired_state)) + if assert_exception_msg: + print(" with exception contents: {}".format(assert_exception_msg)) + if assert_rollback: + print(" and rollback: {}".format(assert_rollback)) + + while True: + tasks = TSV.toMat(instance.query( + "SELECT state, num_tries, last_exception, rollback FROM system.part_moves_between_shards WHERE table = '{}'".format( + test_table))) + assert len(tasks) == 1, "only one task expected in this test" + + if time.time() - last_debug_print_time > 30: + last_debug_print_time = time.time() + print("Current state: ", tasks) + + [state, num_tries, last_exception, rollback] = tasks[0] + + if state == desired_state: + if assert_exception_msg and int(num_tries) < 3: + # Let the task be retried a few times when expecting an exception + # to make sure the exception is persistent and the code doesn't + # accidentally continue to run when we expect it not to. + continue + + if assert_exception_msg: + assert assert_exception_msg in last_exception + + if assert_rollback: + assert int(rollback) == 1, "rollback bit isn't set" + + break + elif state in ["DONE", "CANCELLED"]: + raise Exception("Reached terminal state {}, but was waiting for {}".format(state, desired_state)) + + time.sleep(0.1) + + +class ConcurrentInvariant: + def __init__(self, invariant_test, loop_sleep=0.1): + self.invariant_test = invariant_test + self.loop_sleep = loop_sleep + + self.started = False + self.exiting = False + self.exception = None + self.thread = threading.Thread(target=self._loop) + + def start(self): + if self.started: + raise Exception('invariant thread already started') + + self.started = True + self.thread.start() + + def stop_and_assert_no_exception(self): + self._assert_started() + + self.exiting = True + self.thread.join() + + if self.exception: + raise self.exception + + def assert_no_exception(self): + self._assert_started() + + if self.exception: + raise self.exception + + def _loop(self): + try: + while not self.exiting: + self.invariant_test() + time.sleep(self.loop_sleep) + except Exception as e: + self.exiting = True + self.exception = e + + def _assert_started(self): + if not self.started: + raise Exception('invariant thread not started, forgot to call start?') diff --git a/tests/integration/test_part_uuid/test.py b/tests/integration/test_part_uuid/test.py index 1dfeb17b9b8..0353bf9266d 100644 --- a/tests/integration/test_part_uuid/test.py +++ b/tests/integration/test_part_uuid/test.py @@ -93,7 +93,7 @@ def test_part_uuid_wal(started_cluster): uuids = set() for node in [node1, node2]: - node.query("SYSTEM SYNC REPLICA t") + node.query("SYSTEM SYNC REPLICA t_wal") part_initial_uuid = uuid.UUID(node.query("SELECT uuid FROM system.parts WHERE table = 't_wal' AND active ORDER BY name").strip()) assert "InMemory" == node.query("SELECT part_type FROM system.parts WHERE table = 't_wal' AND active ORDER BY name").strip() uuids.add(part_initial_uuid) diff --git a/tests/integration/test_polymorphic_parts/configs_old/users.d/not_optimize_count.xml b/tests/integration/test_polymorphic_parts/configs_old/users.d/not_optimize_count.xml index 5a06453b214..7f8036c4f87 100644 --- a/tests/integration/test_polymorphic_parts/configs_old/users.d/not_optimize_count.xml +++ b/tests/integration/test_polymorphic_parts/configs_old/users.d/not_optimize_count.xml @@ -1,7 +1,7 @@ - + 0 - + diff --git a/tests/integration/test_replicated_database/configs/settings.xml b/tests/integration/test_replicated_database/configs/settings.xml index ad426cfc61a..5666ffeace8 100644 --- a/tests/integration/test_replicated_database/configs/settings.xml +++ b/tests/integration/test_replicated_database/configs/settings.xml @@ -1,6 +1,7 @@ + 1 1 1 diff --git a/tests/integration/test_replicated_database/test.py b/tests/integration/test_replicated_database/test.py index 450caafb9ba..fa1e9cf49fa 100644 --- a/tests/integration/test_replicated_database/test.py +++ b/tests/integration/test_replicated_database/test.py @@ -1,3 +1,5 @@ +import os +import shutil import time import re import pytest @@ -16,7 +18,7 @@ snapshot_recovering_node = cluster.add_instance('snapshot_recovering_node', main all_nodes = [main_node, dummy_node, competing_node, snapshotting_node, snapshot_recovering_node] -uuid_regex = re.compile("[0-9a-f]{8}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{12}") +uuid_regex = re.compile("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}") def assert_create_query(nodes, table_name, expected): replace_uuid = lambda x: re.sub(uuid_regex, "uuid", x) query = "show create table {}".format(table_name) @@ -100,6 +102,102 @@ def test_simple_alter_table(started_cluster, engine): assert_create_query([main_node, dummy_node, competing_node], name, expected) +def get_table_uuid(database, name): + return main_node.query(f"SELECT uuid FROM system.tables WHERE database = '{database}' and name = '{name}'").strip() + + +@pytest.fixture(scope="module", name="attachable_part") +def fixture_attachable_part(started_cluster): + main_node.query(f"CREATE DATABASE testdb_attach_atomic ENGINE = Atomic") + main_node.query(f"CREATE TABLE testdb_attach_atomic.test (CounterID UInt32) ENGINE = MergeTree ORDER BY (CounterID)") + main_node.query(f"INSERT INTO testdb_attach_atomic.test VALUES (123)") + main_node.query(f"ALTER TABLE testdb_attach_atomic.test FREEZE WITH NAME 'test_attach'") + table_uuid = get_table_uuid("testdb_attach_atomic", "test") + return os.path.join(main_node.path, f"database/shadow/test_attach/store/{table_uuid[:3]}/{table_uuid}/all_1_1_0") + + + +@pytest.mark.parametrize("engine", ["MergeTree", "ReplicatedMergeTree"]) +def test_alter_attach(started_cluster, attachable_part, engine): + name = "alter_attach_test_{}".format(engine) + main_node.query(f"CREATE TABLE testdb.{name} (CounterID UInt32) ENGINE = {engine} ORDER BY (CounterID)") + table_uuid = get_table_uuid("testdb", name) + # Provide and attach a part to the main node + shutil.copytree( + attachable_part, os.path.join(main_node.path, f"database/store/{table_uuid[:3]}/{table_uuid}/detached/all_1_1_0") + ) + main_node.query(f"ALTER TABLE testdb.{name} ATTACH PART 'all_1_1_0'") + # On the main node, data is attached + assert main_node.query(f"SELECT CounterID FROM testdb.{name}") == "123\n" + # On the other node, data is replicated only if using a Replicated table engine + if engine == "ReplicatedMergeTree": + assert dummy_node.query(f"SELECT CounterID FROM testdb.{name}") == "123\n" + else: + assert dummy_node.query(f"SELECT CounterID FROM testdb.{name}") == "" + + +@pytest.mark.parametrize("engine", ["MergeTree", "ReplicatedMergeTree"]) +def test_alter_drop_part(started_cluster, engine): + table = f"alter_drop_{engine}" + part_name = "all_0_0_0" if engine == "ReplicatedMergeTree" else "all_1_1_0" + main_node.query(f"CREATE TABLE testdb.{table} (CounterID UInt32) ENGINE = {engine} ORDER BY (CounterID)") + main_node.query(f"INSERT INTO testdb.{table} VALUES (123)") + if engine == "MergeTree": + dummy_node.query(f"INSERT INTO testdb.{table} VALUES (456)") + main_node.query(f"ALTER TABLE testdb.{table} DROP PART '{part_name}'") + assert main_node.query(f"SELECT CounterID FROM testdb.{table}") == "" + if engine == "ReplicatedMergeTree": + # The DROP operation is still replicated at the table engine level + assert dummy_node.query(f"SELECT CounterID FROM testdb.{table}") == "" + else: + assert dummy_node.query(f"SELECT CounterID FROM testdb.{table}") == "456\n" + + +@pytest.mark.parametrize("engine", ["MergeTree", "ReplicatedMergeTree"]) +def test_alter_detach_part(started_cluster, engine): + table = f"alter_detach_{engine}" + part_name = "all_0_0_0" if engine == "ReplicatedMergeTree" else "all_1_1_0" + main_node.query(f"CREATE TABLE testdb.{table} (CounterID UInt32) ENGINE = {engine} ORDER BY (CounterID)") + main_node.query(f"INSERT INTO testdb.{table} VALUES (123)") + if engine == "MergeTree": + dummy_node.query(f"INSERT INTO testdb.{table} VALUES (456)") + main_node.query(f"ALTER TABLE testdb.{table} DETACH PART '{part_name}'") + detached_parts_query = f"SELECT name FROM system.detached_parts WHERE database='testdb' AND table='{table}'" + assert main_node.query(detached_parts_query) == f"{part_name}\n" + if engine == "ReplicatedMergeTree": + # The detach operation is still replicated at the table engine level + assert dummy_node.query(detached_parts_query) == f"{part_name}\n" + else: + assert dummy_node.query(detached_parts_query) == "" + + +@pytest.mark.parametrize("engine", ["MergeTree", "ReplicatedMergeTree"]) +def test_alter_drop_detached_part(started_cluster, engine): + table = f"alter_drop_detached_{engine}" + part_name = "all_0_0_0" if engine == "ReplicatedMergeTree" else "all_1_1_0" + main_node.query(f"CREATE TABLE testdb.{table} (CounterID UInt32) ENGINE = {engine} ORDER BY (CounterID)") + main_node.query(f"INSERT INTO testdb.{table} VALUES (123)") + main_node.query(f"ALTER TABLE testdb.{table} DETACH PART '{part_name}'") + if engine == "MergeTree": + dummy_node.query(f"INSERT INTO testdb.{table} VALUES (456)") + dummy_node.query(f"ALTER TABLE testdb.{table} DETACH PART '{part_name}'") + main_node.query(f"ALTER TABLE testdb.{table} DROP DETACHED PART '{part_name}'") + detached_parts_query = f"SELECT name FROM system.detached_parts WHERE database='testdb' AND table='{table}'" + assert main_node.query(detached_parts_query) == "" + assert dummy_node.query(detached_parts_query) == f"{part_name}\n" + + +def test_alter_fetch(started_cluster): + main_node.query("CREATE TABLE testdb.fetch_source (CounterID UInt32) ENGINE = ReplicatedMergeTree ORDER BY (CounterID)") + main_node.query("CREATE TABLE testdb.fetch_target (CounterID UInt32) ENGINE = ReplicatedMergeTree ORDER BY (CounterID)") + main_node.query("INSERT INTO testdb.fetch_source VALUES (123)") + table_uuid = get_table_uuid("testdb", "fetch_source") + main_node.query(f"ALTER TABLE testdb.fetch_target FETCH PART 'all_0_0_0' FROM '/clickhouse/tables/{table_uuid}/{{shard}}' ") + detached_parts_query = "SELECT name FROM system.detached_parts WHERE database='testdb' AND table='fetch_target'" + assert main_node.query(detached_parts_query) == "all_0_0_0\n" + assert dummy_node.query(detached_parts_query) == "" + + def test_alters_from_different_replicas(started_cluster): # test_alters_from_different_replicas competing_node.query("CREATE DATABASE IF NOT EXISTS testdb ENGINE = Replicated('/clickhouse/databases/test1', 'shard1', 'replica3');") diff --git a/tests/integration/test_replicated_merge_tree_encrypted_disk/__init__.py b/tests/integration/test_replicated_merge_tree_encrypted_disk/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/key_a.xml b/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/key_a.xml new file mode 100644 index 00000000000..9d866c91f54 --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/key_a.xml @@ -0,0 +1,9 @@ + + + + + aaaaaaaaaaaaaaaa + + + + diff --git a/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/key_b.xml b/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/key_b.xml new file mode 100644 index 00000000000..c34283160a5 --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/key_b.xml @@ -0,0 +1,9 @@ + + + + + bbbbbbbbbbbbbbbb + + + + diff --git a/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/remote_servers.xml b/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/remote_servers.xml new file mode 100644 index 00000000000..84d16206080 --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/remote_servers.xml @@ -0,0 +1,16 @@ + + + + + + node1 + 9000 + + + node2 + 9000 + + + + + diff --git a/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/storage.xml b/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/storage.xml new file mode 100644 index 00000000000..312a009ed9a --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encrypted_disk/configs/storage.xml @@ -0,0 +1,25 @@ + + + + + local + /disk/ + + + encrypted + disk_local + encrypted/ + 0000000000000000 + + + + + +
+ disk_encrypted +
+
+
+
+
+
diff --git a/tests/integration/test_replicated_merge_tree_encrypted_disk/test.py b/tests/integration/test_replicated_merge_tree_encrypted_disk/test.py new file mode 100644 index 00000000000..bc5a419aaf2 --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encrypted_disk/test.py @@ -0,0 +1,87 @@ +import pytest +from helpers.cluster import ClickHouseCluster +from helpers.test_tools import assert_eq_with_retry, TSV +import os + + +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) +cluster = ClickHouseCluster(__file__) + +node1 = cluster.add_instance("node1", + main_configs=["configs/remote_servers.xml", "configs/storage.xml"], + tmpfs=["/disk:size=100M"], + macros={'replica': 'node1'}, + with_zookeeper=True) + +node2 = cluster.add_instance("node2", + main_configs=["configs/remote_servers.xml", "configs/storage.xml"], + tmpfs=["/disk:size=100M"], + macros={'replica': 'node2'}, + with_zookeeper=True) + +@pytest.fixture(scope="module", autouse=True) +def start_cluster(): + try: + cluster.start() + yield + finally: + cluster.shutdown() + + +def copy_keys(instance, keys_file_name): + instance.copy_file_to_container(os.path.join(SCRIPT_DIR, f"configs/{keys_file_name}.xml"), "/etc/clickhouse-server/config.d/z_keys.xml") + instance.query("SYSTEM RELOAD CONFIG") + +def create_table(): + node1.query("DROP TABLE IF EXISTS tbl ON CLUSTER 'cluster' NO DELAY") + node1.query( + """ + CREATE TABLE tbl ON CLUSTER 'cluster' ( + id Int64, + str String + ) ENGINE=ReplicatedMergeTree('/clickhouse/tables/tbl/', '{replica}') + ORDER BY id + SETTINGS storage_policy='encrypted_policy' + """ + ) + +def insert_data(): + node1.query("INSERT INTO tbl VALUES (1, 'str1')") + node2.query("INSERT INTO tbl VALUES (1, 'str1')") # Test deduplication + node2.query("INSERT INTO tbl VALUES (2, 'str2')") + +def optimize_table(): + node1.query("OPTIMIZE TABLE tbl ON CLUSTER 'cluster' FINAL") + +def check_table(): + expected=[[1, 'str1'], [2, 'str2']] + assert node1.query("SELECT * FROM tbl ORDER BY id") == TSV(expected) + assert node2.query("SELECT * FROM tbl ORDER BY id") == TSV(expected) + assert node1.query("CHECK TABLE tbl") == "1\n" + assert node2.query("CHECK TABLE tbl") == "1\n" + + +# Actual tests: + +def test_same_keys(): + copy_keys(node1, 'key_a') + copy_keys(node2, 'key_a') + create_table() + + insert_data() + check_table() + + optimize_table() + check_table() + + +def test_different_keys(): + copy_keys(node1, 'key_a') + copy_keys(node2, 'key_b') + create_table() + + insert_data() + check_table() + + optimize_table() + check_table() diff --git a/tests/integration/test_replicated_merge_tree_encryption_codec/__init__.py b/tests/integration/test_replicated_merge_tree_encryption_codec/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/integration/test_replicated_merge_tree_encryption_codec/configs/encryption_codec.xml b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/encryption_codec.xml new file mode 100644 index 00000000000..eb4f8abaa77 --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/encryption_codec.xml @@ -0,0 +1,7 @@ + + + + 0000000000000000 + + + diff --git a/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a.xml b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a.xml new file mode 100644 index 00000000000..a31978e7015 --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a.xml @@ -0,0 +1,7 @@ + + + + aaaaaaaaaaaaaaaa + + + diff --git a/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_b_current_a.xml b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_b_current_a.xml new file mode 100644 index 00000000000..01ca9123ccb --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_b_current_a.xml @@ -0,0 +1,10 @@ + + + + + aaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbb + 0 + + + diff --git a/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_b_current_b.xml b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_b_current_b.xml new file mode 100644 index 00000000000..98cf6ced0c7 --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_b_current_b.xml @@ -0,0 +1,10 @@ + + + + + aaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbb + 1 + + + diff --git a/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_nonce_x.xml b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_nonce_x.xml new file mode 100644 index 00000000000..40c5adab19b --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_nonce_x.xml @@ -0,0 +1,8 @@ + + + + aaaaaaaaaaaaaaaa + xxxxxxxxxxxx + + + diff --git a/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_nonce_y.xml b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_nonce_y.xml new file mode 100644 index 00000000000..eadfb6e6733 --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_a_and_nonce_y.xml @@ -0,0 +1,8 @@ + + + + aaaaaaaaaaaaaaaa + yyyyyyyyyyyy + + + diff --git a/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_b.xml b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_b.xml new file mode 100644 index 00000000000..e336324f648 --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/key_b.xml @@ -0,0 +1,7 @@ + + + + bbbbbbbbbbbbbbbb + + + diff --git a/tests/integration/test_replicated_merge_tree_encryption_codec/configs/remote_servers.xml b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/remote_servers.xml new file mode 100644 index 00000000000..84d16206080 --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encryption_codec/configs/remote_servers.xml @@ -0,0 +1,16 @@ + + + + + + node1 + 9000 + + + node2 + 9000 + + + + + diff --git a/tests/integration/test_replicated_merge_tree_encryption_codec/test.py b/tests/integration/test_replicated_merge_tree_encryption_codec/test.py new file mode 100644 index 00000000000..3aec2259703 --- /dev/null +++ b/tests/integration/test_replicated_merge_tree_encryption_codec/test.py @@ -0,0 +1,110 @@ +import pytest +from helpers.cluster import ClickHouseCluster +from helpers.test_tools import assert_eq_with_retry, TSV +import os + + +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) +cluster = ClickHouseCluster(__file__) + +node1 = cluster.add_instance("node1", + main_configs=["configs/remote_servers.xml", "configs/encryption_codec.xml"], + macros={'replica': 'node1'}, + with_zookeeper=True) + +node2 = cluster.add_instance("node2", + main_configs=["configs/remote_servers.xml", "configs/encryption_codec.xml"], + macros={'replica': 'node2'}, + with_zookeeper=True) + +@pytest.fixture(scope="module", autouse=True) +def start_cluster(): + try: + cluster.start() + yield + finally: + cluster.shutdown() + + +def copy_keys(instance, keys_file_name): + instance.copy_file_to_container(os.path.join(SCRIPT_DIR, f"configs/{keys_file_name}.xml"), "/etc/clickhouse-server/config.d/z_keys.xml") + instance.query("SYSTEM RELOAD CONFIG") + +def create_table(): + node1.query("DROP TABLE IF EXISTS tbl ON CLUSTER 'cluster' NO DELAY") + node1.query( + """ + CREATE TABLE tbl ON CLUSTER 'cluster' ( + id Int64, + str String Codec(AES_128_GCM_SIV) + ) ENGINE=ReplicatedMergeTree('/clickhouse/tables/tbl/', '{replica}') + ORDER BY id + """ + ) + +def insert_data(): + node1.query("INSERT INTO tbl VALUES (1, 'str1')") + node2.query("INSERT INTO tbl VALUES (1, 'str1')") # Test deduplication + node2.query("INSERT INTO tbl VALUES (2, 'str2')") + +def optimize_table(): + node1.query("OPTIMIZE TABLE tbl ON CLUSTER 'cluster' FINAL") + +def check_table(): + expected=[[1, 'str1'], [2, 'str2']] + assert node1.query("SELECT * FROM tbl ORDER BY id") == TSV(expected) + assert node2.query("SELECT * FROM tbl ORDER BY id") == TSV(expected) + assert node1.query("CHECK TABLE tbl") == "1\n" + assert node2.query("CHECK TABLE tbl") == "1\n" + + +# Actual tests: + +def test_same_keys(): + copy_keys(node1, 'key_a') + copy_keys(node2, 'key_a') + create_table() + + insert_data() + check_table() + + optimize_table() + check_table() + + +def test_different_keys(): + copy_keys(node1, 'key_a') + copy_keys(node2, 'key_b') + create_table() + + insert_data() + assert "BAD_DECRYPT" in node1.query_and_get_error("SELECT * FROM tbl") + assert "BAD_DECRYPT" in node2.query_and_get_error("SELECT * FROM tbl") + + # Hang? + #optimize_table() + #check_table() + + +def test_different_current_key_ids(): + copy_keys(node1, 'key_a_and_b_current_a') + copy_keys(node2, 'key_a_and_b_current_b') + create_table() + + insert_data() + check_table() + + optimize_table() + check_table() + + +def test_different_nonces(): + copy_keys(node1, 'key_a_and_nonce_x') + copy_keys(node2, 'key_a_and_nonce_y') + create_table() + + insert_data() + check_table() + + optimize_table() + check_table() diff --git a/tests/integration/test_replicated_merge_tree_with_auxiliary_zookeepers/test.py b/tests/integration/test_replicated_merge_tree_with_auxiliary_zookeepers/test.py index a9dcce1b9d4..4644790ff94 100644 --- a/tests/integration/test_replicated_merge_tree_with_auxiliary_zookeepers/test.py +++ b/tests/integration/test_replicated_merge_tree_with_auxiliary_zookeepers/test.py @@ -101,3 +101,13 @@ def test_drop_replicated_merge_tree_with_auxiliary_zookeeper(started_cluster): assert zk.exists('/clickhouse/tables/test/test_auxiliary_zookeeper') drop_table([node1, node2], "test_auxiliary_zookeeper") assert zk.exists('/clickhouse/tables/test/test_auxiliary_zookeeper') is None + +def test_path_ambiguity(started_cluster): + drop_table([node1, node2], "test_path_ambiguity1") + drop_table([node1, node2], "test_path_ambiguity2") + node1.query("create table test_path_ambiguity1 (n int) engine=ReplicatedMergeTree('/test:bad:/path', '1') order by n") + assert "Invalid auxiliary ZooKeeper name" in node1.query_and_get_error("create table test_path_ambiguity2 (n int) engine=ReplicatedMergeTree('test:bad:/path', '1') order by n") + assert "ZooKeeper path must starts with '/'" in node1.query_and_get_error("create table test_path_ambiguity2 (n int) engine=ReplicatedMergeTree('test/bad:/path', '1') order by n") + node1.query("create table test_path_ambiguity2 (n int) engine=ReplicatedMergeTree('zookeeper2:/bad:/path', '1') order by n") + drop_table([node1, node2], "test_path_ambiguity1") + drop_table([node1, node2], "test_path_ambiguity2") diff --git a/tests/integration/test_sharding_key_from_default_column/configs/test_cluster.xml b/tests/integration/test_sharding_key_from_default_column/configs/test_cluster.xml index 0437e047fad..a378e397011 100644 --- a/tests/integration/test_sharding_key_from_default_column/configs/test_cluster.xml +++ b/tests/integration/test_sharding_key_from_default_column/configs/test_cluster.xml @@ -1,4 +1,4 @@ - + @@ -15,4 +15,4 @@ - +
diff --git a/tests/integration/test_sql_user_defined_functions_on_cluster/__init__.py b/tests/integration/test_sql_user_defined_functions_on_cluster/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/integration/test_sql_user_defined_functions_on_cluster/configs/config.d/clusters.xml b/tests/integration/test_sql_user_defined_functions_on_cluster/configs/config.d/clusters.xml new file mode 100644 index 00000000000..4d668f591b9 --- /dev/null +++ b/tests/integration/test_sql_user_defined_functions_on_cluster/configs/config.d/clusters.xml @@ -0,0 +1,22 @@ + + + + + + ch1 + 9000 + + + ch2 + 9000 + + + + + ch3 + 9000 + + + + + diff --git a/tests/integration/test_sql_user_defined_functions_on_cluster/test.py b/tests/integration/test_sql_user_defined_functions_on_cluster/test.py new file mode 100644 index 00000000000..d5c74a99622 --- /dev/null +++ b/tests/integration/test_sql_user_defined_functions_on_cluster/test.py @@ -0,0 +1,34 @@ +import pytest +from helpers.cluster import ClickHouseCluster + +cluster = ClickHouseCluster(__file__) +ch1 = cluster.add_instance('ch1', main_configs=["configs/config.d/clusters.xml"], with_zookeeper=True) +ch2 = cluster.add_instance('ch2', main_configs=["configs/config.d/clusters.xml"], with_zookeeper=True) +ch3 = cluster.add_instance('ch3', main_configs=["configs/config.d/clusters.xml"], with_zookeeper=True) + + +@pytest.fixture(scope="module", autouse=True) +def started_cluster(): + try: + cluster.start() + yield cluster + + finally: + cluster.shutdown() + + +def test_sql_user_defined_functions_on_cluster(): + assert "Unknown function test_function" in ch1.query_and_get_error("SELECT test_function(1);") + assert "Unknown function test_function" in ch2.query_and_get_error("SELECT test_function(1);") + assert "Unknown function test_function" in ch3.query_and_get_error("SELECT test_function(1);") + + ch1.query_with_retry("CREATE FUNCTION test_function ON CLUSTER 'cluster' AS x -> x + 1;") + + assert ch1.query("SELECT test_function(1);") == "2\n" + assert ch2.query("SELECT test_function(1);") == "2\n" + assert ch3.query("SELECT test_function(1);") == "2\n" + + ch2.query_with_retry("DROP FUNCTION test_function ON CLUSTER 'cluster'") + assert "Unknown function test_function" in ch1.query_and_get_error("SELECT test_function(1);") + assert "Unknown function test_function" in ch2.query_and_get_error("SELECT test_function(1);") + assert "Unknown function test_function" in ch3.query_and_get_error("SELECT test_function(1);") diff --git a/tests/integration/test_storage_kafka/test.py b/tests/integration/test_storage_kafka/test.py index 6106966e5b7..4bf778531a7 100644 --- a/tests/integration/test_storage_kafka/test.py +++ b/tests/integration/test_storage_kafka/test.py @@ -2850,7 +2850,7 @@ def test_kafka_formats_with_broken_message(kafka_cluster): # broken message b'\x05\x02\x69\x64\x07\x62\x6c\x6f\x63\x6b\x4e\x6f\x04\x76\x61\x6c\x31\x04\x76\x61\x6c\x32\x04\x76\x61\x6c\x33\x05\x49\x6e\x74\x36\x34\x06\x53\x74\x72\x69\x6e\x67\x06\x53\x74\x72\x69\x6e\x67\x07\x46\x6c\x6f\x61\x74\x33\x32\x05\x55\x49\x6e\x74\x38\x00\x00\x00\x00\x00\x00\x00\x00\x03\x42\x41\x44\x02\x41\x4d\x00\x00\x00\x3f\x01', ], - 'expected':'{"raw_message":"0502696407626C6F636B4E6F0476616C310476616C320476616C3305496E74363406537472696E6706537472696E6707466C6F617433320555496E743800000000000000000342414402414D0000003F01","error":"Cannot read all data. Bytes read: 9. Bytes expected: 65.: (at row 1)\\n"}', + 'expected':'{"raw_message":"0502696407626C6F636B4E6F0476616C310476616C320476616C3305496E74363406537472696E6706537472696E6707466C6F617433320555496E743800000000000000000342414402414D0000003F01","error":"Type of \'blockNo\' must be UInt16, not String"}', 'printable':False, }, 'ORC': { diff --git a/tests/integration/test_storage_rabbitmq/configs/macros.xml b/tests/integration/test_storage_rabbitmq/configs/macros.xml index 6e9f3390b39..8f27ff51ed1 100644 --- a/tests/integration/test_storage_rabbitmq/configs/macros.xml +++ b/tests/integration/test_storage_rabbitmq/configs/macros.xml @@ -1,8 +1,8 @@ - + rabbitmq1 5672 macro JSONEachRow - + diff --git a/tests/integration/test_storage_s3/test.py b/tests/integration/test_storage_s3/test.py index 2f49b462d19..e25535b860f 100644 --- a/tests/integration/test_storage_s3/test.py +++ b/tests/integration/test_storage_s3/test.py @@ -436,12 +436,12 @@ def test_remote_host_filter(started_cluster): query = "select *, column1*column2*column3 from s3('http://{}:{}/{}/test.csv', 'CSV', '{}')".format( "invalid_host", MINIO_INTERNAL_PORT, started_cluster.minio_bucket, format) - assert "not allowed in config.xml" in instance.query_and_get_error(query) + assert "not allowed in configuration file" in instance.query_and_get_error(query) other_values = "(1, 1, 1), (1, 1, 1), (11, 11, 11)" query = "insert into table function s3('http://{}:{}/{}/test.csv', 'CSV', '{}') values {}".format( "invalid_host", MINIO_INTERNAL_PORT, started_cluster.minio_bucket, format, other_values) - assert "not allowed in config.xml" in instance.query_and_get_error(query) + assert "not allowed in configuration file" in instance.query_and_get_error(query) @pytest.mark.parametrize("s3_storage_args", [ diff --git a/tests/performance/aggregation_in_order_2.xml b/tests/performance/aggregation_in_order_2.xml new file mode 100644 index 00000000000..083a8031d46 --- /dev/null +++ b/tests/performance/aggregation_in_order_2.xml @@ -0,0 +1,30 @@ + + + 1 + 10000000 + 30 + + + + + uniqs + + 100 + 10000 + 1000000 + + + + + CREATE TABLE mt_30_parts_{uniqs}_uniqs(id UInt32, val1 UInt32, val2 UInt32) ENGINE = MergeTree ORDER BY val1 PARTITION BY id % 30 SETTINGS parts_to_throw_insert=10000, parts_to_delay_insert=10000 + SYSTEM STOP MERGES mt_30_parts_{uniqs}_uniqs + INSERT INTO mt_30_parts_{uniqs}_uniqs SELECT number, rand() % {uniqs}, rand() FROM numbers_mt(100000000) SETTINGS max_block_size=10000000 + SYSTEM START MERGES mt_30_parts_{uniqs}_uniqs + OPTIMIZE TABLE mt_30_parts_{uniqs}_uniqs FINAL + + SELECT sum(val2) FROM mt_30_parts_{uniqs}_uniqs GROUP BY val1 FORMAT Null + SELECT groupArray(val2) FROM mt_30_parts_{uniqs}_uniqs GROUP BY val1 FORMAT Null + SELECT uniqExact(val2) FROM mt_30_parts_{uniqs}_uniqs GROUP BY val1 FORMAT Null + + DROP TABLE IF EXISTS mt_30_parts_{uniqs}_uniqs + diff --git a/tests/performance/flat_dictionary.xml b/tests/performance/flat_dictionary.xml index 243f90a8e59..8957925ef1a 100644 --- a/tests/performance/flat_dictionary.xml +++ b/tests/performance/flat_dictionary.xml @@ -61,15 +61,15 @@ - SELECT * FROM simple_key_flat_dictionary + WITH rand64() % toUInt64({elements_count}) as key + SELECT dictHas('default.simple_key_flat_dictionary', key) + FROM system.numbers + LIMIT {elements_count} FORMAT Null; - WITH rand64() % toUInt64(75000000) as key - SELECT dictHas('default.simple_key_flat_dictionary', key) - FROM system.numbers - LIMIT 75000000 + SELECT * FROM simple_key_flat_dictionary FORMAT Null; diff --git a/tests/performance/hashed_array_dictionary.xml b/tests/performance/hashed_array_dictionary.xml index a26e654248f..80a565e67b0 100644 --- a/tests/performance/hashed_array_dictionary.xml +++ b/tests/performance/hashed_array_dictionary.xml @@ -94,6 +94,7 @@ LIMIT {elements_count} FORMAT Null; + WITH rand64() % toUInt64({elements_count}) as key SELECT dictHas('default.simple_key_hashed_array_dictionary', key) @@ -102,6 +103,11 @@ FORMAT Null; + + SELECT * FROM simple_key_hashed_array_dictionary + FORMAT Null; + + WITH (rand64() % toUInt64({elements_count}), toString(rand64() % toUInt64({elements_count}))) as key SELECT dictGet('default.complex_key_hashed_array_dictionary', {column_name}, key) @@ -109,6 +115,7 @@ LIMIT {elements_count} FORMAT Null; + WITH (rand64() % toUInt64({elements_count}), toString(rand64() % toUInt64({elements_count}))) as key SELECT dictHas('default.complex_key_hashed_array_dictionary', key) @@ -117,6 +124,11 @@ FORMAT Null; + + SELECT * FROM complex_key_hashed_array_dictionary + FORMAT Null; + + DROP TABLE IF EXISTS simple_key_hashed_array_dictionary_source_table; DROP TABLE IF EXISTS complex_key_hashed_array_dictionary_source_table; diff --git a/tests/performance/hashed_dictionary.xml b/tests/performance/hashed_dictionary.xml index 91ccc0b1075..cf1cdac6df1 100644 --- a/tests/performance/hashed_dictionary.xml +++ b/tests/performance/hashed_dictionary.xml @@ -94,6 +94,7 @@ LIMIT {elements_count} FORMAT Null; + WITH rand64() % toUInt64({elements_count}) as key SELECT dictHas('default.simple_key_hashed_dictionary', key) @@ -102,6 +103,11 @@ FORMAT Null; + + SELECT * FROM simple_key_hashed_dictionary + FORMAT Null; + + WITH (rand64() % toUInt64({elements_count}), toString(rand64() % toUInt64({elements_count}))) as key SELECT dictGet('default.complex_key_hashed_dictionary', {column_name}, key) @@ -109,6 +115,7 @@ LIMIT {elements_count} FORMAT Null; + WITH (rand64() % toUInt64({elements_count}), toString(rand64() % toUInt64({elements_count}))) as key SELECT dictHas('default.complex_key_hashed_dictionary', key) @@ -117,6 +124,11 @@ FORMAT Null; + + SELECT * FROM complex_key_hashed_dictionary + FORMAT Null; + + DROP TABLE IF EXISTS simple_key_hashed_dictionary_source_table; DROP TABLE IF EXISTS complex_key_hashed_dictionary_source_table; diff --git a/tests/performance/json_extract_simdjson.xml b/tests/performance/json_extract_simdjson.xml index 9ec3613d5e8..b22173f9946 100644 --- a/tests/performance/json_extract_simdjson.xml +++ b/tests/performance/json_extract_simdjson.xml @@ -24,7 +24,7 @@ SELECT 'simdjson-4', count() FROM zeros(5000000) WHERE NOT ignore(JSONExtractUInt(materialize({json}), 'nparam')) SELECT 'simdjson-5', count() FROM zeros(5000000) WHERE NOT ignore(JSONExtractFloat(materialize({json}), 'fparam')) - SELECT 'simdjson-6', count() FROM zeros(5000000) WHERE NOT ignore(JSONExtractString(materialize({long_json}), 'sparam')) + SELECT 'simdjson-6', count() FROM zeros(1000000) WHERE NOT ignore(JSONExtractString(materialize({long_json}), 'sparam')) SELECT 'simdjson-7', count() FROM zeros(5000000) WHERE NOT ignore(JSONExtractString(materialize({long_json}), 'sparam', 'nested_1')) SELECT 'simdjson-8', count() FROM zeros(5000000) WHERE NOT ignore(JSONExtractInt(materialize({long_json}), 'nparam')) SELECT 'simdjson-9', count() FROM zeros(5000000) WHERE NOT ignore(JSONExtractUInt(materialize({long_json}), 'nparam')) diff --git a/tests/performance/read_in_order_many_parts.xml b/tests/performance/read_in_order_many_parts.xml index ca713935426..065d12fadd2 100644 --- a/tests/performance/read_in_order_many_parts.xml +++ b/tests/performance/read_in_order_many_parts.xml @@ -15,17 +15,24 @@ 1000 + + uniqs + + 100 + 10000 + + - CREATE TABLE mt_{parts}_parts(id UInt32, val1 UInt32, val2 UInt32) ENGINE = MergeTree ORDER BY val1 PARTITION BY id % {parts} SETTINGS parts_to_throw_insert=10000, parts_to_delay_insert=10000 - SYSTEM STOP MERGES mt_{parts}_parts - INSERT INTO mt_{parts}_parts SELECT number, rand() % 10000, rand() FROM numbers_mt(100000000) SETTINGS max_block_size=10000000 - SYSTEM START MERGES mt_{parts}_parts - OPTIMIZE TABLE mt_{parts}_parts FINAL + CREATE TABLE mt_{parts}_parts_{uniqs}_uniqs(id UInt32, val1 UInt32, val2 UInt32) ENGINE = MergeTree ORDER BY val1 PARTITION BY id % {parts} SETTINGS parts_to_throw_insert=10000, parts_to_delay_insert=10000 + SYSTEM STOP MERGES mt_{parts}_parts_{uniqs}_uniqs + INSERT INTO mt_{parts}_parts_{uniqs}_uniqs SELECT number, rand() % {uniqs}, rand() FROM numbers_mt(100000000) SETTINGS max_block_size=10000000 + SYSTEM START MERGES mt_{parts}_parts_{uniqs}_uniqs + OPTIMIZE TABLE mt_{parts}_parts_{uniqs}_uniqs FINAL - SELECT val2 FROM mt_{parts}_parts ORDER BY val1 LIMIT 1000000 FORMAT Null - SELECT val2 FROM mt_{parts}_parts ORDER BY val1 LIMIT 10000000 FORMAT Null - SELECT sum(val2) FROM mt_{parts}_parts GROUP BY val1 FORMAT Null + SELECT val2 FROM mt_{parts}_parts_10000_uniqs ORDER BY val1 LIMIT 1000000 FORMAT Null + SELECT val2 FROM mt_{parts}_parts_10000_uniqs ORDER BY val1 LIMIT 10000000 FORMAT Null + SELECT sum(val2) FROM mt_{parts}_parts_{uniqs}_uniqs GROUP BY val1 FORMAT Null - DROP TABLE IF EXISTS mt_{parts}_parts + DROP TABLE IF EXISTS mt_{parts}_parts_{uniqs}_uniqs diff --git a/tests/queries/0_stateless/00255_array_concat_string.reference b/tests/queries/0_stateless/00255_array_concat_string.reference index 2e336299656..4ffac8e5de0 100644 --- a/tests/queries/0_stateless/00255_array_concat_string.reference +++ b/tests/queries/0_stateless/00255_array_concat_string.reference @@ -63,3 +63,19 @@ yandex google test 123 hello world goodbye xyz yandex google test 123 hello wo 012 0 +hello;world;xyz;def + +1;23;456 +1;23;456 +127.0.0.1; 1.0.0.1 +127.0.0.1; 1.0.0.1 +2021-10-01; 2021-10-02 +2021-10-01; 2021-10-02 +hello;world;xyz;def + +1;23;456 +1;23;456 +127.0.0.1; 1.0.0.1 +127.0.0.1; 1.0.0.1 +2021-10-01; 2021-10-02 +2021-10-01; 2021-10-02 diff --git a/tests/queries/0_stateless/00255_array_concat_string.sql b/tests/queries/0_stateless/00255_array_concat_string.sql index e6fd34e2dfc..f4f95956a16 100644 --- a/tests/queries/0_stateless/00255_array_concat_string.sql +++ b/tests/queries/0_stateless/00255_array_concat_string.sql @@ -8,3 +8,19 @@ SELECT arrayStringConcat(arrayMap(x -> toString(x), range(number)), '') FROM sys SELECT arrayStringConcat(arrayMap(x -> toString(x), range(number)), ',') FROM system.numbers LIMIT 10; SELECT arrayStringConcat(arrayMap(x -> transform(x, [0, 1, 2, 3, 4, 5, 6, 7, 8], ['yandex', 'google', 'test', '123', '', 'hello', 'world', 'goodbye', 'xyz'], ''), arrayMap(x -> x % 9, range(number))), ' ') FROM system.numbers LIMIT 20; SELECT arrayStringConcat(arrayMap(x -> toString(x), range(number % 4))) FROM system.numbers LIMIT 10; +SELECT arrayStringConcat([Null, 'hello', Null, 'world', Null, 'xyz', 'def', Null], ';'); +SELECT arrayStringConcat([Null::Nullable(String), Null::Nullable(String)], ';'); +SELECT arrayStringConcat(arr, ';') FROM (SELECT [1, 23, 456] AS arr); +SELECT arrayStringConcat(arr, ';') FROM (SELECT [Null, 1, Null, 23, Null, 456, Null] AS arr); +SELECT arrayStringConcat(arr, '; ') FROM (SELECT [toIPv4('127.0.0.1'), toIPv4('1.0.0.1')] AS arr); +SELECT arrayStringConcat(arr, '; ') FROM (SELECT [toIPv4('127.0.0.1'), Null, toIPv4('1.0.0.1')] AS arr); +SELECT arrayStringConcat(arr, '; ') FROM (SELECT [toDate('2021-10-01'), toDate('2021-10-02')] AS arr); +SELECT arrayStringConcat(arr, '; ') FROM (SELECT [toDate('2021-10-01'), Null, toDate('2021-10-02')] AS arr); +SELECT arrayStringConcat(materialize([Null, 'hello', Null, 'world', Null, 'xyz', 'def', Null]), ';'); +SELECT arrayStringConcat(materialize([Null::Nullable(String), Null::Nullable(String)]), ';'); +SELECT arrayStringConcat(arr, ';') FROM (SELECT materialize([1, 23, 456]) AS arr); +SELECT arrayStringConcat(arr, ';') FROM (SELECT materialize([Null, 1, Null, 23, Null, 456, Null]) AS arr); +SELECT arrayStringConcat(arr, '; ') FROM (SELECT materialize([toIPv4('127.0.0.1'), toIPv4('1.0.0.1')]) AS arr); +SELECT arrayStringConcat(arr, '; ') FROM (SELECT materialize([toIPv4('127.0.0.1'), Null, toIPv4('1.0.0.1')]) AS arr); +SELECT arrayStringConcat(arr, '; ') FROM (SELECT materialize([toDate('2021-10-01'), toDate('2021-10-02')]) AS arr); +SELECT arrayStringConcat(arr, '; ') FROM (SELECT materialize([toDate('2021-10-01'), Null, toDate('2021-10-02')]) AS arr); diff --git a/tests/queries/0_stateless/00300_csv.reference b/tests/queries/0_stateless/00300_csv.reference index 9d2fe7233d8..42cd22078c4 100644 --- a/tests/queries/0_stateless/00300_csv.reference +++ b/tests/queries/0_stateless/00300_csv.reference @@ -1,6 +1,10 @@ +"Hello, ""World""",123,"[1,2,3]",456,"['abc','def']","Newline +here" "x","y","z","a","b" "Hello, ""World""",123,"[1,2,3]",456,"['abc','def']","Newline here" +"x","y","z","a","b" +"String","UInt8","Array(UInt8)","Tuple(UInt16, Array(String))","String" "Hello, ""World""",123,"[1,2,3]",456,"['abc','def']","Newline here" 0,"0","[]","2000-01-01","2000-01-01 00:00:00" diff --git a/tests/queries/0_stateless/00300_csv.sql b/tests/queries/0_stateless/00300_csv.sql index 0c761ad0af1..76b1b29df06 100644 --- a/tests/queries/0_stateless/00300_csv.sql +++ b/tests/queries/0_stateless/00300_csv.sql @@ -1,3 +1,4 @@ -SELECT 'Hello, "World"' AS x, 123 AS y, [1, 2, 3] AS z, (456, ['abc', 'def']) AS a, 'Newline\nhere' AS b FORMAT CSVWithNames; SELECT 'Hello, "World"' AS x, 123 AS y, [1, 2, 3] AS z, (456, ['abc', 'def']) AS a, 'Newline\nhere' AS b FORMAT CSV; +SELECT 'Hello, "World"' AS x, 123 AS y, [1, 2, 3] AS z, (456, ['abc', 'def']) AS a, 'Newline\nhere' AS b FORMAT CSVWithNames; +SELECT 'Hello, "World"' AS x, 123 AS y, [1, 2, 3] AS z, (456, ['abc', 'def']) AS a, 'Newline\nhere' AS b FORMAT CSVWithNamesAndTypes; SELECT number, toString(number), range(number), toDate('2000-01-01') + number, toDateTime('2000-01-01 00:00:00') + number FROM system.numbers LIMIT 10 FORMAT CSV; diff --git a/tests/queries/0_stateless/00301_csv.sh b/tests/queries/0_stateless/00301_csv.sh index 333af9dcfe0..e10e98a123d 100755 --- a/tests/queries/0_stateless/00301_csv.sh +++ b/tests/queries/0_stateless/00301_csv.sh @@ -13,7 +13,7 @@ Hello "world", 789 ,2016-01-03 "Hello world", 100, 2016-01-04, default,, - default-eof,,' | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=1 --query="INSERT INTO csv FORMAT CSV"; + default-eof,,' | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=1 --input_format_csv_empty_as_default=1 --query="INSERT INTO csv FORMAT CSV"; $CLICKHOUSE_CLIENT --query="SELECT * FROM csv ORDER BY d"; $CLICKHOUSE_CLIENT --query="DROP TABLE csv"; @@ -33,7 +33,7 @@ $CLICKHOUSE_CLIENT --query="CREATE TABLE csv (t Nullable(DateTime('Europe/Moscow echo 'NULL, NULL "2016-01-01 01:02:03",NUL -"2016-01-02 01:02:03",Nhello' | $CLICKHOUSE_CLIENT --format_csv_null_representation='NULL' --query="INSERT INTO csv FORMAT CSV"; +"2016-01-02 01:02:03",Nhello' | $CLICKHOUSE_CLIENT --format_csv_null_representation='NULL' --input_format_csv_empty_as_default=1 --query="INSERT INTO csv FORMAT CSV"; $CLICKHOUSE_CLIENT --query="SELECT * FROM csv ORDER BY s NULLS LAST"; $CLICKHOUSE_CLIENT --query="DROP TABLE csv"; diff --git a/tests/queries/0_stateless/00626_replace_partition_from_table.sql b/tests/queries/0_stateless/00626_replace_partition_from_table.sql index 1e3e07f8274..958d2184c46 100644 --- a/tests/queries/0_stateless/00626_replace_partition_from_table.sql +++ b/tests/queries/0_stateless/00626_replace_partition_from_table.sql @@ -1,5 +1,4 @@ --- Tags: no-replicated-database, no-parallel --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tags: no-parallel DROP TABLE IF EXISTS src; DROP TABLE IF EXISTS dst; diff --git a/tests/queries/0_stateless/00626_replace_partition_from_table_zookeeper.sh b/tests/queries/0_stateless/00626_replace_partition_from_table_zookeeper.sh index 7b3f787eeab..d78f93d6bb3 100755 --- a/tests/queries/0_stateless/00626_replace_partition_from_table_zookeeper.sh +++ b/tests/queries/0_stateless/00626_replace_partition_from_table_zookeeper.sh @@ -1,6 +1,5 @@ #!/usr/bin/env bash -# Tags: zookeeper, no-replicated-database, no-parallel -# Tag no-replicated-database: Unsupported type of ALTER query +# Tags: zookeeper, no-parallel # Because REPLACE PARTITION does not forces immediate removal of replaced data parts from local filesystem # (it tries to do it as quick as possible, but it still performed in separate thread asynchronously) diff --git a/tests/queries/0_stateless/00646_url_engine.python b/tests/queries/0_stateless/00646_url_engine.python index be5332d5ca9..85ae3e776ed 100644 --- a/tests/queries/0_stateless/00646_url_engine.python +++ b/tests/queries/0_stateless/00646_url_engine.python @@ -12,8 +12,20 @@ import subprocess from io import StringIO from http.server import BaseHTTPRequestHandler, HTTPServer -def get_local_port(host): - with socket.socket() as fd: +def is_ipv6(host): + try: + socket.inet_aton(host) + return False + except: + return True + +def get_local_port(host, ipv6): + if ipv6: + family = socket.AF_INET6 + else: + family = socket.AF_INET + + with socket.socket(family) as fd: fd.bind((host, 0)) return fd.getsockname()[1] @@ -28,14 +40,23 @@ CLICKHOUSE_PORT_HTTP = os.environ.get('CLICKHOUSE_PORT_HTTP', '8123') # IP-address of this host accessible from the outside world. Get the first one HTTP_SERVER_HOST = subprocess.check_output(['hostname', '-i']).decode('utf-8').strip().split()[0] -HTTP_SERVER_PORT = get_local_port(HTTP_SERVER_HOST) +IS_IPV6 = is_ipv6(HTTP_SERVER_HOST) +HTTP_SERVER_PORT = get_local_port(HTTP_SERVER_HOST, IS_IPV6) # IP address and port of the HTTP server started from this script. HTTP_SERVER_ADDRESS = (HTTP_SERVER_HOST, HTTP_SERVER_PORT) -HTTP_SERVER_URL_STR = 'http://' + ':'.join(str(s) for s in HTTP_SERVER_ADDRESS) + "/" +if IS_IPV6: + HTTP_SERVER_URL_STR = 'http://' + f'[{str(HTTP_SERVER_ADDRESS[0])}]:{str(HTTP_SERVER_ADDRESS[1])}' + "/" +else: + HTTP_SERVER_URL_STR = 'http://' + f'{str(HTTP_SERVER_ADDRESS[0])}:{str(HTTP_SERVER_ADDRESS[1])}' + "/" + CSV_DATA = os.path.join(tempfile._get_default_tempdir(), next(tempfile._get_candidate_names())) def get_ch_answer(query): + host = CLICKHOUSE_HOST + if IS_IPV6: + host = f'[{host}]' + url = os.environ.get('CLICKHOUSE_URL', 'http://{host}:{port}'.format(host=CLICKHOUSE_HOST, port=CLICKHOUSE_PORT_HTTP)) return urllib.request.urlopen(url, data=query.encode()).read().decode() @@ -95,8 +116,15 @@ class CSVHTTPServer(BaseHTTPRequestHandler): def log_message(self, format, *args): return + +class HTTPServerV6(HTTPServer): + address_family = socket.AF_INET6 + def start_server(requests_amount): - httpd = HTTPServer(HTTP_SERVER_ADDRESS, CSVHTTPServer) + if IS_IPV6: + httpd = HTTPServerV6(HTTP_SERVER_ADDRESS, CSVHTTPServer) + else: + httpd = HTTPServer(HTTP_SERVER_ADDRESS, CSVHTTPServer) def real_func(): for i in range(requests_amount): diff --git a/tests/queries/0_stateless/00652_replicated_mutations_zookeeper.sh b/tests/queries/0_stateless/00652_replicated_mutations_zookeeper.sh index d0e40e2ee62..f070e34f2a1 100755 --- a/tests/queries/0_stateless/00652_replicated_mutations_zookeeper.sh +++ b/tests/queries/0_stateless/00652_replicated_mutations_zookeeper.sh @@ -63,7 +63,7 @@ ${CLICKHOUSE_CLIENT} --query="CREATE TABLE mutations_cleaner_r2(x UInt32) ENGINE cleanup_delay_period_random_add = 0" # Insert some data -${CLICKHOUSE_CLIENT} --query="INSERT INTO mutations_cleaner_r1(x) VALUES (1), (2), (3), (4)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO mutations_cleaner_r1(x) VALUES (1), (2), (3), (4), (5)" # Add some mutations and wait for their execution ${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_cleaner_r1 DELETE WHERE x = 1 SETTINGS mutations_sync = 2" diff --git a/tests/queries/0_stateless/00753_alter_attach.sql b/tests/queries/0_stateless/00753_alter_attach.sql index a9661d3a304..ca43fb3aeae 100644 --- a/tests/queries/0_stateless/00753_alter_attach.sql +++ b/tests/queries/0_stateless/00753_alter_attach.sql @@ -1,5 +1,4 @@ --- Tags: no-replicated-database, no-parallel --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tags: no-parallel DROP TABLE IF EXISTS alter_attach; CREATE TABLE alter_attach (x UInt64, p UInt8) ENGINE = MergeTree ORDER BY tuple() PARTITION BY p; diff --git a/tests/queries/0_stateless/00826_cross_to_inner_join.reference b/tests/queries/0_stateless/00826_cross_to_inner_join.reference index c152a92fb83..a47d9a430dc 100644 --- a/tests/queries/0_stateless/00826_cross_to_inner_join.reference +++ b/tests/queries/0_stateless/00826_cross_to_inner_join.reference @@ -146,7 +146,7 @@ SELECT t2_00826.b FROM t1_00826 ALL INNER JOIN t2_00826 ON b = t2_00826.a -WHERE (b = t2_00826.a) AND (t2_00826.b IS NULL OR (t2_00826.b > t2_00826.a)) +WHERE (b = t2_00826.a) AND ((t2_00826.b IS NULL) OR (t2_00826.b > t2_00826.a)) --- do not rewrite alias --- SELECT a AS b FROM t1_00826 @@ -178,4 +178,4 @@ SELECT t2_00826.b FROM t1_00826 ALL INNER JOIN t2_00826 ON a = t2_00826.a -WHERE (a = t2_00826.a) AND (t2_00826.b IS NULL OR (t2_00826.b < 2)) +WHERE (a = t2_00826.a) AND ((t2_00826.b IS NULL) OR (t2_00826.b < 2)) diff --git a/tests/queries/0_stateless/00926_adaptive_index_granularity_collapsing_merge_tree.reference b/tests/queries/0_stateless/00926_adaptive_index_granularity_collapsing_merge_tree.reference index 3a176a17f5a..26be1c6ee8a 100644 --- a/tests/queries/0_stateless/00926_adaptive_index_granularity_collapsing_merge_tree.reference +++ b/tests/queries/0_stateless/00926_adaptive_index_granularity_collapsing_merge_tree.reference @@ -1,11 +1,11 @@ 4 -4 -8 +5 8 +9 ----- 4 -1 +2 0 0 6 -2 +3 diff --git a/tests/queries/0_stateless/00926_adaptive_index_granularity_merge_tree.reference b/tests/queries/0_stateless/00926_adaptive_index_granularity_merge_tree.reference index 3e002b3899c..1a68af74960 100644 --- a/tests/queries/0_stateless/00926_adaptive_index_granularity_merge_tree.reference +++ b/tests/queries/0_stateless/00926_adaptive_index_granularity_merge_tree.reference @@ -1,66 +1,66 @@ ----HORIZONTAL MERGE TESTS---- 4 +5 +8 +9 +----- 4 +3 8 -8 +5 ----- 4 2 8 -4 ------ -4 -1 -8 -2 ------ -4 -1 -8 -1 ------ -4 -1 -4 -1 -8 -1 -42 42 -100 aaaa -101 bbbb -102 cccc -103 dddd -2 -----VERTICAL MERGE TESTS---- -4 -4 -8 -8 +3 ----- 4 2 8 -4 ------ -4 -1 -8 2 ----- 4 -1 +2 +4 +2 8 2 ------ -4 -1 -4 -1 -8 -1 42 42 100 aaaa 101 bbbb 102 cccc 103 dddd 3 +----VERTICAL MERGE TESTS---- +4 +5 +8 +9 +----- +4 +3 +8 +5 +----- +4 +2 +8 +3 +----- +4 +2 +8 +3 +----- +4 +2 +4 +2 +8 +2 +42 42 +100 aaaa +101 bbbb +102 cccc +103 dddd +4 diff --git a/tests/queries/0_stateless/00926_adaptive_index_granularity_replacing_merge_tree.reference b/tests/queries/0_stateless/00926_adaptive_index_granularity_replacing_merge_tree.reference index 5d5f3af28ab..b4ef1031186 100644 --- a/tests/queries/0_stateless/00926_adaptive_index_granularity_replacing_merge_tree.reference +++ b/tests/queries/0_stateless/00926_adaptive_index_granularity_replacing_merge_tree.reference @@ -1,32 +1,32 @@ 4 +5 +8 +9 +----- 4 +3 8 -8 +5 ----- 4 2 8 -4 +3 ----- 4 -1 -8 2 +8 +3 ----- 4 -1 -8 2 ------ 4 -1 -4 -1 -8 2 +8 +3 42 42 100 aaaa 101 bbbb 102 cccc 103 dddd -3 +4 diff --git a/tests/queries/0_stateless/00926_adaptive_index_granularity_versioned_collapsing_merge_tree.reference b/tests/queries/0_stateless/00926_adaptive_index_granularity_versioned_collapsing_merge_tree.reference index f93aae0225a..9b2c420f3d9 100644 --- a/tests/queries/0_stateless/00926_adaptive_index_granularity_versioned_collapsing_merge_tree.reference +++ b/tests/queries/0_stateless/00926_adaptive_index_granularity_versioned_collapsing_merge_tree.reference @@ -1,14 +1,14 @@ 4 -4 -8 +5 8 +9 ----- 4 -1 -0 -6 2 ------ +0 6 3 +----- +6 +4 0 diff --git a/tests/queries/0_stateless/00926_zookeeper_adaptive_index_granularity_replicated_merge_tree_long.reference b/tests/queries/0_stateless/00926_zookeeper_adaptive_index_granularity_replicated_merge_tree_long.reference index ea48fbf86d7..1df87e72e98 100644 --- a/tests/queries/0_stateless/00926_zookeeper_adaptive_index_granularity_replicated_merge_tree_long.reference +++ b/tests/queries/0_stateless/00926_zookeeper_adaptive_index_granularity_replicated_merge_tree_long.reference @@ -1,56 +1,56 @@ ----HORIZONTAL MERGE TESTS---- Replica synced 4 +5 4 -4 -4 -4 -4 +5 +5 +5 Parts optimized Replica synced 8 +9 8 -8 -8 +9 ----- 4 -1 +2 Replica synced 4 -1 +2 Table attached -1 -1 +2 +2 Parts optimized 8 Replica synced 8 ----- 4 -1 +2 Replica synced 4 -1 +2 4 -1 +2 Replica synced 4 -1 +2 8 -1 +2 8 -1 +2 Parts optimized 42 42 100 aaaa 101 bbbb 102 cccc 103 dddd -2 +3 Replica synced 42 42 100 aaaa 101 bbbb 102 cccc 103 dddd -2 +3 diff --git a/tests/queries/0_stateless/00938_template_input_format.reference b/tests/queries/0_stateless/00938_template_input_format.reference index ce89532886d..e1f77d9a581 100644 --- a/tests/queries/0_stateless/00938_template_input_format.reference +++ b/tests/queries/0_stateless/00938_template_input_format.reference @@ -23,3 +23,11 @@ cv bn m","","as""df'gh","",456,"2016-01-02" "as""df'gh","","zx cv bn m","",789,"2016-01-04" "qwe,rty","","","",9876543210,"2016-01-03" +==== check raw ==== +"qwe,rty","as""df'gh","","zx +cv bn m",123,"2016-01-01" +"as""df\'gh","","zx +cv bn m","qwe,rty",456,"2016-01-02" +"zx\cv\bn m","qwe,rty","as""df'gh","",789,"2016-01-04" +"","zx +cv bn m","qwe,rty","as""df'gh",9876543210,"2016-01-03" diff --git a/tests/queries/0_stateless/00938_template_input_format.sh b/tests/queries/0_stateless/00938_template_input_format.sh index 75616b35af0..9218f4bebca 100755 --- a/tests/queries/0_stateless/00938_template_input_format.sh +++ b/tests/queries/0_stateless/00938_template_input_format.sh @@ -1,4 +1,6 @@ #!/usr/bin/env bash +# Tags: no-parallel + # shellcheck disable=SC2016,SC2028 CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) @@ -50,6 +52,30 @@ format_template_rows_between_delimiter = ','"; $CLICKHOUSE_CLIENT --query="SELECT * FROM template2 ORDER BY n FORMAT CSV"; +echo "==== check raw ====" + +echo -ne '{prefix} \n${data}\n $$ suffix $$\n' > "$CURDIR"/00938_template_input_format_resultset.tmp +echo -ne 'n:\t${n:Escaped}, s1:\t${0:Raw}\t, s2:\t${1:Quoted}, s3:\t${s3:JSON}, s4:\t${3:CSV}, d:\t${d:Escaped}\t' > "$CURDIR"/00938_template_input_format_row.tmp + + +$CLICKHOUSE_CLIENT --query="TRUNCATE TABLE template1"; + +echo "{prefix}"' '" +n: 123, s1: qwe,rty , s2: 'as\"df\\'gh', s3: \"\", s4: \"zx +cv bn m\", d: 2016-01-01 ; +n: 456, s1: as\"df\\'gh , s2: '', s3: \"zx\\ncv\\tbn m\", s4: \"qwe,rty\", d: 2016-01-02 ; +n: 9876543210, s1: , s2: 'zx\\ncv\\tbn m', s3: \"qwe,rty\", s4: \"as\"\"df'gh\", d: 2016-01-03 ; +n: 789, s1: zx\cv\bn m , s2: 'qwe,rty', s3: \"as\\\"df'gh\", s4: \"\", d: 2016-01-04"$'\t'" + $ suffix $" | $CLICKHOUSE_CLIENT --query="INSERT INTO template1 FORMAT Template SETTINGS \ +format_template_resultset = '$CURDIR/00938_template_input_format_resultset.tmp', \ +format_template_row = '$CURDIR/00938_template_input_format_row.tmp', \ +format_template_rows_between_delimiter = ';\n'"; + +$CLICKHOUSE_CLIENT --query="SELECT * FROM template1 ORDER BY n FORMAT CSV"; + + + $CLICKHOUSE_CLIENT --query="DROP TABLE template1"; $CLICKHOUSE_CLIENT --query="DROP TABLE template2"; rm "$CURDIR"/00938_template_input_format_resultset.tmp "$CURDIR"/00938_template_input_format_row.tmp + diff --git a/tests/queries/0_stateless/00955_test_final_mark.sql b/tests/queries/0_stateless/00955_test_final_mark.sql index 3c92d96e9a9..6615c945ef8 100644 --- a/tests/queries/0_stateless/00955_test_final_mark.sql +++ b/tests/queries/0_stateless/00955_test_final_mark.sql @@ -1,5 +1,4 @@ --- Tags: no-replicated-database, no-parallel --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tags: no-parallel SET send_logs_level = 'fatal'; diff --git a/tests/queries/0_stateless/00955_test_final_mark_use.sh b/tests/queries/0_stateless/00955_test_final_mark_use.sh index 8642011b670..2c3219fbffd 100755 --- a/tests/queries/0_stateless/00955_test_final_mark_use.sh +++ b/tests/queries/0_stateless/00955_test_final_mark_use.sh @@ -1,6 +1,5 @@ #!/usr/bin/env bash -# Tags: no-replicated-database, no-parallel -# Tag no-replicated-database: Unsupported type of ALTER query +# Tags: no-parallel CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # shellcheck source=../shell_config.sh diff --git a/tests/queries/0_stateless/01015_attach_part.sql b/tests/queries/0_stateless/01015_attach_part.sql index 3d2058f757e..6b786bfbab9 100644 --- a/tests/queries/0_stateless/01015_attach_part.sql +++ b/tests/queries/0_stateless/01015_attach_part.sql @@ -1,5 +1,4 @@ --- Tags: no-replicated-database, no-parallel --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tags: no-parallel DROP TABLE IF EXISTS table_01; diff --git a/tests/queries/0_stateless/01021_only_tuple_columns.sql b/tests/queries/0_stateless/01021_only_tuple_columns.sql index a0be59c3120..02db21bc0b2 100644 --- a/tests/queries/0_stateless/01021_only_tuple_columns.sql +++ b/tests/queries/0_stateless/01021_only_tuple_columns.sql @@ -1,5 +1,4 @@ --- Tags: no-replicated-database, no-parallel --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tags: no-parallel CREATE TABLE test ( diff --git a/tests/queries/0_stateless/01034_JSONCompactEachRow.reference b/tests/queries/0_stateless/01034_JSONCompactEachRow.reference index 6ec53e11fc9..bfc99d688d5 100644 --- a/tests/queries/0_stateless/01034_JSONCompactEachRow.reference +++ b/tests/queries/0_stateless/01034_JSONCompactEachRow.reference @@ -12,6 +12,11 @@ [1, "a"] [2, "b"] [3, "c"] +---------- +["value", "name"] +[1, "a"] +[2, "b"] +[3, "c"] 4 ["name", "c"] ["String", "UInt64"] @@ -31,17 +36,33 @@ 8 ["first", 1, 2, 0] ["second", 2, 0, 6] +["first", 1, 2, 0] +["second", 2, 0, 6] 9 ["first", 1, 2, 8] ["second", 2, 32, 6] +["first", 1, 2, 8] +["second", 2, 32, 6] 10 ["first", 1, 16, 8] ["second", 2, 32, 8] +["first", 1, 16, 8] +["second", 2, 32, 8] 11 ["v1", "v2", "v3", "v4"] ["String", "UInt8", "UInt16", "UInt8"] ["", 2, 3, 1] +["", 2, 3, 1] +---------- +["v1", "v2", "v3", "v4"] +["", 2, 3, 1] +["", 2, 3, 1] 12 ["v1", "n.id", "n.name"] ["UInt8", "Array(UInt8)", "Array(String)"] [16, [15,16,0], ["first","second","third"]] +[16, [15,16,0], ["first","second","third"]] +---------- +["v1", "n.id", "n.name"] +[16, [15,16,0], ["first","second","third"]] +[16, [15,16,0], ["first","second","third"]] diff --git a/tests/queries/0_stateless/01034_JSONCompactEachRow.sql b/tests/queries/0_stateless/01034_JSONCompactEachRow.sql index f5442c90a2a..f71597a60e5 100644 --- a/tests/queries/0_stateless/01034_JSONCompactEachRow.sql +++ b/tests/queries/0_stateless/01034_JSONCompactEachRow.sql @@ -10,8 +10,10 @@ SELECT 2; /* Check Totals */ SELECT name, count() AS c FROM test_table GROUP BY name WITH TOTALS ORDER BY name FORMAT JSONCompactEachRow; SELECT 3; -/* Check JSONCompactEachRowWithNamesAndTypes Output */ +/* Check JSONCompactEachRowWithNames and JSONCompactEachRowWithNamesAndTypes Output */ SELECT * FROM test_table FORMAT JSONCompactEachRowWithNamesAndTypes; +SELECT '----------'; +SELECT * FROM test_table FORMAT JSONCompactEachRowWithNames; SELECT 4; /* Check Totals */ SELECT name, count() AS c FROM test_table GROUP BY name WITH TOTALS ORDER BY name FORMAT JSONCompactEachRowWithNamesAndTypes; @@ -35,30 +37,39 @@ INSERT INTO test_table_2 FORMAT JSONCompactEachRow [16, [15, 16, null], ["first" SELECT * FROM test_table_2 FORMAT JSONCompactEachRow; TRUNCATE TABLE test_table_2; SELECT 8; -/* Check JSONCompactEachRowWithNamesAndTypes Output */ +/* Check JSONCompactEachRowWithNamesAndTypes and JSONCompactEachRowWithNamesAndTypes Input */ SET input_format_null_as_default = 0; INSERT INTO test_table FORMAT JSONCompactEachRowWithNamesAndTypes ["v1", "v2", "v3", "v4"]["String","UInt8","UInt16","UInt8"]["first", 1, "2", null]["second", 2, null, 6]; +INSERT INTO test_table FORMAT JSONCompactEachRowWithNames ["v1", "v2", "v3", "v4"]["first", 1, "2", null]["second", 2, null, 6]; SELECT * FROM test_table FORMAT JSONCompactEachRow; TRUNCATE TABLE test_table; SELECT 9; /* Check input_format_null_as_default = 1 */ SET input_format_null_as_default = 1; INSERT INTO test_table FORMAT JSONCompactEachRowWithNamesAndTypes ["v1", "v2", "v3", "v4"]["String","UInt8","UInt16","UInt8"]["first", 1, "2", null] ["second", 2, null, 6]; +INSERT INTO test_table FORMAT JSONCompactEachRowWithNames ["v1", "v2", "v3", "v4"]["first", 1, "2", null] ["second", 2, null, 6]; SELECT * FROM test_table FORMAT JSONCompactEachRow; SELECT 10; /* Check Header */ TRUNCATE TABLE test_table; SET input_format_skip_unknown_fields = 1; INSERT INTO test_table FORMAT JSONCompactEachRowWithNamesAndTypes ["v1", "v2", "invalid_column"]["String", "UInt8", "UInt8"]["first", 1, 32]["second", 2, "64"]; +INSERT INTO test_table FORMAT JSONCompactEachRowWithNames ["v1", "v2", "invalid_column"]["first", 1, 32]["second", 2, "64"]; SELECT * FROM test_table FORMAT JSONCompactEachRow; SELECT 11; TRUNCATE TABLE test_table; INSERT INTO test_table FORMAT JSONCompactEachRowWithNamesAndTypes ["v4", "v2", "v3"]["UInt8", "UInt8", "UInt16"][1, 2, 3] +INSERT INTO test_table FORMAT JSONCompactEachRowWithNames ["v4", "v2", "v3"][1, 2, 3] SELECT * FROM test_table FORMAT JSONCompactEachRowWithNamesAndTypes; +SELECT '----------'; +SELECT * FROM test_table FORMAT JSONCompactEachRowWithNames; SELECT 12; /* Check Nested */ INSERT INTO test_table_2 FORMAT JSONCompactEachRowWithNamesAndTypes ["v1", "n.id", "n.name"]["UInt8", "Array(UInt8)", "Array(String)"][16, [15, 16, null], ["first", "second", "third"]]; +INSERT INTO test_table_2 FORMAT JSONCompactEachRowWithNames ["v1", "n.id", "n.name"][16, [15, 16, null], ["first", "second", "third"]]; SELECT * FROM test_table_2 FORMAT JSONCompactEachRowWithNamesAndTypes; +SELECT '----------'; +SELECT * FROM test_table_2 FORMAT JSONCompactEachRowWithNames; DROP TABLE IF EXISTS test_table; DROP TABLE IF EXISTS test_table_2; diff --git a/tests/queries/0_stateless/01060_shutdown_table_after_detach.sql b/tests/queries/0_stateless/01060_shutdown_table_after_detach.sql index 5e0ed8b298d..bfe928d7003 100644 --- a/tests/queries/0_stateless/01060_shutdown_table_after_detach.sql +++ b/tests/queries/0_stateless/01060_shutdown_table_after_detach.sql @@ -1,5 +1,4 @@ --- Tags: no-replicated-database, no-parallel --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tags: no-parallel DROP TABLE IF EXISTS test; CREATE TABLE test Engine = MergeTree ORDER BY number AS SELECT number, toString(rand()) x from numbers(10000000); diff --git a/tests/queries/0_stateless/01073_bad_alter_partition.reference b/tests/queries/0_stateless/01073_bad_alter_partition.reference index 9008cf74944..580df2ddf08 100644 --- a/tests/queries/0_stateless/01073_bad_alter_partition.reference +++ b/tests/queries/0_stateless/01073_bad_alter_partition.reference @@ -1,3 +1,25 @@ +1 2020-01-01 1 2020-01-02 +1 2020-01-03 +1 2020-01-04 +1 2020-01-05 +1 2020-01-06 +3 2020-01-01 3 2020-01-02 +3 2020-01-03 +3 2020-01-04 +3 2020-01-05 +3 2020-01-06 +4 2020-01-01 4 2020-01-02 +4 2020-01-03 +4 2020-01-05 +4 2020-01-06 +5 2020-01-01 +5 2020-01-02 +5 2020-01-03 +5 2020-01-06 +6 2020-01-01 +6 2020-01-02 +6 2020-01-03 +6 2020-01-06 diff --git a/tests/queries/0_stateless/01073_bad_alter_partition.sql b/tests/queries/0_stateless/01073_bad_alter_partition.sql index 58fc39fd68b..2e3cd47d6a0 100644 --- a/tests/queries/0_stateless/01073_bad_alter_partition.sql +++ b/tests/queries/0_stateless/01073_bad_alter_partition.sql @@ -1,19 +1,22 @@ DROP TABLE IF EXISTS merge_tree; CREATE TABLE merge_tree (d Date) ENGINE = MergeTree ORDER BY d PARTITION BY d; -INSERT INTO merge_tree VALUES ('2020-01-02'); -SELECT 1, * FROM merge_tree; +INSERT INTO merge_tree VALUES ('2020-01-01'), ('2020-01-02'), ('2020-01-03'), ('2020-01-04'), ('2020-01-05'), ('2020-01-06'); +SELECT 1, * FROM merge_tree ORDER BY d; -- ALTER TABLE merge_tree DROP PARTITION 2020-01-02; -- This does not even parse -- SELECT 2, * FROM merge_tree; -ALTER TABLE merge_tree DROP PARTITION 20200102; -SELECT 3, * FROM merge_tree; +ALTER TABLE merge_tree DROP PARTITION 20200103; -- unfortunately, this works, but not as user expected. +SELECT 3, * FROM merge_tree ORDER BY d; -ALTER TABLE merge_tree DROP PARTITION '20200102'; -- { serverError 38 } -SELECT 4, * FROM merge_tree; +ALTER TABLE merge_tree DROP PARTITION '20200104'; +SELECT 4, * FROM merge_tree ORDER BY d; -ALTER TABLE merge_tree DROP PARTITION '2020-01-02'; -SELECT 5, * FROM merge_tree; +ALTER TABLE merge_tree DROP PARTITION '2020-01-05'; +SELECT 5, * FROM merge_tree ORDER BY d; + +ALTER TABLE merge_tree DROP PARTITION '202001-06'; -- { serverError 38 } +SELECT 6, * FROM merge_tree ORDER BY d; DROP TABLE merge_tree; diff --git a/tests/queries/0_stateless/01083_expressions_in_engine_arguments.sql b/tests/queries/0_stateless/01083_expressions_in_engine_arguments.sql index bd4712cca21..dd39277ee31 100644 --- a/tests/queries/0_stateless/01083_expressions_in_engine_arguments.sql +++ b/tests/queries/0_stateless/01083_expressions_in_engine_arguments.sql @@ -1,5 +1,16 @@ -- Tags: no-parallel, no-fasttest +DROP TABLE IF EXISTS file; +DROP TABLE IF EXISTS url; +DROP TABLE IF EXISTS view; +DROP TABLE IF EXISTS buffer; +DROP TABLE IF EXISTS merge; +DROP TABLE IF EXISTS merge_tf; +DROP TABLE IF EXISTS distributed; +DROP TABLE IF EXISTS distributed_tf; +DROP TABLE IF EXISTS rich_syntax; +DROP DICTIONARY IF EXISTS dict; + CREATE TABLE file (n Int8) ENGINE = File(upper('tsv') || 'WithNames' || 'AndTypes'); CREATE TABLE buffer (n Int8) ENGINE = Buffer(currentDatabase(), file, 16, 10, 200, 10000, 1000000, 10000000, 1000000000); CREATE TABLE merge (n Int8) ENGINE = Merge('', lower('DISTRIBUTED')); @@ -72,4 +83,15 @@ INSERT INTO buffer VALUES (1); SELECT sum(n) from rich_syntax; -- Clear cache to avoid future errors in the logs -SYSTEM DROP DNS CACHE +SYSTEM DROP DNS CACHE; + +DROP TABLE file; +DROP TABLE url; +DROP TABLE view; +DROP TABLE buffer; +DROP TABLE merge; +DROP TABLE merge_tf; +DROP TABLE distributed; +DROP TABLE distributed_tf; +DROP TABLE rich_syntax; +DROP DICTIONARY dict; diff --git a/tests/queries/0_stateless/01130_in_memory_parts_partitons.sql b/tests/queries/0_stateless/01130_in_memory_parts_partitons.sql index a0e8d24eff6..aa6f281e0eb 100644 --- a/tests/queries/0_stateless/01130_in_memory_parts_partitons.sql +++ b/tests/queries/0_stateless/01130_in_memory_parts_partitons.sql @@ -1,5 +1,4 @@ --- Tags: no-replicated-database, no-parallel --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tags: no-parallel DROP TABLE IF EXISTS t2; diff --git a/tests/queries/0_stateless/01161_information_schema.reference b/tests/queries/0_stateless/01161_information_schema.reference index 38ca608ee39..3be800888c7 100644 --- a/tests/queries/0_stateless/01161_information_schema.reference +++ b/tests/queries/0_stateless/01161_information_schema.reference @@ -14,14 +14,14 @@ default default v VIEW tmp LOCAL TEMPORARY default default mv SELECT * FROM system.one NONE NO YES NO NO NO default default v SELECT n, f FROM default.t NONE NO NO NO NO NO -default default mv dummy 1 0 UInt8 \N \N 8 2 0 \N \N \N \N \N \N \N \N \N \N -default default t n 1 0 UInt64 \N \N 64 2 0 \N \N \N \N \N \N \N \N \N \N -default default t f 2 0 Float32 \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N -default default t s 3 0 String \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N -default default t fs 4 0 FixedString(42) 42 42 \N \N \N \N \N \N \N \N \N \N \N \N \N -default default t d 5 0 Decimal(9, 6) \N \N 9 10 6 \N \N \N \N \N \N \N \N \N \N -default default v n 1 1 Nullable(Int32) \N \N 32 2 0 \N \N \N \N \N \N \N \N \N \N -default default v f 2 0 Float64 \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N - tmp d 1 0 Date \N \N \N \N \N 0 \N \N \N \N \N \N \N \N \N - tmp dt 2 0 DateTime \N \N \N \N \N 0 \N \N \N \N \N \N \N \N \N - tmp dtms 3 0 DateTime64(3) \N \N \N \N \N 3 \N \N \N \N \N \N \N \N \N +default default mv dummy 1 0 UInt8 \N \N 8 2 0 \N \N \N \N \N \N \N \N \N \N UInt8 +default default t n 1 0 UInt64 \N \N 64 2 0 \N \N \N \N \N \N \N \N \N \N UInt64 +default default t f 2 0 Float32 \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N Float32 +default default t s 3 0 String \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N String +default default t fs 4 0 FixedString(42) 42 42 \N \N \N \N \N \N \N \N \N \N \N \N \N FixedString(42) +default default t d 5 0 Decimal(9, 6) \N \N 9 10 6 \N \N \N \N \N \N \N \N \N \N Decimal(9, 6) +default default v n 1 1 Nullable(Int32) \N \N 32 2 0 \N \N \N \N \N \N \N \N \N \N Nullable(Int32) +default default v f 2 0 Float64 \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N Float64 + tmp d 1 0 Date \N \N \N \N \N 0 \N \N \N \N \N \N \N \N \N Date + tmp dt 2 0 DateTime \N \N \N \N \N 0 \N \N \N \N \N \N \N \N \N DateTime + tmp dtms 3 0 DateTime64(3) \N \N \N \N \N 3 \N \N \N \N \N \N \N \N \N DateTime64(3) diff --git a/tests/queries/0_stateless/01163_search_case_insensetive_utf8.reference b/tests/queries/0_stateless/01163_search_case_insensetive_utf8.reference new file mode 100644 index 00000000000..66f4ca4a5a8 --- /dev/null +++ b/tests/queries/0_stateless/01163_search_case_insensetive_utf8.reference @@ -0,0 +1,12 @@ +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/tests/queries/0_stateless/01163_search_case_insensetive_utf8.sql b/tests/queries/0_stateless/01163_search_case_insensetive_utf8.sql new file mode 100644 index 00000000000..99bdd38ceae --- /dev/null +++ b/tests/queries/0_stateless/01163_search_case_insensetive_utf8.sql @@ -0,0 +1,12 @@ +SELECT positionCaseInsensitiveUTF8(materialize('сссссс'), 'Ё'); +SELECT countSubstringsCaseInsensitiveUTF8(materialize('сссссс'), 'ё'); +SELECT positionCaseInsensitiveUTF8(materialize('сссссссс'), 'ё'); +SELECT countSubstringsCaseInsensitiveUTF8(materialize('сссссссс'), 'Ё'); +SELECT countSubstringsCaseInsensitiveUTF8(materialize('ссссссссссссссссссс'), 'ёёёёёёё'); +SELECT positionCaseInsensitiveUTF8(materialize('ссссссссссссссссссс'), 'ёЁёЁёЁё'); +SELECT countSubstringsCaseInsensitiveUTF8(materialize('ссссссссссссссссссс'), 'ёЁёЁёЁёЁёЁ'); +SELECT positionCaseInsensitiveUTF8(materialize('ссссссссссссссссссс'), 'ЁЁЁЁЁЁЁЁЁЁ'); +SELECT countSubstringsCaseInsensitiveUTF8(materialize('ссссссссссссссссссс'), 'ёЁёЁёЁёссс'); +SELECT positionCaseInsensitiveUTF8(materialize('ссссссссссссссссссс'), 'ёЁёЁёЁёссс'); +SELECT countSubstringsCaseInsensitiveUTF8(materialize('ссссссссссссссссссс'), 'ЁС'); +SELECT positionCaseInsensitiveUTF8(materialize('ссссссссссссссссссс'), 'ёс'); diff --git a/tests/queries/0_stateless/01164_alter_memory_database.reference b/tests/queries/0_stateless/01164_alter_memory_database.reference new file mode 100644 index 00000000000..44cfa7b8d68 --- /dev/null +++ b/tests/queries/0_stateless/01164_alter_memory_database.reference @@ -0,0 +1,2 @@ +CREATE TABLE test_1164_memory.r1\n(\n `n` Int32,\n `m` Int32\n)\nENGINE = ReplicatedMergeTree(\'/test/01164/test_1164_memory/t\', \'1\')\nORDER BY n\nSETTINGS index_granularity = 8192 +CREATE TABLE test_1164_memory.r1\n(\n `n` Int32,\n `m` Int32\n)\nENGINE = ReplicatedMergeTree(\'/test/01164/test_1164_memory/t\', \'1\')\nORDER BY n\nSETTINGS index_granularity = 8192 diff --git a/tests/queries/0_stateless/01164_alter_memory_database.sql b/tests/queries/0_stateless/01164_alter_memory_database.sql new file mode 100644 index 00000000000..f46fc8f9853 --- /dev/null +++ b/tests/queries/0_stateless/01164_alter_memory_database.sql @@ -0,0 +1,12 @@ +-- Tags: zookeeper, no-parallel + +drop database if exists test_1164_memory; +create database test_1164_memory engine=Memory; +create table test_1164_memory.r1 (n int) engine=ReplicatedMergeTree('/test/01164/{database}/t', '1') order by n; +create table test_1164_memory.r2 (n int) engine=ReplicatedMergeTree('/test/01164/{database}/t', '2') order by n; +alter table test_1164_memory.r1 add column m int; +system sync replica test_1164_memory.r1; +system sync replica test_1164_memory.r2; +show create table test_1164_memory.r1; +show create table test_1164_memory.r1; +drop database test_1164_memory; diff --git a/tests/queries/0_stateless/01195_formats_diagnostic_info.reference b/tests/queries/0_stateless/01195_formats_diagnostic_info.reference index 15fc31538ce..eddbb80198d 100644 --- a/tests/queries/0_stateless/01195_formats_diagnostic_info.reference +++ b/tests/queries/0_stateless/01195_formats_diagnostic_info.reference @@ -1,5 +1,5 @@ CSV -Column 2, name: d, type: Decimal(18, 10), parsed text: "123456789"ERROR +Column 2, name: d, type: Decimal(18, 10), parsed text: " 123456789"ERROR ERROR: garbage after DateTime: "7, Hello" ERROR: DateTime must be in YYYY-MM-DD hh:mm:ss or NNNNNNNNNN (unix timestamp, exactly 10 digits) format. ERROR: There is no line feed. "1" found instead. @@ -28,3 +28,14 @@ ERROR: There is no delimiter before field 1: expected "", got "7Hello< ERROR: There is no delimiter after last field: expected "", got "1" ERROR: There is no delimiter after last field: expected "", got "Hello" Column 0, name: t, type: DateTime, ERROR: text "" is not like DateTime +JSONCompactEachRow +Column 2, name: d, type: Decimal(18, 10), parsed text: " 123456789"ERROR +Column 0, name: t, type: DateTime, parsed text: "2020-04-21 12:34:56"ERROR: DateTime must be in YYYY-MM-DD hh:mm:ss or NNNNNNNNNN (unix timestamp, exactly 10 digits) format. +ERROR: garbage after DateTime: "7, Hello" +ERROR: DateTime must be in YYYY-MM-DD hh:mm:ss or NNNNNNNNNN (unix timestamp, exactly 10 digits) format. +ERROR: There is no closing parenthesis (']') at the end of the row. "," found instead. +Column 1, name: s, type: String, parsed text: ERROR +ERROR: There is no '[' before the row. +ERROR: garbage after Decimal(18, 10): ";" +ERROR: There is no comma. ";" found instead. +ERROR: Closing parenthesis (']') found where comma is expected. It's like your file has less columns than expected. diff --git a/tests/queries/0_stateless/01195_formats_diagnostic_info.sh b/tests/queries/0_stateless/01195_formats_diagnostic_info.sh index 6c64b17f719..dde410d95c4 100755 --- a/tests/queries/0_stateless/01195_formats_diagnostic_info.sh +++ b/tests/queries/0_stateless/01195_formats_diagnostic_info.sh @@ -38,3 +38,19 @@ echo -e '2020-04-21 12:34:567\tHello\t123456789' | "${PARSER[@]}" 2>&1| grep "ER echo -e '2020-04-21 12:34:56\tHello\t12345678\t1' | "${PARSER[@]}" 2>&1| grep "ERROR" echo -e '2020-04-21 12:34:56\t\t123Hello' | "${PARSER[@]}" 2>&1| grep "ERROR" echo -e '2020-04-21 12:34:56\tHello\t12345678\n' | "${PARSER[@]}" 2>&1| grep "ERROR" + +PARSER=(${CLICKHOUSE_LOCAL} --query 'SELECT t, s, d FROM table' --structure 't DateTime, s String, d Decimal64(10)' --input-format JSONCompactEachRow) +echo '["2020-04-21 12:34:56", "Hello", 12345678]' | "${PARSER[@]}" 2>&1| grep "ERROR" || echo "JSONCompactEachRow" +echo '["2020-04-21 12:34:56", "Hello", 123456789]' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo '["2020-04-21 12:34:567", "Hello", 123456789]' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo '["2020-04-21 12:34:56"7, "Hello", 123456789]' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo '["2020-04-21 12:34:56", "Hello", 12345678,1]' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo '["2020-04-21 12:34:56",,123Hello]' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo -e '["2020-04-21 12:34:56", "Hello", 12345678\n]' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo -e '"2020-04-21 12:34:56", "Hello", 12345678]' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo -e '["2020-04-21 12:34:56", "Hello", 12345678;' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo -e '["2020-04-21 12:34:56", "Hello", 12345678' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo -e '["2020-04-21 12:34:56", "Hello", 12345678\n' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo -e '["2020-04-21 12:34:56", "Hello"; 12345678\n' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo -e '["2020-04-21 12:34:56", "Hello"\n' | "${PARSER[@]}" 2>&1| grep "ERROR" +echo -e '["2020-04-21 12:34:56", "Hello"]' | "${PARSER[@]}" 2>&1| grep "ERROR" diff --git a/tests/queries/0_stateless/01375_output_format_tsv_csv_with_names.reference b/tests/queries/0_stateless/01375_output_format_tsv_csv_with_names.reference index 6f1974ccd73..ffea4c736dc 100644 --- a/tests/queries/0_stateless/01375_output_format_tsv_csv_with_names.reference +++ b/tests/queries/0_stateless/01375_output_format_tsv_csv_with_names.reference @@ -7,7 +7,21 @@ number UInt64 0 1 +TSVRawWithNames +number +0 +1 +TSVRawWithNamesAndTypes +number +UInt64 +0 +1 CSVWithNames "number" 0 1 +CSVWithNamesAndTypes +"number" +"UInt64" +0 +1 diff --git a/tests/queries/0_stateless/01375_output_format_tsv_csv_with_names.sh b/tests/queries/0_stateless/01375_output_format_tsv_csv_with_names.sh index ad9cc2c53a8..69f3ab1c9a8 100755 --- a/tests/queries/0_stateless/01375_output_format_tsv_csv_with_names.sh +++ b/tests/queries/0_stateless/01375_output_format_tsv_csv_with_names.sh @@ -15,5 +15,14 @@ ${CLICKHOUSE_LOCAL} "${opts[@]}" --format TSVWithNames echo 'TSVWithNamesAndTypes' ${CLICKHOUSE_LOCAL} "${opts[@]}" --format TSVWithNamesAndTypes +echo 'TSVRawWithNames' +${CLICKHOUSE_LOCAL} "${opts[@]}" --format TSVWithNames + +echo 'TSVRawWithNamesAndTypes' +${CLICKHOUSE_LOCAL} "${opts[@]}" --format TSVWithNamesAndTypes + echo 'CSVWithNames' ${CLICKHOUSE_LOCAL} "${opts[@]}" --format CSVWithNames + +echo 'CSVWithNamesAndTypes' +${CLICKHOUSE_LOCAL} "${opts[@]}" --format CSVWithNamesAndTypes diff --git a/tests/queries/0_stateless/01375_storage_file_tsv_csv_with_names_write_prefix.reference b/tests/queries/0_stateless/01375_storage_file_tsv_csv_with_names_write_prefix.reference index 4f2a79b9905..78286b89a39 100644 --- a/tests/queries/0_stateless/01375_storage_file_tsv_csv_with_names_write_prefix.reference +++ b/tests/queries/0_stateless/01375_storage_file_tsv_csv_with_names_write_prefix.reference @@ -2,6 +2,11 @@ zero rows TSVWithNames TSVWithNamesAndTypes CSVWithNames +CSVWithNamesAndTypes +JSONCompactEachRowWithNames +JSONCompactEachRowWithNamesAndTypes +JSONCompactStringsEachRow +JSONCompactStringsEachRowWithNamesAndTypes multi clickhouse-local one file TSVWithNames 0 @@ -15,3 +20,23 @@ CSVWithNames 0 0 0 +CSVWithNamesAndTypes +0 +0 +0 +JSONCompactEachRowWithNames +0 +0 +0 +JSONCompactEachRowWithNamesAndTypes +0 +0 +0 +JSONCompactStringsEachRow +0 +0 +0 +JSONCompactStringsEachRowWithNamesAndTypes +0 +0 +0 diff --git a/tests/queries/0_stateless/01375_storage_file_tsv_csv_with_names_write_prefix.sh b/tests/queries/0_stateless/01375_storage_file_tsv_csv_with_names_write_prefix.sh index 469f7e7008b..a634f689dca 100755 --- a/tests/queries/0_stateless/01375_storage_file_tsv_csv_with_names_write_prefix.sh +++ b/tests/queries/0_stateless/01375_storage_file_tsv_csv_with_names_write_prefix.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# Tags: no-parallel CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # shellcheck source=../shell_config.sh @@ -6,26 +7,26 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # zero rows echo 'zero rows' -for format in TSVWithNames TSVWithNamesAndTypes CSVWithNames; do +for format in TSVWithNames TSVWithNamesAndTypes CSVWithNames CSVWithNamesAndTypes JSONCompactEachRowWithNames JSONCompactEachRowWithNamesAndTypes JSONCompactStringsEachRow JSONCompactStringsEachRowWithNamesAndTypes; do echo $format ${CLICKHOUSE_LOCAL} --query=" - CREATE TABLE ${format}_01375 ENGINE File($format, '01375_$format.tsv') AS SELECT * FROM numbers(1) WHERE number < 0; + CREATE TABLE ${format}_01375 ENGINE File($format, '01375_$format') AS SELECT * FROM numbers(1) WHERE number < 0; SELECT * FROM ${format}_01375; DROP TABLE ${format}_01375; " - rm 01375_$format.tsv + rm 01375_$format done # run multiple times to the same file echo 'multi clickhouse-local one file' -for format in TSVWithNames TSVWithNamesAndTypes CSVWithNames; do +for format in TSVWithNames TSVWithNamesAndTypes CSVWithNames CSVWithNamesAndTypes JSONCompactEachRowWithNames JSONCompactEachRowWithNamesAndTypes JSONCompactStringsEachRow JSONCompactStringsEachRowWithNamesAndTypes; do echo $format for _ in {1..2}; do ${CLICKHOUSE_LOCAL} --query=" - CREATE TABLE ${format}_01375 ENGINE File($format, '01375_$format.tsv') AS SELECT * FROM numbers(1); + CREATE TABLE ${format}_01375 ENGINE File($format, '01375_$format') AS SELECT * FROM numbers(1); SELECT * FROM ${format}_01375; DROP TABLE ${format}_01375; " done - rm 01375_$format.tsv + rm 01375_$format done diff --git a/tests/queries/0_stateless/01417_freeze_partition_verbose_zookeeper.sh b/tests/queries/0_stateless/01417_freeze_partition_verbose_zookeeper.sh index 5b936b3f2ba..01678d1b500 100755 --- a/tests/queries/0_stateless/01417_freeze_partition_verbose_zookeeper.sh +++ b/tests/queries/0_stateless/01417_freeze_partition_verbose_zookeeper.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # Tags: zookeeper, no-replicated-database, no-parallel -# Tag no-replicated-database: Unsupported type of ALTER query +# Tag no-replicated-database: Fails due to additional replicas or shards CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # shellcheck source=../shell_config.sh diff --git a/tests/queries/0_stateless/01448_json_compact_strings_each_row.reference b/tests/queries/0_stateless/01448_json_compact_strings_each_row.reference index fb1a066f272..8a69cf26ffd 100644 --- a/tests/queries/0_stateless/01448_json_compact_strings_each_row.reference +++ b/tests/queries/0_stateless/01448_json_compact_strings_each_row.reference @@ -12,6 +12,11 @@ ["1", "a"] ["2", "b"] ["3", "c"] +---------- +["value", "name"] +["1", "a"] +["2", "b"] +["3", "c"] 4 ["name", "c"] ["String", "UInt64"] @@ -31,17 +36,33 @@ 8 ["first", "1", "2", "0"] ["second", "2", "0", "6"] +["first", "1", "2", "0"] +["second", "2", "0", "6"] 9 ["first", "1", "2", "8"] ["second", "2", "32", "6"] +["first", "1", "2", "8"] +["second", "2", "32", "6"] 10 ["first", "1", "16", "8"] ["second", "2", "32", "8"] +["first", "1", "16", "8"] +["second", "2", "32", "8"] 11 ["v1", "v2", "v3", "v4"] ["String", "UInt8", "UInt16", "UInt8"] ["", "2", "3", "1"] +["", "2", "3", "1"] +--------- +["v1", "v2", "v3", "v4"] +["", "2", "3", "1"] +["", "2", "3", "1"] 12 ["v1", "n.id", "n.name"] ["UInt8", "Array(UInt8)", "Array(String)"] ["16", "[15,16,17]", "['first','second','third']"] +["16", "[15,16,17]", "['first','second','third']"] +--------- +["v1", "n.id", "n.name"] +["16", "[15,16,17]", "['first','second','third']"] +["16", "[15,16,17]", "['first','second','third']"] diff --git a/tests/queries/0_stateless/01448_json_compact_strings_each_row.sql b/tests/queries/0_stateless/01448_json_compact_strings_each_row.sql index 925faa3a17f..869041193cf 100644 --- a/tests/queries/0_stateless/01448_json_compact_strings_each_row.sql +++ b/tests/queries/0_stateless/01448_json_compact_strings_each_row.sql @@ -12,8 +12,10 @@ SELECT 2; /* Check Totals */ SELECT name, count() AS c FROM test_table GROUP BY name WITH TOTALS ORDER BY name FORMAT JSONCompactStringsEachRow; SELECT 3; -/* Check JSONCompactStringsEachRowWithNamesAndTypes Output */ +/* Check JSONCompactStringsEachRowWithNames and JSONCompactStringsEachRowWithNamesAndTypes Output */ SELECT * FROM test_table FORMAT JSONCompactStringsEachRowWithNamesAndTypes; +SELECT '----------'; +SELECT * FROM test_table FORMAT JSONCompactStringsEachRowWithNames; SELECT 4; /* Check Totals */ SELECT name, count() AS c FROM test_table GROUP BY name WITH TOTALS ORDER BY name FORMAT JSONCompactStringsEachRowWithNamesAndTypes; @@ -37,30 +39,39 @@ INSERT INTO test_table_2 FORMAT JSONCompactStringsEachRow ["16", "[15, 16, 17]", SELECT * FROM test_table_2 FORMAT JSONCompactStringsEachRow; TRUNCATE TABLE test_table_2; SELECT 8; -/* Check JSONCompactStringsEachRowWithNamesAndTypes Output */ +/* Check JSONCompactStringsEachRowWithNames and JSONCompactStringsEachRowWithNamesAndTypes Input */ SET input_format_null_as_default = 0; INSERT INTO test_table FORMAT JSONCompactStringsEachRowWithNamesAndTypes ["v1", "v2", "v3", "v4"]["String","UInt8","UInt16","UInt8"]["first", "1", "2", "null"]["second", "2", "null", "6"]; +INSERT INTO test_table FORMAT JSONCompactStringsEachRowWithNames ["v1", "v2", "v3", "v4"]["first", "1", "2", "null"]["second", "2", "null", "6"]; SELECT * FROM test_table FORMAT JSONCompactStringsEachRow; TRUNCATE TABLE test_table; SELECT 9; /* Check input_format_null_as_default = 1 */ SET input_format_null_as_default = 1; INSERT INTO test_table FORMAT JSONCompactStringsEachRowWithNamesAndTypes ["v1", "v2", "v3", "v4"]["String","UInt8","UInt16","UInt8"]["first", "1", "2", "null"] ["second", "2", "null", "6"]; +INSERT INTO test_table FORMAT JSONCompactStringsEachRowWithNames ["v1", "v2", "v3", "v4"]["first", "1", "2", "null"] ["second", "2", "null", "6"]; SELECT * FROM test_table FORMAT JSONCompactStringsEachRow; SELECT 10; /* Check Header */ TRUNCATE TABLE test_table; SET input_format_skip_unknown_fields = 1; INSERT INTO test_table FORMAT JSONCompactStringsEachRowWithNamesAndTypes ["v1", "v2", "invalid_column"]["String", "UInt8", "UInt8"]["first", "1", "32"]["second", "2", "64"]; +INSERT INTO test_table FORMAT JSONCompactStringsEachRowWithNames ["v1", "v2", "invalid_column"]["first", "1", "32"]["second", "2", "64"]; SELECT * FROM test_table FORMAT JSONCompactStringsEachRow; SELECT 11; TRUNCATE TABLE test_table; INSERT INTO test_table FORMAT JSONCompactStringsEachRowWithNamesAndTypes ["v4", "v2", "v3"]["UInt8", "UInt8", "UInt16"]["1", "2", "3"] +INSERT INTO test_table FORMAT JSONCompactStringsEachRowWithNames ["v4", "v2", "v3"]["1", "2", "3"] SELECT * FROM test_table FORMAT JSONCompactStringsEachRowWithNamesAndTypes; +SELECT '---------'; +SELECT * FROM test_table FORMAT JSONCompactStringsEachRowWithNames; SELECT 12; /* Check Nested */ INSERT INTO test_table_2 FORMAT JSONCompactStringsEachRowWithNamesAndTypes ["v1", "n.id", "n.name"]["UInt8", "Array(UInt8)", "Array(String)"]["16", "[15, 16, 17]", "['first', 'second', 'third']"]; +INSERT INTO test_table_2 FORMAT JSONCompactStringsEachRowWithNames ["v1", "n.id", "n.name"]["16", "[15, 16, 17]", "['first', 'second', 'third']"]; SELECT * FROM test_table_2 FORMAT JSONCompactStringsEachRowWithNamesAndTypes; +SELECT '---------'; +SELECT * FROM test_table_2 FORMAT JSONCompactStringsEachRowWithNames; DROP TABLE IF EXISTS test_table; DROP TABLE IF EXISTS test_table_2; diff --git a/tests/queries/0_stateless/01451_detach_drop_part.sql b/tests/queries/0_stateless/01451_detach_drop_part.sql index 0bc7e13d243..a285730e45f 100644 --- a/tests/queries/0_stateless/01451_detach_drop_part.sql +++ b/tests/queries/0_stateless/01451_detach_drop_part.sql @@ -1,6 +1,3 @@ --- Tags: no-replicated-database --- Tag no-replicated-database: Unsupported type of ALTER query - DROP TABLE IF EXISTS mt_01451; CREATE TABLE mt_01451 (v UInt8) ENGINE = MergeTree() order by tuple(); diff --git a/tests/queries/0_stateless/01451_replicated_detach_drop_part_long.sql b/tests/queries/0_stateless/01451_replicated_detach_drop_part_long.sql index eb4d5e43115..9f9d1db78f1 100644 --- a/tests/queries/0_stateless/01451_replicated_detach_drop_part_long.sql +++ b/tests/queries/0_stateless/01451_replicated_detach_drop_part_long.sql @@ -1,5 +1,5 @@ -- Tags: long, replica, no-replicated-database --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tag no-replicated-database: Fails due to additional replicas or shards SET replication_alter_partitions_sync = 2; diff --git a/tests/queries/0_stateless/01506_buffer_table_alter_block_structure_2.reference b/tests/queries/0_stateless/01506_buffer_table_alter_block_structure_2.reference new file mode 100644 index 00000000000..1f90610041b --- /dev/null +++ b/tests/queries/0_stateless/01506_buffer_table_alter_block_structure_2.reference @@ -0,0 +1,3 @@ +2020-01-01 00:05:00 +2020-01-01 00:05:00 +2020-01-01 00:06:00 hello diff --git a/tests/queries/0_stateless/01506_buffer_table_alter_block_structure_2.sql b/tests/queries/0_stateless/01506_buffer_table_alter_block_structure_2.sql new file mode 100644 index 00000000000..8862037c82b --- /dev/null +++ b/tests/queries/0_stateless/01506_buffer_table_alter_block_structure_2.sql @@ -0,0 +1,25 @@ +DROP TABLE IF EXISTS buf_dest; +DROP TABLE IF EXISTS buf; + +CREATE TABLE buf_dest (timestamp DateTime) +ENGINE = MergeTree PARTITION BY toYYYYMMDD(timestamp) +ORDER BY (timestamp); + +CREATE TABLE buf (timestamp DateTime) Engine = Buffer(currentDatabase(), buf_dest, 16, 0.1, 0.1, 2000000, 20000000, 100000000, 300000000);; + +INSERT INTO buf (timestamp) VALUES (toDateTime('2020-01-01 00:05:00')); + +--- wait for buffer to flush +SELECT sleep(1) from numbers(1) settings max_block_size=1 format Null; + +ALTER TABLE buf_dest ADD COLUMN s String; +ALTER TABLE buf ADD COLUMN s String; + +SELECT * FROM buf; + +INSERT INTO buf (timestamp, s) VALUES (toDateTime('2020-01-01 00:06:00'), 'hello'); + +SELECT * FROM buf ORDER BY timestamp; + +DROP TABLE IF EXISTS buf; +DROP TABLE IF EXISTS buf_dest; diff --git a/tests/queries/0_stateless/01507_clickhouse_server_start_with_embedded_config.sh b/tests/queries/0_stateless/01507_clickhouse_server_start_with_embedded_config.sh index 5cee3ecff0d..29593ea4fb5 100755 --- a/tests/queries/0_stateless/01507_clickhouse_server_start_with_embedded_config.sh +++ b/tests/queries/0_stateless/01507_clickhouse_server_start_with_embedded_config.sh @@ -12,7 +12,7 @@ echo "Starting clickhouse-server" $PORT -$CLICKHOUSE_BINARY-server -- --tcp_port "$CLICKHOUSE_PORT_TCP" > server.log 2>&1 & +$CLICKHOUSE_BINARY server -- --tcp_port "$CLICKHOUSE_PORT_TCP" --path /tmp/ > server.log 2>&1 & PID=$! function finish { diff --git a/tests/queries/0_stateless/01551_mergetree_read_in_order_spread.reference b/tests/queries/0_stateless/01551_mergetree_read_in_order_spread.reference index cdc595a3c57..b6b8b04907c 100644 --- a/tests/queries/0_stateless/01551_mergetree_read_in_order_spread.reference +++ b/tests/queries/0_stateless/01551_mergetree_read_in_order_spread.reference @@ -1,17 +1,18 @@ (Expression) -ExpressionTransform +ExpressionTransform × 3 (Aggregating) - FinalizingSimpleTransform - FinishAggregatingInOrderTransform 3 → 1 - AggregatingInOrderTransform × 3 - (Expression) - ExpressionTransform × 3 - (SettingQuotaAndLimits) - (ReadFromMergeTree) - ExpressionTransform × 4 - MergeTreeInOrder 0 → 1 - MergingSortedTransform 2 → 1 - ExpressionTransform × 2 - MergeTreeInOrder × 2 0 → 1 - ExpressionTransform - MergeTreeInOrder 0 → 1 + MergingAggregatedBucketTransform × 3 + Resize 1 → 3 + FinishAggregatingInOrderTransform 3 → 1 + AggregatingInOrderTransform × 3 + (Expression) + ExpressionTransform × 3 + (SettingQuotaAndLimits) + (ReadFromMergeTree) + ExpressionTransform × 4 + MergeTreeInOrder 0 → 1 + MergingSortedTransform 2 → 1 + ExpressionTransform × 2 + MergeTreeInOrder × 2 0 → 1 + ExpressionTransform + MergeTreeInOrder 0 → 1 diff --git a/tests/queries/0_stateless/01562_optimize_monotonous_functions_in_order_by.reference b/tests/queries/0_stateless/01562_optimize_monotonous_functions_in_order_by.reference index bf9bff06959..d8c9b88d8e8 100644 --- a/tests/queries/0_stateless/01562_optimize_monotonous_functions_in_order_by.reference +++ b/tests/queries/0_stateless/01562_optimize_monotonous_functions_in_order_by.reference @@ -6,12 +6,10 @@ ORDER BY timestamp ASC LIMIT 10 Expression (Projection) Limit (preliminary LIMIT (without OFFSET)) - MergingSorted (Merge sorted streams for ORDER BY) - MergeSorting (Merge sorted blocks for ORDER BY) - PartialSorting (Sort each block for ORDER BY) - Expression (Before ORDER BY) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - ReadFromMergeTree + Sorting (Sorting for ORDER BY) + Expression (Before ORDER BY) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + ReadFromMergeTree SELECT timestamp, key @@ -20,7 +18,7 @@ ORDER BY toDate(timestamp) ASC LIMIT 10 Expression (Projection) Limit (preliminary LIMIT (without OFFSET)) - FinishSorting + Sorting Expression (Before ORDER BY) SettingQuotaAndLimits (Set limits and quota after reading from storage) ReadFromMergeTree @@ -34,7 +32,7 @@ ORDER BY LIMIT 10 Expression (Projection) Limit (preliminary LIMIT (without OFFSET)) - FinishSorting + Sorting Expression (Before ORDER BY) SettingQuotaAndLimits (Set limits and quota after reading from storage) ReadFromMergeTree diff --git a/tests/queries/0_stateless/01576_alias_column_rewrite.reference b/tests/queries/0_stateless/01576_alias_column_rewrite.reference index 2a824e62158..07d361cfa46 100644 --- a/tests/queries/0_stateless/01576_alias_column_rewrite.reference +++ b/tests/queries/0_stateless/01576_alias_column_rewrite.reference @@ -23,21 +23,19 @@ lambda optimize_read_in_order Expression (Projection) Limit (preliminary LIMIT (without OFFSET)) - MergingSorted (Merge sorted streams for ORDER BY) - MergeSorting (Merge sorted blocks for ORDER BY) - PartialSorting (Sort each block for ORDER BY) - Expression (Before ORDER BY) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - ReadFromMergeTree -Expression (Projection) - Limit (preliminary LIMIT (without OFFSET)) - FinishSorting + Sorting (Sorting for ORDER BY) Expression (Before ORDER BY) SettingQuotaAndLimits (Set limits and quota after reading from storage) ReadFromMergeTree Expression (Projection) Limit (preliminary LIMIT (without OFFSET)) - FinishSorting + Sorting + Expression (Before ORDER BY) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + ReadFromMergeTree +Expression (Projection) + Limit (preliminary LIMIT (without OFFSET)) + Sorting Expression (Before ORDER BY) SettingQuotaAndLimits (Set limits and quota after reading from storage) ReadFromMergeTree diff --git a/tests/queries/0_stateless/01591_window_functions.reference b/tests/queries/0_stateless/01591_window_functions.reference index f54c10ee8b9..07562557369 100644 --- a/tests/queries/0_stateless/01591_window_functions.reference +++ b/tests/queries/0_stateless/01591_window_functions.reference @@ -908,12 +908,10 @@ Expression ((Projection + Before ORDER BY)) Window (Window step for window \'\') Window (Window step for window \'PARTITION BY p\') Window (Window step for window \'PARTITION BY p ORDER BY o ASC\') - MergingSorted (Merge sorted streams for window \'PARTITION BY p ORDER BY o ASC\') - MergeSorting (Merge sorted blocks for window \'PARTITION BY p ORDER BY o ASC\') - PartialSorting (Sort each block for window \'PARTITION BY p ORDER BY o ASC\') - Expression ((Before window functions + (Projection + Before ORDER BY))) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - ReadFromStorage (SystemNumbers) + Sorting (Sorting for window \'PARTITION BY p ORDER BY o ASC\') + Expression ((Before window functions + (Projection + Before ORDER BY))) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + ReadFromStorage (SystemNumbers) explain select count(*) over (order by o, number), count(*) over (order by number) @@ -923,16 +921,12 @@ from ; Expression ((Projection + Before ORDER BY)) Window (Window step for window \'ORDER BY o ASC, number ASC\') - MergingSorted (Merge sorted streams for window \'ORDER BY o ASC, number ASC\') - MergeSorting (Merge sorted blocks for window \'ORDER BY o ASC, number ASC\') - PartialSorting (Sort each block for window \'ORDER BY o ASC, number ASC\') - Window (Window step for window \'ORDER BY number ASC\') - MergingSorted (Merge sorted streams for window \'ORDER BY number ASC\') - MergeSorting (Merge sorted blocks for window \'ORDER BY number ASC\') - PartialSorting (Sort each block for window \'ORDER BY number ASC\') - Expression ((Before window functions + (Projection + Before ORDER BY))) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - ReadFromStorage (SystemNumbers) + Sorting (Sorting for window \'ORDER BY o ASC, number ASC\') + Window (Window step for window \'ORDER BY number ASC\') + Sorting (Sorting for window \'ORDER BY number ASC\') + Expression ((Before window functions + (Projection + Before ORDER BY))) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + ReadFromStorage (SystemNumbers) -- A test case for the sort comparator found by fuzzer. SELECT max(number) OVER (ORDER BY number DESC NULLS FIRST), diff --git a/tests/queries/0_stateless/01598_memory_limit_zeros.sql b/tests/queries/0_stateless/01598_memory_limit_zeros.sql index f8d6cf6ca7a..5b321687e43 100644 --- a/tests/queries/0_stateless/01598_memory_limit_zeros.sql +++ b/tests/queries/0_stateless/01598_memory_limit_zeros.sql @@ -1,4 +1,4 @@ -- Tags: no-parallel, no-fasttest -SET max_memory_usage = 1, max_untracked_memory = 1000000; +SET max_memory_usage = 1, max_untracked_memory = 1000000, max_threads=40; select 'test', count(*) from zeros_mt(1000000) where not ignore(zero); -- { serverError 241 } diff --git a/tests/queries/0_stateless/01604_explain_ast_of_nonselect_query.reference b/tests/queries/0_stateless/01604_explain_ast_of_nonselect_query.reference index 3545278ec1a..3c92ffb0a8c 100644 --- a/tests/queries/0_stateless/01604_explain_ast_of_nonselect_query.reference +++ b/tests/queries/0_stateless/01604_explain_ast_of_nonselect_query.reference @@ -1,6 +1,6 @@ AlterQuery t1 (children 1) ExpressionList (children 1) - AlterCommand 32 (children 1) + AlterCommand 33 (children 1) Function equals (children 1) ExpressionList (children 2) Identifier date diff --git a/tests/queries/0_stateless/01645_system_table_engines.sql b/tests/queries/0_stateless/01645_system_table_engines.sql index 5e8eef5508b..c2048427670 100644 --- a/tests/queries/0_stateless/01645_system_table_engines.sql +++ b/tests/queries/0_stateless/01645_system_table_engines.sql @@ -1 +1 @@ -SELECT * FROM system.table_engines WHERE name in ('MergeTree', 'ReplicatedCollapsingMergeTree') FORMAT PrettyCompactNoEscapes; +SELECT * FROM system.table_engines WHERE name in ('MergeTree', 'ReplicatedCollapsingMergeTree') ORDER BY name FORMAT PrettyCompactNoEscapes; diff --git a/tests/queries/0_stateless/01650_fetch_patition_with_macro_in_zk_path_long.sql b/tests/queries/0_stateless/01650_fetch_patition_with_macro_in_zk_path_long.sql index f9b9181b5b7..ce48ad6a02a 100644 --- a/tests/queries/0_stateless/01650_fetch_patition_with_macro_in_zk_path_long.sql +++ b/tests/queries/0_stateless/01650_fetch_patition_with_macro_in_zk_path_long.sql @@ -1,5 +1,4 @@ --- Tags: long, no-replicated-database --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tags: long DROP TABLE IF EXISTS test_01640; DROP TABLE IF EXISTS restore_01640; diff --git a/tests/queries/0_stateless/01655_plan_optimizations.reference b/tests/queries/0_stateless/01655_plan_optimizations.reference index 22876207862..33a7ff44b74 100644 --- a/tests/queries/0_stateless/01655_plan_optimizations.reference +++ b/tests/queries/0_stateless/01655_plan_optimizations.reference @@ -5,11 +5,8 @@ FUNCTION sipHash64 Filter column: equals > sorting steps should know about limit Limit 10 -MergingSorted -Limit 10 -MergeSorting -Limit 10 -PartialSorting +Sorting +Sorting Limit 10 -- filter push down -- > filter should be pushed down after aggregating @@ -108,9 +105,8 @@ Filter column: notEquals(y, 2) 1 0 1 1 > filter is pushed down before sorting steps -MergingSorted -MergeSorting -PartialSorting +Sorting +Sorting Filter column: and(notEquals(x, 0), notEquals(y, 0)) 1 2 1 1 diff --git a/tests/queries/0_stateless/01655_plan_optimizations.sh b/tests/queries/0_stateless/01655_plan_optimizations.sh index b835bae0e27..de3d3ac3eb6 100755 --- a/tests/queries/0_stateless/01655_plan_optimizations.sh +++ b/tests/queries/0_stateless/01655_plan_optimizations.sh @@ -10,7 +10,7 @@ $CLICKHOUSE_CLIENT -q "select x + 1 from (select y + 2 as x from (select dummy + echo "> sipHash should be calculated after filtration" $CLICKHOUSE_CLIENT -q "explain actions = 1 select sum(x), sum(y) from (select sipHash64(number) as x, bitAnd(number, 1024) as y from numbers_mt(1000000000) limit 1000000000) where y = 0" | grep -o "FUNCTION sipHash64\|Filter column: equals" echo "> sorting steps should know about limit" -$CLICKHOUSE_CLIENT -q "explain actions = 1 select number from (select number from numbers(500000000) order by -number) limit 10" | grep -o "MergingSorted\|MergeSorting\|PartialSorting\|Limit 10" +$CLICKHOUSE_CLIENT -q "explain actions = 1 select number from (select number from numbers(500000000) order by -number) limit 10" | grep -o "Sorting\|Limit 10" echo "-- filter push down --" echo "> filter should be pushed down after aggregating" @@ -132,7 +132,7 @@ $CLICKHOUSE_CLIENT -q " select number % 2 as x, number % 3 as y from numbers(6) order by y desc ) where x != 0 and y != 0 settings enable_optimize_predicate_expression = 0" | - grep -o "MergingSorted\|MergeSorting\|PartialSorting\|Filter column: and(notEquals(x, 0), notEquals(y, 0))" + grep -o "Sorting\|Filter column: and(notEquals(x, 0), notEquals(y, 0))" $CLICKHOUSE_CLIENT -q " select x, y from ( select number % 2 as x, number % 3 as y from numbers(6) order by y desc diff --git a/tests/queries/0_stateless/01710_aggregate_projection_with_hashing.reference b/tests/queries/0_stateless/01710_aggregate_projection_with_hashing.reference new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/queries/0_stateless/01710_aggregate_projection_with_hashing.sql b/tests/queries/0_stateless/01710_aggregate_projection_with_hashing.sql new file mode 100644 index 00000000000..d5eaa2617a6 --- /dev/null +++ b/tests/queries/0_stateless/01710_aggregate_projection_with_hashing.sql @@ -0,0 +1,11 @@ +set allow_experimental_projection_optimization = 1, force_optimize_projection = 1; + +drop table if exists tp; + +create table tp (type Int32, device UUID, cnt UInt64) engine = MergeTree order by (type, device); +insert into tp select number%3, generateUUIDv4(), 1 from numbers(300); + +alter table tp add projection uniq_city_proj ( select type, uniq(cityHash64(device)), sum(cnt) group by type ); +alter table tp materialize projection uniq_city_proj settings mutations_sync = 1; + +drop table tp; diff --git a/tests/queries/0_stateless/01710_minmax_count_projection.reference b/tests/queries/0_stateless/01710_minmax_count_projection.reference index da7d2fbe2bd..ed78b475842 100644 --- a/tests/queries/0_stateless/01710_minmax_count_projection.reference +++ b/tests/queries/0_stateless/01710_minmax_count_projection.reference @@ -4,8 +4,7 @@ 0 9998 5000 1 0 -0 -0 -0 9999 +1 0 9999 +1 9999 3 diff --git a/tests/queries/0_stateless/01710_minmax_count_projection.sql b/tests/queries/0_stateless/01710_minmax_count_projection.sql index b7077de1fe6..0138ad8c57e 100644 --- a/tests/queries/0_stateless/01710_minmax_count_projection.sql +++ b/tests/queries/0_stateless/01710_minmax_count_projection.sql @@ -16,29 +16,23 @@ select min(i) from d where 1 = _partition_value.1; drop table d; -drop table if exists no_final_mark; drop table if exists has_final_mark; drop table if exists mixed_final_mark; -create table no_final_mark (i int, j int) engine MergeTree partition by i % 2 order by j settings index_granularity = 10, write_final_mark = 0; create table has_final_mark (i int, j int) engine MergeTree partition by i % 2 order by j settings index_granularity = 10, write_final_mark = 1; create table mixed_final_mark (i int, j int) engine MergeTree partition by i % 2 order by j settings index_granularity = 10; set max_rows_to_read = 100000; -insert into no_final_mark select number, number from numbers(10000); insert into has_final_mark select number, number from numbers(10000); -alter table mixed_final_mark attach partition 0 from no_final_mark; alter table mixed_final_mark attach partition 1 from has_final_mark; set max_rows_to_read = 2; -select min(j) from no_final_mark; select min(j) from has_final_mark; select min(j) from mixed_final_mark; -select min(j), max(j) from no_final_mark; -- {serverError TOO_MANY_ROWS} select min(j), max(j) from has_final_mark; set max_rows_to_read = 5001; -- one normal part 5000 + one minmax_count_projection part 1 diff --git a/tests/queries/0_stateless/01710_projection_in_set.reference b/tests/queries/0_stateless/01710_projection_in_set.reference new file mode 100644 index 00000000000..f6705ccafc4 --- /dev/null +++ b/tests/queries/0_stateless/01710_projection_in_set.reference @@ -0,0 +1,2 @@ +2 3 +2 3 diff --git a/tests/queries/0_stateless/01710_projection_in_set.sql b/tests/queries/0_stateless/01710_projection_in_set.sql new file mode 100644 index 00000000000..99fa2cab0c5 --- /dev/null +++ b/tests/queries/0_stateless/01710_projection_in_set.sql @@ -0,0 +1,12 @@ +drop table if exists x; +create table x (i UInt64, j UInt64, k UInt64, projection agg (select sum(j), avg(k) group by i), projection norm (select j, k order by i)) engine MergeTree order by tuple(); + +insert into x values (1, 2, 3); + +set allow_experimental_projection_optimization = 1, use_index_for_in_with_subqueries = 0; + +select sum(j), avg(k) from x where i in (select number from numbers(4)); + +select j, k from x where i in (select number from numbers(4)); + +drop table x; diff --git a/tests/queries/0_stateless/01710_projection_with_joins.reference b/tests/queries/0_stateless/01710_projection_with_joins.reference new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/queries/0_stateless/01710_projection_with_joins.sql b/tests/queries/0_stateless/01710_projection_with_joins.sql new file mode 100644 index 00000000000..fcd1c586fa3 --- /dev/null +++ b/tests/queries/0_stateless/01710_projection_with_joins.sql @@ -0,0 +1,8 @@ +drop table if exists t; + +create table t (s UInt16, l UInt16, projection p (select s, l order by l)) engine MergeTree order by s; + +select s from t join (select toUInt16(1) as s) x using (s) settings allow_experimental_projection_optimization = 1; +select s from t join (select toUInt16(1) as s) x using (s) settings allow_experimental_projection_optimization = 0; + +drop table t; diff --git a/tests/queries/0_stateless/01823_explain_json.reference b/tests/queries/0_stateless/01823_explain_json.reference index 5c7845a22d5..f75cd69dbf3 100644 --- a/tests/queries/0_stateless/01823_explain_json.reference +++ b/tests/queries/0_stateless/01823_explain_json.reference @@ -111,31 +111,3 @@ } ], "Limit": 3, --- - "Sort Description": [ - { - "Column": "number", - "Ascending": false, - "With Fill": false - }, - { - "Column": "plus(number, 1)", - "Ascending": true, - "With Fill": false - } - ], - "Limit": 3, --- - "Sort Description": [ - { - "Column": "number", - "Ascending": false, - "With Fill": false - }, - { - "Column": "plus(number, 1)", - "Ascending": true, - "With Fill": false - } - ], - "Limit": 3, diff --git a/tests/queries/0_stateless/01854_HTTP_dict_decompression.python b/tests/queries/0_stateless/01854_HTTP_dict_decompression.python index 216e1afa71d..929eaae8067 100644 --- a/tests/queries/0_stateless/01854_HTTP_dict_decompression.python +++ b/tests/queries/0_stateless/01854_HTTP_dict_decompression.python @@ -13,12 +13,25 @@ import urllib.request import subprocess import lzma -def get_local_port(host): - with socket.socket() as fd: + +def is_ipv6(host): + try: + socket.inet_aton(host) + return False + except: + return True + +def get_local_port(host, ipv6): + if ipv6: + family = socket.AF_INET6 + else: + family = socket.AF_INET + + with socket.socket(family) as fd: fd.bind((host, 0)) return fd.getsockname()[1] -CLICKHOUSE_HOST = os.environ.get('CLICKHOUSE_HOST', '127.0.0.1') +CLICKHOUSE_HOST = os.environ.get('CLICKHOUSE_HOST', 'localhost') CLICKHOUSE_PORT_HTTP = os.environ.get('CLICKHOUSE_PORT_HTTP', '8123') ##################################################################################### @@ -30,11 +43,15 @@ CLICKHOUSE_PORT_HTTP = os.environ.get('CLICKHOUSE_PORT_HTTP', '8123') # IP-address of this host accessible from the outside world. Get the first one HTTP_SERVER_HOST = subprocess.check_output(['hostname', '-i']).decode('utf-8').strip().split()[0] -HTTP_SERVER_PORT = get_local_port(HTTP_SERVER_HOST) +IS_IPV6 = is_ipv6(HTTP_SERVER_HOST) +HTTP_SERVER_PORT = get_local_port(HTTP_SERVER_HOST, IS_IPV6) # IP address and port of the HTTP server started from this script. HTTP_SERVER_ADDRESS = (HTTP_SERVER_HOST, HTTP_SERVER_PORT) -HTTP_SERVER_URL_STR = 'http://' + ':'.join(str(s) for s in HTTP_SERVER_ADDRESS) + "/" +if IS_IPV6: + HTTP_SERVER_URL_STR = 'http://' + f'[{str(HTTP_SERVER_ADDRESS[0])}]:{str(HTTP_SERVER_ADDRESS[1])}' + "/" +else: + HTTP_SERVER_URL_STR = 'http://' + f'{str(HTTP_SERVER_ADDRESS[0])}:{str(HTTP_SERVER_ADDRESS[1])}' + "/" # Because we need to check the content of file.csv we can create this content and avoid reading csv CSV_DATA = "Hello, 1\nWorld, 2\nThis, 152\nis, 9283\ntesting, 2313213\ndata, 555\n" @@ -48,6 +65,10 @@ ENDINGS = ['.gz', '.xz'] SEND_ENCODING = True def get_ch_answer(query): + host = CLICKHOUSE_HOST + if IS_IPV6: + host = f'[{host}]' + url = os.environ.get('CLICKHOUSE_URL', 'http://{host}:{port}'.format(host=CLICKHOUSE_HOST, port=CLICKHOUSE_PORT_HTTP)) return urllib.request.urlopen(url, data=query.encode()).read().decode() @@ -98,8 +119,14 @@ class HttpProcessor(SimpleHTTPRequestHandler): def log_message(self, format, *args): return +class HTTPServerV6(HTTPServer): + address_family = socket.AF_INET6 + def start_server(requests_amount): - httpd = HTTPServer(HTTP_SERVER_ADDRESS, HttpProcessor) + if IS_IPV6: + httpd = HTTPServerV6(HTTP_SERVER_ADDRESS, HttpProcessor) + else: + httpd = HTTPServer(HTTP_SERVER_ADDRESS, HttpProcessor) def real_func(): for i in range(requests_amount): @@ -127,7 +154,7 @@ def test_select(dict_name="", schema="word String, counter UInt32", requests=[], PRIMARY KEY word SOURCE(HTTP(url '{}' format 'CSV')) LAYOUT(complex_key_hashed()) - LIFETIME(0)'''.format(dict_name, schema, HTTP_SERVER_URL_STR+'/test.csv' + ADDING_ENDING)) + LIFETIME(0)'''.format(dict_name, schema, HTTP_SERVER_URL_STR + '/test.csv' + ADDING_ENDING)) COMPRESS_METHOD = requests[i] print(i, COMPRESS_METHOD, ADDING_ENDING, SEND_ENCODING) diff --git a/tests/queries/0_stateless/01951_distributed_push_down_limit.reference b/tests/queries/0_stateless/01951_distributed_push_down_limit.reference index ca3bbc4cb33..d0e7a9ef15b 100644 --- a/tests/queries/0_stateless/01951_distributed_push_down_limit.reference +++ b/tests/queries/0_stateless/01951_distributed_push_down_limit.reference @@ -2,31 +2,27 @@ explain select * from remote('127.{1,2}', view(select * from numbers(1e6))) order by number limit 10 settings distributed_push_down_limit=0; Expression (Projection) Limit (preliminary LIMIT (without OFFSET)) - MergingSorted (Merge sorted streams after aggregation stage for ORDER BY) + Sorting (Merge sorted streams after aggregation stage for ORDER BY) SettingQuotaAndLimits (Set limits and quota after reading from storage) Union - MergingSorted (Merge sorted streams for ORDER BY) - MergeSorting (Merge sorted blocks for ORDER BY) - PartialSorting (Sort each block for ORDER BY) - Expression (Before ORDER BY) + Sorting (Sorting for ORDER BY) + Expression (Before ORDER BY) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + Expression ((Convert VIEW subquery result to VIEW table structure + (Materialize constants after VIEW subquery + (Projection + Before ORDER BY)))) SettingQuotaAndLimits (Set limits and quota after reading from storage) - Expression ((Convert VIEW subquery result to VIEW table structure + (Materialize constants after VIEW subquery + (Projection + Before ORDER BY)))) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - ReadFromStorage (SystemNumbers) + ReadFromStorage (SystemNumbers) ReadFromRemote (Read from remote replica) explain select * from remote('127.{1,2}', view(select * from numbers(1e6))) order by number limit 10 settings distributed_push_down_limit=1; Expression (Projection) Limit (preliminary LIMIT (without OFFSET)) - MergingSorted (Merge sorted streams after aggregation stage for ORDER BY) + Sorting (Merge sorted streams after aggregation stage for ORDER BY) SettingQuotaAndLimits (Set limits and quota after reading from storage) Union Limit (preliminary LIMIT (with OFFSET)) - MergingSorted (Merge sorted streams for ORDER BY) - MergeSorting (Merge sorted blocks for ORDER BY) - PartialSorting (Sort each block for ORDER BY) - Expression (Before ORDER BY) + Sorting (Sorting for ORDER BY) + Expression (Before ORDER BY) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + Expression ((Convert VIEW subquery result to VIEW table structure + (Materialize constants after VIEW subquery + (Projection + Before ORDER BY)))) SettingQuotaAndLimits (Set limits and quota after reading from storage) - Expression ((Convert VIEW subquery result to VIEW table structure + (Materialize constants after VIEW subquery + (Projection + Before ORDER BY)))) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - ReadFromStorage (SystemNumbers) + ReadFromStorage (SystemNumbers) ReadFromRemote (Read from remote replica) diff --git a/tests/queries/0_stateless/01952_optimize_distributed_group_by_sharding_key.reference b/tests/queries/0_stateless/01952_optimize_distributed_group_by_sharding_key.reference index 10787068f43..b23631395ff 100644 --- a/tests/queries/0_stateless/01952_optimize_distributed_group_by_sharding_key.reference +++ b/tests/queries/0_stateless/01952_optimize_distributed_group_by_sharding_key.reference @@ -50,66 +50,58 @@ SettingQuotaAndLimits (Set limits and quota after reading from storage) explain select distinct k1 from remote('127.{1,2}', view(select 1 k1, 2 k2, 3 v from numbers(2)), cityHash64(k1, k2)) order by v; -- not optimized Expression (Projection) Distinct - MergingSorted (Merge sorted streams for ORDER BY, without aggregation) + Sorting (Merge sorted streams for ORDER BY, without aggregation) SettingQuotaAndLimits (Set limits and quota after reading from storage) Union - MergingSorted (Merge sorted streams for ORDER BY) - MergeSorting (Merge sorted blocks for ORDER BY) - PartialSorting (Sort each block for ORDER BY) - Distinct (Preliminary DISTINCT) - Expression (Before ORDER BY) + Sorting (Sorting for ORDER BY) + Distinct (Preliminary DISTINCT) + Expression (Before ORDER BY) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + Expression ((Convert VIEW subquery result to VIEW table structure + (Materialize constants after VIEW subquery + (Projection + Before ORDER BY)))) SettingQuotaAndLimits (Set limits and quota after reading from storage) - Expression ((Convert VIEW subquery result to VIEW table structure + (Materialize constants after VIEW subquery + (Projection + Before ORDER BY)))) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - ReadFromStorage (SystemNumbers) + ReadFromStorage (SystemNumbers) ReadFromRemote (Read from remote replica) explain select distinct k1, k2 from remote('127.{1,2}', view(select 1 k1, 2 k2, 3 v from numbers(2)), cityHash64(k1, k2)) order by v; -- optimized Expression (Projection) - MergingSorted (Merge sorted streams after aggregation stage for ORDER BY) + Sorting (Merge sorted streams after aggregation stage for ORDER BY) SettingQuotaAndLimits (Set limits and quota after reading from storage) Union Distinct - MergingSorted (Merge sorted streams for ORDER BY) - MergeSorting (Merge sorted blocks for ORDER BY) - PartialSorting (Sort each block for ORDER BY) - Distinct (Preliminary DISTINCT) - Expression (Before ORDER BY) + Sorting (Sorting for ORDER BY) + Distinct (Preliminary DISTINCT) + Expression (Before ORDER BY) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + Expression ((Convert VIEW subquery result to VIEW table structure + (Materialize constants after VIEW subquery + (Projection + Before ORDER BY)))) SettingQuotaAndLimits (Set limits and quota after reading from storage) - Expression ((Convert VIEW subquery result to VIEW table structure + (Materialize constants after VIEW subquery + (Projection + Before ORDER BY)))) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - ReadFromStorage (SystemNumbers) + ReadFromStorage (SystemNumbers) ReadFromRemote (Read from remote replica) explain select distinct on (k1) k2 from remote('127.{1,2}', view(select 1 k1, 2 k2, 3 v from numbers(2)), cityHash64(k1, k2)) order by v; -- not optimized Expression (Projection) LimitBy Expression (Before LIMIT BY) - MergingSorted (Merge sorted streams for ORDER BY, without aggregation) + Sorting (Merge sorted streams for ORDER BY, without aggregation) SettingQuotaAndLimits (Set limits and quota after reading from storage) Union LimitBy Expression (Before LIMIT BY) - MergingSorted (Merge sorted streams for ORDER BY) - MergeSorting (Merge sorted blocks for ORDER BY) - PartialSorting (Sort each block for ORDER BY) - Expression (Before ORDER BY) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - Expression ((Convert VIEW subquery result to VIEW table structure + (Materialize constants after VIEW subquery + (Projection + Before ORDER BY)))) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - ReadFromStorage (SystemNumbers) - ReadFromRemote (Read from remote replica) -explain select distinct on (k1, k2) v from remote('127.{1,2}', view(select 1 k1, 2 k2, 3 v from numbers(2)), cityHash64(k1, k2)) order by v; -- optimized -Expression (Projection) - MergingSorted (Merge sorted streams after aggregation stage for ORDER BY) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - Union - LimitBy - Expression (Before LIMIT BY) - MergingSorted (Merge sorted streams for ORDER BY) - MergeSorting (Merge sorted blocks for ORDER BY) - PartialSorting (Sort each block for ORDER BY) + Sorting (Sorting for ORDER BY) Expression (Before ORDER BY) SettingQuotaAndLimits (Set limits and quota after reading from storage) Expression ((Convert VIEW subquery result to VIEW table structure + (Materialize constants after VIEW subquery + (Projection + Before ORDER BY)))) SettingQuotaAndLimits (Set limits and quota after reading from storage) ReadFromStorage (SystemNumbers) + ReadFromRemote (Read from remote replica) +explain select distinct on (k1, k2) v from remote('127.{1,2}', view(select 1 k1, 2 k2, 3 v from numbers(2)), cityHash64(k1, k2)) order by v; -- optimized +Expression (Projection) + Sorting (Merge sorted streams after aggregation stage for ORDER BY) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + Union + LimitBy + Expression (Before LIMIT BY) + Sorting (Sorting for ORDER BY) + Expression (Before ORDER BY) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + Expression ((Convert VIEW subquery result to VIEW table structure + (Materialize constants after VIEW subquery + (Projection + Before ORDER BY)))) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + ReadFromStorage (SystemNumbers) ReadFromRemote (Read from remote replica) diff --git a/tests/queries/0_stateless/02006_test_positional_arguments.reference b/tests/queries/0_stateless/02006_test_positional_arguments.reference index a8e8ccec100..27936137a1b 100644 --- a/tests/queries/0_stateless/02006_test_positional_arguments.reference +++ b/tests/queries/0_stateless/02006_test_positional_arguments.reference @@ -46,5 +46,102 @@ select x1, x2, x3 from test order by 3 limit 1 by 1; 100 100 1 10 1 10 1 10 100 -select max(x3), max(x2), max(x1) from test group by 1; -- { serverError 43 } -select max(x1) from test order by 1; -- { serverError 43 } +explain syntax select x3, x2, x1 from test order by 1 + 1; +SELECT + x3, + x2, + x1 +FROM test +ORDER BY x3 + x3 ASC +explain syntax select x3, x2, x1 from test order by (1 + 1) * 3; +SELECT + x3, + x2, + x1 +FROM test +ORDER BY (x3 + x3) * x1 ASC +select x2, x1 from test group by x2 + x1; -- { serverError 215 } +select x2, x1 from test group by 1 + 2; -- { serverError 215 } +explain syntax select x3, x2, x1 from test order by 1; +SELECT + x3, + x2, + x1 +FROM test +ORDER BY x3 ASC +explain syntax select x3 + 1, x2, x1 from test order by 1; +SELECT + x3 + 1, + x2, + x1 +FROM test +ORDER BY x3 + 1 ASC +explain syntax select x3, x3 - x2, x2, x1 from test order by 2; +SELECT + x3, + x3 - x2, + x2, + x1 +FROM test +ORDER BY x3 - x2 ASC +explain syntax select x3, if(x3 > 10, x3, plus(x1, x2)), x1 + x2 from test order by 2; +SELECT + x3, + if(x3 > 10, x3, x1 + x2), + x1 + x2 +FROM test +ORDER BY if(x3 > 10, x3, x1 + x2) ASC +explain syntax select max(x1), x2 from test group by 2 order by 1, 2; +SELECT + max(x1), + x2 +FROM test +GROUP BY x2 +ORDER BY + max(x1) ASC, + x2 ASC +explain syntax select 1 + greatest(x1, 1), x2 from test group by 1, 2; +SELECT + 1 + greatest(x1, 1), + x2 +FROM test +GROUP BY + 1 + greatest(x1, 1), + x2 +select max(x1), x2 from test group by 1, 2; -- { serverError 43 } +select 1 + max(x1), x2 from test group by 1, 2; -- { serverError 43 } +select x1 + x2, x3 from test group by x1 + x2, x3; +11 100 +200 1 +11 200 +11 10 +select x3, x2, x1 from test order by x3 * 2, x2, x1; -- check x3 * 2 does not become x3 * x2 +1 100 100 +1 100 100 +10 1 10 +100 10 1 +200 1 10 +200 10 1 +explain syntax select x1, x3 from test group by 1 + 2, 1, 2; +SELECT + x1, + x3 +FROM test +GROUP BY + x1 + x3, + x1, + x3 +explain syntax select x1 + x3, x3 from test group by 1, 2; +SELECT + x1 + x3, + x3 +FROM test +GROUP BY + x1 + x3, + x3 +create table test2(x1 Int, x2 Int, x3 Int) engine=Memory; +insert into test2 values (1, 10, 100), (10, 1, 10), (100, 100, 1); +select x1, x1 * 2, max(x2), max(x3) from test2 group by 2, 1, x1 order by 1, 2, 4 desc, 3 asc; +1 2 10 100 +10 20 1 10 +100 200 100 1 diff --git a/tests/queries/0_stateless/02006_test_positional_arguments.sql b/tests/queries/0_stateless/02006_test_positional_arguments.sql index dc45b288016..4b6affc290a 100644 --- a/tests/queries/0_stateless/02006_test_positional_arguments.sql +++ b/tests/queries/0_stateless/02006_test_positional_arguments.sql @@ -1,6 +1,8 @@ set enable_positional_arguments = 1; drop table if exists test; +drop table if exists test2; + create table test(x1 Int, x2 Int, x3 Int) engine=Memory(); insert into test values (1, 10, 100), (10, 1, 10), (100, 100, 1); @@ -20,7 +22,28 @@ select x1, x2, x3 from test order by 3 limit 1 by 3; select x1, x2, x3 from test order by x3 limit 1 by x1; select x1, x2, x3 from test order by 3 limit 1 by 1; -select max(x3), max(x2), max(x1) from test group by 1; -- { serverError 43 } -select max(x1) from test order by 1; -- { serverError 43 } +explain syntax select x3, x2, x1 from test order by 1 + 1; +explain syntax select x3, x2, x1 from test order by (1 + 1) * 3; +select x2, x1 from test group by x2 + x1; -- { serverError 215 } +select x2, x1 from test group by 1 + 2; -- { serverError 215 } +explain syntax select x3, x2, x1 from test order by 1; +explain syntax select x3 + 1, x2, x1 from test order by 1; +explain syntax select x3, x3 - x2, x2, x1 from test order by 2; +explain syntax select x3, if(x3 > 10, x3, plus(x1, x2)), x1 + x2 from test order by 2; +explain syntax select max(x1), x2 from test group by 2 order by 1, 2; +explain syntax select 1 + greatest(x1, 1), x2 from test group by 1, 2; + +select max(x1), x2 from test group by 1, 2; -- { serverError 43 } +select 1 + max(x1), x2 from test group by 1, 2; -- { serverError 43 } +select x1 + x2, x3 from test group by x1 + x2, x3; + +select x3, x2, x1 from test order by x3 * 2, x2, x1; -- check x3 * 2 does not become x3 * x2 + +explain syntax select x1, x3 from test group by 1 + 2, 1, 2; +explain syntax select x1 + x3, x3 from test group by 1, 2; + +create table test2(x1 Int, x2 Int, x3 Int) engine=Memory; +insert into test2 values (1, 10, 100), (10, 1, 10), (100, 100, 1); +select x1, x1 * 2, max(x2), max(x3) from test2 group by 2, 1, x1 order by 1, 2, 4 desc, 3 asc; diff --git a/tests/queries/0_stateless/02009_array_join_partition.sql b/tests/queries/0_stateless/02009_array_join_partition.sql index 1b99deec0f9..a78efe96f66 100644 --- a/tests/queries/0_stateless/02009_array_join_partition.sql +++ b/tests/queries/0_stateless/02009_array_join_partition.sql @@ -1,6 +1,3 @@ --- Tags: no-replicated-database --- Tag no-replicated-database: Unsupported type of ALTER query - CREATE TABLE table_2009_part (`i` Int64, `d` Date, `s` String) ENGINE = MergeTree PARTITION BY toYYYYMM(d) ORDER BY i; ALTER TABLE table_2009_part ATTACH PARTITION tuple(arrayJoin([0, 1])); -- {serverError 248} diff --git a/tests/queries/0_stateless/02012_changed_enum_type_non_replicated.sql b/tests/queries/0_stateless/02012_changed_enum_type_non_replicated.sql index 5f53984a8e4..50d5bfe0d39 100644 --- a/tests/queries/0_stateless/02012_changed_enum_type_non_replicated.sql +++ b/tests/queries/0_stateless/02012_changed_enum_type_non_replicated.sql @@ -1,5 +1,4 @@ --- Tags: replica, no-replicated-database --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tags: replica create table enum_alter_issue (a Enum8('one' = 1, 'two' = 2)) engine = MergeTree() ORDER BY a; insert into enum_alter_issue values ('one'), ('two'); diff --git a/tests/queries/0_stateless/02012_zookeeper_changed_enum_type.sql b/tests/queries/0_stateless/02012_zookeeper_changed_enum_type.sql index 790db4c5c3d..5dc9ef8ca17 100644 --- a/tests/queries/0_stateless/02012_zookeeper_changed_enum_type.sql +++ b/tests/queries/0_stateless/02012_zookeeper_changed_enum_type.sql @@ -1,5 +1,5 @@ -- Tags: zookeeper, no-replicated-database --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tag no-replicated-database: Fails due to additional replicas or shards create table enum_alter_issue (a Enum8('one' = 1, 'two' = 2), b Int) engine = ReplicatedMergeTree('/clickhouse/tables/{database}/test_02012/enum_alter_issue', 'r1') diff --git a/tests/queries/0_stateless/02012_zookeeper_changed_enum_type_incompatible.sql b/tests/queries/0_stateless/02012_zookeeper_changed_enum_type_incompatible.sql index 697758be0c8..e236e6d2767 100644 --- a/tests/queries/0_stateless/02012_zookeeper_changed_enum_type_incompatible.sql +++ b/tests/queries/0_stateless/02012_zookeeper_changed_enum_type_incompatible.sql @@ -1,5 +1,5 @@ -- Tags: zookeeper, no-replicated-database --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tag no-replicated-database: Fails due to additional replicas or shards drop table if exists enum_alter_issue; create table enum_alter_issue (a Enum16('one' = 1, 'two' = 2), b Int) diff --git a/tests/queries/0_stateless/02015_async_inserts_7.reference b/tests/queries/0_stateless/02015_async_inserts_7.reference new file mode 100644 index 00000000000..8816e320ee8 --- /dev/null +++ b/tests/queries/0_stateless/02015_async_inserts_7.reference @@ -0,0 +1,6 @@ +1 a +2 b +3 c +4 d +5 e +6 f diff --git a/tests/queries/0_stateless/02015_async_inserts_7.sh b/tests/queries/0_stateless/02015_async_inserts_7.sh new file mode 100755 index 00000000000..c8cbbc48a29 --- /dev/null +++ b/tests/queries/0_stateless/02015_async_inserts_7.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +url="${CLICKHOUSE_URL}&async_insert=1&wait_for_async_insert=1" + +${CLICKHOUSE_CLIENT} -q "DROP TABLE IF EXISTS async_inserts" +${CLICKHOUSE_CLIENT} -q "CREATE TABLE async_inserts (id UInt32, s String) ENGINE = Memory" + +${CLICKHOUSE_CURL} -sS $url -d "INSERT INTO async_inserts VALUES (1, 'a') (2, 'b')" & +${CLICKHOUSE_CURL} -sS $url -d "INSERT INTO async_inserts VALUES (3, 'c'), (4, 'd')" & +${CLICKHOUSE_CURL} -sS $url -d "INSERT INTO async_inserts VALUES (5, 'e'), (6, 'f'), " & + +wait + +${CLICKHOUSE_CLIENT} -q "SELECT * FROM async_inserts ORDER BY id" + +${CLICKHOUSE_CLIENT} -q "DROP TABLE async_inserts" diff --git a/tests/queries/0_stateless/02021_create_database_with_comment.reference b/tests/queries/0_stateless/02021_create_database_with_comment.reference index ada8f919956..65fc9b6d290 100644 --- a/tests/queries/0_stateless/02021_create_database_with_comment.reference +++ b/tests/queries/0_stateless/02021_create_database_with_comment.reference @@ -1,3 +1,7 @@ +engine : Memory +CREATE DATABASE default\nENGINE = Memory()\nCOMMENT \'Test DB with comment\' +comment= Test DB with comment + engine : Atomic CREATE DATABASE default\nENGINE = Atomic\nCOMMENT \'Test DB with comment\' comment= Test DB with comment @@ -10,7 +14,3 @@ engine : Lazy(1) CREATE DATABASE default\nENGINE = Lazy(1)\nCOMMENT \'Test DB with comment\' comment= Test DB with comment -engine : Memory -CREATE DATABASE default\nENGINE = Memory()\nCOMMENT \'Test DB with comment\' -comment= Test DB with comment - diff --git a/tests/queries/0_stateless/02021_create_database_with_comment.sh b/tests/queries/0_stateless/02021_create_database_with_comment.sh index d8b288eb9ba..ce7a7bef066 100755 --- a/tests/queries/0_stateless/02021_create_database_with_comment.sh +++ b/tests/queries/0_stateless/02021_create_database_with_comment.sh @@ -26,12 +26,10 @@ EOF get_db_comment_info } -# For some reason order seems important, putting Atomic after Memory makes test fail every time -# due to DB metadata SQL file still being present after "DROP DATABASE" +test_db_comments "Memory" test_db_comments "Atomic" test_db_comments "Ordinary" test_db_comments "Lazy(1)" -test_db_comments "Memory" # test_db_comments "MySQL('127.0.0.1:9004', 'default', 'default', '')" # fails due to CH internal reasons # test_db_comments "SQLite('dummy_sqlitedb')" ## needs to be explicitly enabled with `SET allow_experimental_database_replicated=1` diff --git a/tests/queries/0_stateless/02021_prewhere_always_true_where.reference b/tests/queries/0_stateless/02021_prewhere_always_true_where.reference new file mode 100644 index 00000000000..d00491fd7e5 --- /dev/null +++ b/tests/queries/0_stateless/02021_prewhere_always_true_where.reference @@ -0,0 +1 @@ +1 diff --git a/tests/queries/0_stateless/02021_prewhere_always_true_where.sql b/tests/queries/0_stateless/02021_prewhere_always_true_where.sql new file mode 100644 index 00000000000..95dcb6a15c2 --- /dev/null +++ b/tests/queries/0_stateless/02021_prewhere_always_true_where.sql @@ -0,0 +1,5 @@ +drop table if exists data_02021; +create table data_02021 (key Int) engine=MergeTree() order by key; +insert into data_02021 values (1); +select count() from data_02021 prewhere 1 or ignore(key) where ignore(key)=0; +drop table data_02021; diff --git a/tests/queries/0_stateless/02021_prewhere_column_optimization.reference b/tests/queries/0_stateless/02021_prewhere_column_optimization.reference new file mode 100644 index 00000000000..7f97e6efd69 --- /dev/null +++ b/tests/queries/0_stateless/02021_prewhere_column_optimization.reference @@ -0,0 +1,7 @@ +-- { echoOn } +select * from data_02021 prewhere 1 or ignore(key); +1 +select * from data_02021 prewhere 1 or ignore(key) where key = 1; +1 +select * from data_02021 prewhere 0 or ignore(key); +select * from data_02021 prewhere 0 or ignore(key) where key = 1; diff --git a/tests/queries/0_stateless/02021_prewhere_column_optimization.sql b/tests/queries/0_stateless/02021_prewhere_column_optimization.sql new file mode 100644 index 00000000000..4fe8b912c3f --- /dev/null +++ b/tests/queries/0_stateless/02021_prewhere_column_optimization.sql @@ -0,0 +1,10 @@ +drop table if exists data_02021; +create table data_02021 (key Int) engine=MergeTree() order by key; +insert into data_02021 values (1); +-- { echoOn } +select * from data_02021 prewhere 1 or ignore(key); +select * from data_02021 prewhere 1 or ignore(key) where key = 1; +select * from data_02021 prewhere 0 or ignore(key); +select * from data_02021 prewhere 0 or ignore(key) where key = 1; +-- { echoOff } +drop table data_02021; diff --git a/tests/queries/0_stateless/02022_storage_filelog_one_file.reference b/tests/queries/0_stateless/02022_storage_filelog_one_file.reference new file mode 100644 index 00000000000..88332de037f --- /dev/null +++ b/tests/queries/0_stateless/02022_storage_filelog_one_file.reference @@ -0,0 +1,41 @@ +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +10 10 +11 11 +12 12 +13 13 +14 14 +15 15 +16 16 +17 17 +18 18 +19 19 +20 20 +100 100 +101 101 +102 102 +103 103 +104 104 +105 105 +106 106 +107 107 +108 108 +109 109 +110 110 +111 111 +112 112 +113 113 +114 114 +115 115 +116 116 +117 117 +118 118 +119 119 +120 120 diff --git a/tests/queries/0_stateless/02022_storage_filelog_one_file.sh b/tests/queries/0_stateless/02022_storage_filelog_one_file.sh new file mode 100755 index 00000000000..8ae0ce0ec1c --- /dev/null +++ b/tests/queries/0_stateless/02022_storage_filelog_one_file.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +set -eu + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +# Data preparation. +# Now we can get the user_files_path by use the table file function for trick. also we can get it by query as: +# "insert into function file('exist.txt', 'CSV', 'val1 char') values ('aaaa'); select _path from file('exist.txt', 'CSV', 'val1 char')" +user_files_path=$(clickhouse-client --query "select _path,_file from file('nonexist.txt', 'CSV', 'val1 char')" 2>&1 | grep Exception | awk '{gsub("/nonexist.txt","",$9); print $9}') + +for i in {1..20} +do + echo $i, $i >> ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}.txt +done + +${CLICKHOUSE_CLIENT} --query "drop table if exists file_log;" +${CLICKHOUSE_CLIENT} --query "create table file_log(k UInt8, v UInt8) engine=FileLog('${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}.txt', 'CSV');" + +${CLICKHOUSE_CLIENT} --query "select * from file_log order by k;" + +for i in {100..120} +do + echo $i, $i >> ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}.txt +done + +${CLICKHOUSE_CLIENT} --query "select * from file_log order by k;" + +# touch does not change file content, no event +touch ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}.txt +${CLICKHOUSE_CLIENT} --query "select * from file_log order by k;" + +${CLICKHOUSE_CLIENT} --query "detach table file_log;" +${CLICKHOUSE_CLIENT} --query "attach table file_log;" + +# should no records return +${CLICKHOUSE_CLIENT} --query "select * from file_log order by k;" + +rm -rf ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}.txt diff --git a/tests/queries/0_stateless/02023_storage_filelog.reference b/tests/queries/0_stateless/02023_storage_filelog.reference new file mode 100644 index 00000000000..c787d2047db --- /dev/null +++ b/tests/queries/0_stateless/02023_storage_filelog.reference @@ -0,0 +1,287 @@ +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +10 10 +11 11 +12 12 +13 13 +14 14 +15 15 +16 16 +17 17 +18 18 +19 19 +20 20 +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +10 10 +11 11 +12 12 +13 13 +14 14 +15 15 +16 16 +17 17 +18 18 +19 19 +20 20 +1 1 +1 1 +2 2 +2 2 +3 3 +3 3 +4 4 +4 4 +5 5 +5 5 +6 6 +6 6 +7 7 +7 7 +8 8 +8 8 +9 9 +9 9 +10 10 +10 10 +11 11 +11 11 +12 12 +12 12 +13 13 +13 13 +14 14 +14 14 +15 15 +15 15 +16 16 +16 16 +17 17 +17 17 +18 18 +18 18 +19 19 +19 19 +20 20 +20 20 +100 100 +100 100 +100 100 +101 101 +101 101 +101 101 +102 102 +102 102 +102 102 +103 103 +103 103 +103 103 +104 104 +104 104 +104 104 +105 105 +105 105 +105 105 +106 106 +106 106 +106 106 +107 107 +107 107 +107 107 +108 108 +108 108 +108 108 +109 109 +109 109 +109 109 +110 110 +110 110 +110 110 +111 111 +111 111 +111 111 +112 112 +112 112 +112 112 +113 113 +113 113 +113 113 +114 114 +114 114 +114 114 +115 115 +115 115 +115 115 +116 116 +116 116 +116 116 +117 117 +117 117 +117 117 +118 118 +118 118 +118 118 +119 119 +119 119 +119 119 +120 120 +120 120 +120 120 +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +10 10 +11 11 +12 12 +13 13 +14 14 +15 15 +16 16 +17 17 +18 18 +19 19 +20 20 +100 100 +101 101 +102 102 +103 103 +104 104 +105 105 +106 106 +107 107 +108 108 +109 109 +110 110 +111 111 +112 112 +113 113 +114 114 +115 115 +116 116 +117 117 +118 118 +119 119 +120 120 +150 150 +151 151 +152 152 +153 153 +154 154 +155 155 +156 156 +157 157 +158 158 +159 159 +160 160 +161 161 +162 162 +163 163 +164 164 +165 165 +166 166 +167 167 +168 168 +169 169 +170 170 +171 171 +172 172 +173 173 +174 174 +175 175 +176 176 +177 177 +178 178 +179 179 +180 180 +181 181 +182 182 +183 183 +184 184 +185 185 +186 186 +187 187 +188 188 +189 189 +190 190 +191 191 +192 192 +193 193 +194 194 +195 195 +196 196 +197 197 +198 198 +199 199 +200 200 +200 200 +201 201 +202 202 +203 203 +204 204 +205 205 +206 206 +207 207 +208 208 +209 209 +210 210 +211 211 +212 212 +213 213 +214 214 +215 215 +216 216 +217 217 +218 218 +219 219 +220 220 +221 221 +222 222 +223 223 +224 224 +225 225 +226 226 +227 227 +228 228 +229 229 +230 230 +231 231 +232 232 +233 233 +234 234 +235 235 +236 236 +237 237 +238 238 +239 239 +240 240 +241 241 +242 242 +243 243 +244 244 +245 245 +246 246 +247 247 +248 248 +249 249 +250 250 +OK diff --git a/tests/queries/0_stateless/02023_storage_filelog.sh b/tests/queries/0_stateless/02023_storage_filelog.sh new file mode 100755 index 00000000000..7480e378d8b --- /dev/null +++ b/tests/queries/0_stateless/02023_storage_filelog.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +set -eu + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +# Data preparation. +# Now we can get the user_files_path by use the table file function for trick. also we can get it by query as: +# "insert into function file('exist.txt', 'CSV', 'val1 char') values ('aaaa'); select _path from file('exist.txt', 'CSV', 'val1 char')" +user_files_path=$(clickhouse-client --query "select _path,_file from file('nonexist.txt', 'CSV', 'val1 char')" 2>&1 | grep Exception | awk '{gsub("/nonexist.txt","",$9); print $9}') + +mkdir -p ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/ + +rm -rf ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME:?}/* + +for i in {1..20} +do + echo $i, $i >> ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt +done + +${CLICKHOUSE_CLIENT} --query "drop table if exists file_log;" +${CLICKHOUSE_CLIENT} --query "create table file_log(k UInt8, v UInt8) engine=FileLog('${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/', 'CSV');" + +${CLICKHOUSE_CLIENT} --query "select * from file_log order by k;" + +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/b.txt + +${CLICKHOUSE_CLIENT} --query "select * from file_log order by k;" + +for i in {100..120} +do + echo $i, $i >> ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt +done + +# touch does not change file content, no event +touch ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt + +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/c.txt +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/d.txt +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/e.txt +mv ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/b.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/j.txt + +rm ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/d.txt + +${CLICKHOUSE_CLIENT} --query "select * from file_log order by k;" + +${CLICKHOUSE_CLIENT} --query "detach table file_log;" +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/e.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/f.txt +mv ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/e.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/g.txt +mv ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/c.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/h.txt +for i in {150..200} +do + echo $i, $i >> ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/h.txt +done +for i in {200..250} +do + echo $i, $i >> ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/i.txt +done +${CLICKHOUSE_CLIENT} --query "attach table file_log;" + +${CLICKHOUSE_CLIENT} --query "select * from file_log order by k;" + +${CLICKHOUSE_CLIENT} --query "detach table file_log;" +${CLICKHOUSE_CLIENT} --query "attach table file_log;" + +# should no records return +${CLICKHOUSE_CLIENT} --query "select * from file_log order by k;" + +truncate ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt --size 0 + +# exception happend +${CLICKHOUSE_CLIENT} --query "select * from file_log order by k;" 2>&1 | grep -q "Code: 33" && echo 'OK' || echo 'FAIL' + +${CLICKHOUSE_CLIENT} --query "drop table file_log;" + +rm -rf ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME:?} diff --git a/tests/queries/0_stateless/02024_storage_filelog_mv.reference b/tests/queries/0_stateless/02024_storage_filelog_mv.reference new file mode 100644 index 00000000000..2ebb200a43a --- /dev/null +++ b/tests/queries/0_stateless/02024_storage_filelog_mv.reference @@ -0,0 +1,121 @@ +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +10 10 +11 11 +12 12 +13 13 +14 14 +15 15 +16 16 +17 17 +18 18 +19 19 +20 20 +1 1 +1 1 +1 1 +1 1 +2 2 +2 2 +2 2 +2 2 +3 3 +3 3 +3 3 +3 3 +4 4 +4 4 +4 4 +4 4 +5 5 +5 5 +5 5 +5 5 +6 6 +6 6 +6 6 +6 6 +7 7 +7 7 +7 7 +7 7 +8 8 +8 8 +8 8 +8 8 +9 9 +9 9 +9 9 +9 9 +10 10 +10 10 +10 10 +10 10 +11 11 +11 11 +11 11 +11 11 +12 12 +12 12 +12 12 +12 12 +13 13 +13 13 +13 13 +13 13 +14 14 +14 14 +14 14 +14 14 +15 15 +15 15 +15 15 +15 15 +16 16 +16 16 +16 16 +16 16 +17 17 +17 17 +17 17 +17 17 +18 18 +18 18 +18 18 +18 18 +19 19 +19 19 +19 19 +19 19 +20 20 +20 20 +20 20 +20 20 +100 100 +101 101 +102 102 +103 103 +104 104 +105 105 +106 106 +107 107 +108 108 +109 109 +110 110 +111 111 +112 112 +113 113 +114 114 +115 115 +116 116 +117 117 +118 118 +119 119 +120 120 diff --git a/tests/queries/0_stateless/02024_storage_filelog_mv.sh b/tests/queries/0_stateless/02024_storage_filelog_mv.sh new file mode 100755 index 00000000000..67aa825ac67 --- /dev/null +++ b/tests/queries/0_stateless/02024_storage_filelog_mv.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash +# Tags: long + +set -eu + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +# Data preparation. +# Now we can get the user_files_path by use the table file function for trick. also we can get it by query as: +# "insert into function file('exist.txt', 'CSV', 'val1 char') values ('aaaa'); select _path from file('exist.txt', 'CSV', 'val1 char')" +user_files_path=$(clickhouse-client --query "select _path,_file from file('nonexist.txt', 'CSV', 'val1 char')" 2>&1 | grep Exception | awk '{gsub("/nonexist.txt","",$9); print $9}') + +mkdir -p ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/ +rm -rf ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME:?}/* + +for i in {1..20} +do + echo $i, $i >> ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt +done + +${CLICKHOUSE_CLIENT} --query "drop table if exists file_log;" +${CLICKHOUSE_CLIENT} --query "create table file_log(k UInt8, v UInt8) engine=FileLog('${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/', 'CSV');" + +${CLICKHOUSE_CLIENT} --query "drop table if exists mv;" +${CLICKHOUSE_CLIENT} --query "create Materialized View mv engine=MergeTree order by k as select * from file_log;" + +function count() +{ + COUNT=$(${CLICKHOUSE_CLIENT} --query "select count() from mv;") + echo $COUNT +} + +while true; do + [[ $(count) == 20 ]] && break + sleep 1 +done + +${CLICKHOUSE_CLIENT} --query "select * from mv order by k;" + +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/b.txt + +# touch does not change file content, no event +touch ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt + +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/c.txt +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/d.txt + +for i in {100..120} +do + echo $i, $i >> ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/d.txt +done + +while true; do + [[ $(count) == 101 ]] && break + sleep 1 +done + +${CLICKHOUSE_CLIENT} --query "select * from mv order by k;" + +${CLICKHOUSE_CLIENT} --query "drop table mv;" +${CLICKHOUSE_CLIENT} --query "drop table file_log;" + +rm -rf ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME:?} diff --git a/tests/queries/0_stateless/02025_storage_filelog_virtual_col.reference b/tests/queries/0_stateless/02025_storage_filelog_virtual_col.reference new file mode 100644 index 00000000000..aaa25ebb451 --- /dev/null +++ b/tests/queries/0_stateless/02025_storage_filelog_virtual_col.reference @@ -0,0 +1,144 @@ +1 1 a.txt 0 +2 2 a.txt 5 +3 3 a.txt 10 +4 4 a.txt 15 +5 5 a.txt 20 +6 6 a.txt 25 +7 7 a.txt 30 +8 8 a.txt 35 +9 9 a.txt 40 +10 10 a.txt 45 +11 11 a.txt 52 +12 12 a.txt 59 +13 13 a.txt 66 +14 14 a.txt 73 +15 15 a.txt 80 +16 16 a.txt 87 +17 17 a.txt 94 +18 18 a.txt 101 +19 19 a.txt 108 +20 20 a.txt 115 +1 1 b.txt 0 +2 2 b.txt 5 +3 3 b.txt 10 +4 4 b.txt 15 +5 5 b.txt 20 +6 6 b.txt 25 +7 7 b.txt 30 +8 8 b.txt 35 +9 9 b.txt 40 +10 10 b.txt 45 +11 11 b.txt 52 +12 12 b.txt 59 +13 13 b.txt 66 +14 14 b.txt 73 +15 15 b.txt 80 +16 16 b.txt 87 +17 17 b.txt 94 +18 18 b.txt 101 +19 19 b.txt 108 +20 20 b.txt 115 +100 100 a.txt 122 +101 101 a.txt 131 +102 102 a.txt 140 +103 103 a.txt 149 +104 104 a.txt 158 +105 105 a.txt 167 +106 106 a.txt 176 +107 107 a.txt 185 +108 108 a.txt 194 +109 109 a.txt 203 +110 110 a.txt 212 +111 111 a.txt 221 +112 112 a.txt 230 +113 113 a.txt 239 +114 114 a.txt 248 +115 115 a.txt 257 +116 116 a.txt 266 +117 117 a.txt 275 +118 118 a.txt 284 +119 119 a.txt 293 +120 120 a.txt 302 +1 1 c.txt 0 +2 2 c.txt 5 +3 3 c.txt 10 +4 4 c.txt 15 +5 5 c.txt 20 +6 6 c.txt 25 +7 7 c.txt 30 +8 8 c.txt 35 +9 9 c.txt 40 +10 10 c.txt 45 +11 11 c.txt 52 +12 12 c.txt 59 +13 13 c.txt 66 +14 14 c.txt 73 +15 15 c.txt 80 +16 16 c.txt 87 +17 17 c.txt 94 +18 18 c.txt 101 +19 19 c.txt 108 +20 20 c.txt 115 +100 100 c.txt 122 +101 101 c.txt 131 +102 102 c.txt 140 +103 103 c.txt 149 +104 104 c.txt 158 +105 105 c.txt 167 +106 106 c.txt 176 +107 107 c.txt 185 +108 108 c.txt 194 +109 109 c.txt 203 +110 110 c.txt 212 +111 111 c.txt 221 +112 112 c.txt 230 +113 113 c.txt 239 +114 114 c.txt 248 +115 115 c.txt 257 +116 116 c.txt 266 +117 117 c.txt 275 +118 118 c.txt 284 +119 119 c.txt 293 +120 120 c.txt 302 +1 1 e.txt 0 +2 2 e.txt 5 +3 3 e.txt 10 +4 4 e.txt 15 +5 5 e.txt 20 +6 6 e.txt 25 +7 7 e.txt 30 +8 8 e.txt 35 +9 9 e.txt 40 +10 10 e.txt 45 +11 11 e.txt 52 +12 12 e.txt 59 +13 13 e.txt 66 +14 14 e.txt 73 +15 15 e.txt 80 +16 16 e.txt 87 +17 17 e.txt 94 +18 18 e.txt 101 +19 19 e.txt 108 +20 20 e.txt 115 +100 100 e.txt 122 +101 101 e.txt 131 +102 102 e.txt 140 +103 103 e.txt 149 +104 104 e.txt 158 +105 105 e.txt 167 +106 106 e.txt 176 +107 107 e.txt 185 +108 108 e.txt 194 +109 109 e.txt 203 +110 110 e.txt 212 +111 111 e.txt 221 +112 112 e.txt 230 +113 113 e.txt 239 +114 114 e.txt 248 +115 115 e.txt 257 +116 116 e.txt 266 +117 117 e.txt 275 +118 118 e.txt 284 +119 119 e.txt 293 +120 120 e.txt 302 +OK diff --git a/tests/queries/0_stateless/02025_storage_filelog_virtual_col.sh b/tests/queries/0_stateless/02025_storage_filelog_virtual_col.sh new file mode 100755 index 00000000000..a475913b7d2 --- /dev/null +++ b/tests/queries/0_stateless/02025_storage_filelog_virtual_col.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +set -eu + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +# Data preparation. +# Now we can get the user_files_path by use the table file function for trick. also we can get it by query as: +# "insert into function file('exist.txt', 'CSV', 'val1 char') values ('aaaa'); select _path from file('exist.txt', 'CSV', 'val1 char')" +user_files_path=$(clickhouse-client --query "select _path,_file from file('nonexist.txt', 'CSV', 'val1 char')" 2>&1 | grep Exception | awk '{gsub("/nonexist.txt","",$9); print $9}') + +mkdir -p ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/ + +rm -rf ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME:?}/* + +for i in {1..20} +do + echo $i, $i >> ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt +done + +${CLICKHOUSE_CLIENT} --query "drop table if exists file_log;" +${CLICKHOUSE_CLIENT} --query "create table file_log(k UInt8, v UInt8) engine=FileLog('${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/', 'CSV');" + +${CLICKHOUSE_CLIENT} --query "select *, _filename, _offset from file_log order by _filename, _offset;" + +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/b.txt + +${CLICKHOUSE_CLIENT} --query "select *, _filename, _offset from file_log order by _filename, _offset;" + +for i in {100..120} +do + echo $i, $i >> ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt +done + +# touch does not change file content, no event +touch ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt + +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/c.txt +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/d.txt +cp ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/e.txt + +rm ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/d.txt + +${CLICKHOUSE_CLIENT} --query "select *, _filename, _offset from file_log order by _filename, _offset;" + +${CLICKHOUSE_CLIENT} --query "detach table file_log;" +${CLICKHOUSE_CLIENT} --query "attach table file_log;" + +# should no records return +${CLICKHOUSE_CLIENT} --query "select *, _filename, _offset from file_log order by _filename, _offset;" + +truncate ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/a.txt --size 0 + +# exception happend +${CLICKHOUSE_CLIENT} --query "select * from file_log order by k;" 2>&1 | grep -q "Code: 33" && echo 'OK' || echo 'FAIL' + +${CLICKHOUSE_CLIENT} --query "drop table file_log;" + +rm -rf ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME:?} diff --git a/tests/queries/0_stateless/02026_storage_filelog_largefile.reference b/tests/queries/0_stateless/02026_storage_filelog_largefile.reference new file mode 100644 index 00000000000..95240890a95 --- /dev/null +++ b/tests/queries/0_stateless/02026_storage_filelog_largefile.reference @@ -0,0 +1,3 @@ +2000000 +2000000 +2000000 diff --git a/tests/queries/0_stateless/02026_storage_filelog_largefile.sh b/tests/queries/0_stateless/02026_storage_filelog_largefile.sh new file mode 100755 index 00000000000..acd1c464334 --- /dev/null +++ b/tests/queries/0_stateless/02026_storage_filelog_largefile.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +# Tags: long, no-parallel + +set -eu + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +# Data preparation. +# Now we can get the user_files_path by use the table file function for trick. also we can get it by query as: +# "insert into function file('exist.txt', 'CSV', 'val1 char') values ('aaaa'); select _path from file('exist.txt', 'CSV', 'val1 char')" +user_files_path=$(clickhouse-client --query "select _path,_file from file('nonexist.txt', 'CSV', 'val1 char')" 2>&1 | grep Exception | awk '{gsub("/nonexist.txt","",$9); print $9}') + +mkdir -p ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/ + +rm -rf ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME:?}/* + +chmod 777 ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/ + +for i in {1..200} +do + ${CLICKHOUSE_CLIENT} --query "insert into function file('${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/test$i.csv', 'CSV', 'k UInt32, v UInt32') select number, number from numbers(10000);" +done + +${CLICKHOUSE_CLIENT} --query "drop table if exists file_log;" +${CLICKHOUSE_CLIENT} --query "create table file_log(k UInt32, v UInt32) engine=FileLog('${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/', 'CSV');" + +${CLICKHOUSE_CLIENT} --query "select count() from file_log " + +for i in {201..400} +do + ${CLICKHOUSE_CLIENT} --query "insert into function file('${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/test$i.csv', 'CSV', 'k UInt32, v UInt32') select number, number from numbers(10000);" +done + +${CLICKHOUSE_CLIENT} --query "select count() from file_log " + +for i in {401..600} +do + ${CLICKHOUSE_CLIENT} --query "insert into function file('${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME}/test$i.csv', 'CSV', 'k UInt32, v UInt32') select number, number from numbers(10000);" +done + +${CLICKHOUSE_CLIENT} --query "select count() from file_log " + +${CLICKHOUSE_CLIENT} --query "drop table file_log;" + +rm -rf ${user_files_path}/${CLICKHOUSE_TEST_UNIQUE_NAME:?} diff --git a/tests/queries/0_stateless/02027_ngrams.reference b/tests/queries/0_stateless/02027_ngrams.reference index 4ddc2a96c42..4c6afcdf02c 100644 --- a/tests/queries/0_stateless/02027_ngrams.reference +++ b/tests/queries/0_stateless/02027_ngrams.reference @@ -1,20 +1,20 @@ ['T','e','s','t'] ['Te','es','st'] ['Tes','est'] -['Tes','est'] +['Test'] [] ['T','e','s','t'] ['Te','es','st'] ['Tes','est'] -['Tes','est'] +['Test'] [] ['T','e','s','t'] ['Te','es','st'] ['Tes','est'] -['Tes','est'] +['Test'] [] ['T','e','s','t'] ['Te','es','st'] ['Tes','est'] -['Tes','est'] +['Test'] [] diff --git a/tests/queries/0_stateless/02027_ngrams.sql b/tests/queries/0_stateless/02027_ngrams.sql index b2ea9facf64..b9ce36272d8 100644 --- a/tests/queries/0_stateless/02027_ngrams.sql +++ b/tests/queries/0_stateless/02027_ngrams.sql @@ -1,23 +1,23 @@ SELECT ngrams('Test', 1); SELECT ngrams('Test', 2); SELECT ngrams('Test', 3); -SELECT ngrams('Test', 3); +SELECT ngrams('Test', 4); SELECT ngrams('Test', 5); SELECT ngrams(materialize('Test'), 1); SELECT ngrams(materialize('Test'), 2); SELECT ngrams(materialize('Test'), 3); -SELECT ngrams(materialize('Test'), 3); +SELECT ngrams(materialize('Test'), 4); SELECT ngrams(materialize('Test'), 5); SELECT ngrams(toFixedString('Test', 4), 1); SELECT ngrams(toFixedString('Test', 4), 2); SELECT ngrams(toFixedString('Test', 4), 3); -SELECT ngrams(toFixedString('Test', 4), 3); +SELECT ngrams(toFixedString('Test', 4), 4); SELECT ngrams(toFixedString('Test', 4), 5); SELECT ngrams(materialize(toFixedString('Test', 4)), 1); SELECT ngrams(materialize(toFixedString('Test', 4)), 2); SELECT ngrams(materialize(toFixedString('Test', 4)), 3); -SELECT ngrams(materialize(toFixedString('Test', 4)), 3); +SELECT ngrams(materialize(toFixedString('Test', 4)), 4); SELECT ngrams(materialize(toFixedString('Test', 4)), 5); diff --git a/tests/queries/0_stateless/02030_function_mapContainsKeyLike.reference b/tests/queries/0_stateless/02030_function_mapContainsKeyLike.reference new file mode 100644 index 00000000000..eb8bc83384e --- /dev/null +++ b/tests/queries/0_stateless/02030_function_mapContainsKeyLike.reference @@ -0,0 +1,6 @@ +1 {'1-K1':'1-V1','1-K2':'1-V2'} +1 {'1-K1':'1-V1','1-K2':'1-V2'} +2 {'2-K1':'2-V1','2-K2':'2-V2'} +4 {'4-K1':'4-V1','4-K2':'4-V2'} +5 {'5-K1':'5-V1','5-K2':'5-V2'} +6 {'6-K1':'6-V1','6-K2':'6-V2'} diff --git a/tests/queries/0_stateless/02030_function_mapContainsKeyLike.sql b/tests/queries/0_stateless/02030_function_mapContainsKeyLike.sql new file mode 100644 index 00000000000..7d9722b4c90 --- /dev/null +++ b/tests/queries/0_stateless/02030_function_mapContainsKeyLike.sql @@ -0,0 +1,12 @@ +DROP TABLE IF EXISTS map_containsKeyLike_test; + +CREATE TABLE map_containsKeyLike_test (id UInt32, map Map(String, String)) Engine=MergeTree() ORDER BY id settings index_granularity=2; + +INSERT INTO map_containsKeyLike_test VALUES (1, {'1-K1':'1-V1','1-K2':'1-V2'}),(2,{'2-K1':'2-V1','2-K2':'2-V2'}); +INSERT INTO map_containsKeyLike_test VALUES (3, {'3-K1':'3-V1','3-K2':'3-V2'}),(4, {'4-K1':'4-V1','4-K2':'4-V2'}); +INSERT INTO map_containsKeyLike_test VALUES (5, {'5-K1':'5-V1','5-K2':'5-V2'}),(6, {'6-K1':'6-V1','6-K2':'6-V2'}); + +SELECT id, map FROM map_containsKeyLike_test WHERE mapContainsKeyLike(map, '1-%') = 1; +SELECT id, map FROM map_containsKeyLike_test WHERE mapContainsKeyLike(map, '3-%') = 0 order by id; + +DROP TABLE map_containsKeyLike_test; diff --git a/tests/queries/0_stateless/02035_isNull_isNotNull_format.reference b/tests/queries/0_stateless/02035_isNull_isNotNull_format.reference index 74fc4a44b5f..4964bc68fff 100644 --- a/tests/queries/0_stateless/02035_isNull_isNotNull_format.reference +++ b/tests/queries/0_stateless/02035_isNull_isNotNull_format.reference @@ -7,3 +7,8 @@ explain syntax select isNull(null); SELECT NULL IS NULL explain syntax select isNotNull(null); SELECT NULL IS NOT NULL +explain syntax select isNotNull(1)+isNotNull(2) from remote('127.2', system.one); +SELECT (1 IS NOT NULL) + (2 IS NOT NULL) +FROM remote(\'127.2\', \'system.one\') +select isNotNull(1)+isNotNull(2) from remote('127.2', system.one); +2 diff --git a/tests/queries/0_stateless/02035_isNull_isNotNull_format.sql b/tests/queries/0_stateless/02035_isNull_isNotNull_format.sql index eff658445a8..d9138e12bca 100644 --- a/tests/queries/0_stateless/02035_isNull_isNotNull_format.sql +++ b/tests/queries/0_stateless/02035_isNull_isNotNull_format.sql @@ -3,3 +3,5 @@ explain syntax select null is null; explain syntax select null is not null; explain syntax select isNull(null); explain syntax select isNotNull(null); +explain syntax select isNotNull(1)+isNotNull(2) from remote('127.2', system.one); +select isNotNull(1)+isNotNull(2) from remote('127.2', system.one); diff --git a/tests/queries/0_stateless/02045_like_function.reference b/tests/queries/0_stateless/02045_like_function.reference new file mode 100644 index 00000000000..0633853274a --- /dev/null +++ b/tests/queries/0_stateless/02045_like_function.reference @@ -0,0 +1,2 @@ +1 +1 1 1 1 1 1 diff --git a/tests/queries/0_stateless/02045_like_function.sql b/tests/queries/0_stateless/02045_like_function.sql new file mode 100644 index 00000000000..d395e8d4579 --- /dev/null +++ b/tests/queries/0_stateless/02045_like_function.sql @@ -0,0 +1,10 @@ +SELECT 'r\\a1bbb' LIKE '%r\\\\a1%bbb%' AS res; + +WITH lower('\RealVNC\WinVNC4 /v password') as CommandLine +SELECT + CommandLine LIKE '%\\\\realvnc\\\\winvnc4%password%' as t1, + CommandLine LIKE '%\\\\realvnc\\\\winvnc4 %password%' as t2, + CommandLine LIKE '%\\\\realvnc\\\\winvnc4%password' as t3, + CommandLine LIKE '%\\\\realvnc\\\\winvnc4 %password' as t4, + CommandLine LIKE '%realvnc%winvnc4%password%' as t5, + CommandLine LIKE '%\\\\winvnc4%password%' as t6; diff --git a/tests/queries/0_stateless/02046_remote_table_function_named_collections.reference b/tests/queries/0_stateless/02046_remote_table_function_named_collections.reference new file mode 100644 index 00000000000..de78180725a --- /dev/null +++ b/tests/queries/0_stateless/02046_remote_table_function_named_collections.reference @@ -0,0 +1,2 @@ +4 +8 diff --git a/tests/queries/0_stateless/02046_remote_table_function_named_collections.sql b/tests/queries/0_stateless/02046_remote_table_function_named_collections.sql new file mode 100644 index 00000000000..18aa6faf357 --- /dev/null +++ b/tests/queries/0_stateless/02046_remote_table_function_named_collections.sql @@ -0,0 +1,11 @@ +-- Tags: shard, no-fasttest + +DROP TABLE IF EXISTS remote_test; +CREATE TABLE remote_test(a1 UInt8) ENGINE=Memory; +INSERT INTO FUNCTION remote(remote1, database=currentDatabase()) VALUES(1); +INSERT INTO FUNCTION remote(remote1, database=currentDatabase()) VALUES(2); +INSERT INTO FUNCTION remote(remote1, database=currentDatabase()) VALUES(3); +INSERT INTO FUNCTION remote(remote1, database=currentDatabase()) VALUES(4); +SELECT count() FROM remote(remote1, database=currentDatabase()); +SELECT count() FROM remote(remote2, database=merge(currentDatabase(), '^remote_test')); +DROP TABLE remote_test; diff --git a/tests/queries/0_stateless/02047_log_family_complex_structs_data_file_dumps.reference b/tests/queries/0_stateless/02047_log_family_complex_structs_data_file_dumps.reference new file mode 100644 index 00000000000..312809828db --- /dev/null +++ b/tests/queries/0_stateless/02047_log_family_complex_structs_data_file_dumps.reference @@ -0,0 +1,322 @@ +Log: +empty: +1 element: +[[3,5,7]] ['a1','a2'] [4.1,4.2] +__marks.mrk size=96 +00000000 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +* +00000060 +sizes.json size=226 +00000000 7b 22 63 6c 69 63 6b 68 6f 75 73 65 22 3a 7b 22 |{"clickhouse":{"| +00000010 5f 5f 6d 61 72 6b 73 25 32 45 6d 72 6b 22 3a 7b |__marks%2Emrk":{| +00000020 22 73 69 7a 65 22 3a 22 39 36 22 7d 2c 22 78 25 |"size":"96"},"x%| +00000030 32 45 62 69 6e 22 3a 7b 22 73 69 7a 65 22 3a 22 |2Ebin":{"size":"| +00000040 33 38 22 7d 2c 22 78 25 32 45 73 69 7a 65 30 25 |38"},"x%2Esize0%| +00000050 32 45 62 69 6e 22 3a 7b 22 73 69 7a 65 22 3a 22 |2Ebin":{"size":"| +00000060 33 34 22 7d 2c 22 78 25 32 45 73 69 7a 65 31 25 |34"},"x%2Esize1%| +00000070 32 45 62 69 6e 22 3a 7b 22 73 69 7a 65 22 3a 22 |2Ebin":{"size":"| +00000080 33 34 22 7d 2c 22 79 25 32 35 32 45 77 25 32 45 |34"},"y%252Ew%2E| +00000090 62 69 6e 22 3a 7b 22 73 69 7a 65 22 3a 22 33 34 |bin":{"size":"34| +000000a0 22 7d 2c 22 79 25 32 35 32 45 7a 25 32 45 62 69 |"},"y%252Ez%2Ebi| +000000b0 6e 22 3a 7b 22 73 69 7a 65 22 3a 22 33 32 22 7d |n":{"size":"32"}| +000000c0 2c 22 79 25 32 45 73 69 7a 65 30 25 32 45 62 69 |,"y%2Esize0%2Ebi| +000000d0 6e 22 3a 7b 22 73 69 7a 65 22 3a 22 33 34 22 7d |n":{"size":"34"}| +000000e0 7d 7d |}}| +000000e2 +x.bin size=38 +00000000 91 54 4b 94 65 b3 4b ec 03 da 1a 40 e6 25 75 67 |.TK.e.K....@.%ug| +00000010 82 16 00 00 00 0c 00 00 00 c0 03 00 00 00 05 00 |................| +00000020 00 00 07 00 00 00 |......| +00000026 +x.size0.bin size=34 +00000000 48 54 99 92 92 db 6a 74 c5 da 23 ed 7e b0 4b 3e |HT....jt..#.~.K>| +00000010 82 12 00 00 00 08 00 00 00 80 01 00 00 00 00 00 |................| +00000020 00 00 |..| +00000022 +x.size1.bin size=34 +00000000 4f 48 a7 2c 99 02 fb 38 ec 48 b5 b1 ed 95 03 a5 |OH.,...8.H......| +00000010 82 12 00 00 00 08 00 00 00 80 03 00 00 00 00 00 |................| +00000020 00 00 |..| +00000022 +y%2Ew.bin size=34 +00000000 a8 87 9a f0 64 ca 12 e6 ca ac 68 b9 81 be ec c8 |....d.....h.....| +00000010 82 12 00 00 00 08 00 00 00 80 33 33 83 40 66 66 |..........33.@ff| +00000020 86 40 |.@| +00000022 +y%2Ez.bin size=32 +00000000 84 ac b0 60 39 d3 a5 77 24 cc 33 07 db 27 f1 b2 |...`9..w$.3..'..| +00000010 82 10 00 00 00 06 00 00 00 60 02 61 31 02 61 32 |.........`.a1.a2| +00000020 +y.size0.bin size=34 +00000000 5e 56 3c 70 ce d8 15 fe 0a 1d ef 3b 4a 1c 99 4f |^V| +00000010 82 12 00 00 00 08 00 00 00 80 01 00 00 00 00 00 |................| +00000020 00 00 1a 9d 14 3f 60 b2 ab 75 b2 00 12 3a 64 37 |.....?`..u...:d7| +00000030 86 5b 82 16 00 00 00 10 00 00 00 13 00 01 00 80 |.[..............| +00000040 01 00 00 00 00 00 00 00 |........| +00000048 +x.size1.bin size=68 +00000000 4f 48 a7 2c 99 02 fb 38 ec 48 b5 b1 ed 95 03 a5 |OH.,...8.H......| +00000010 82 12 00 00 00 08 00 00 00 80 03 00 00 00 00 00 |................| +00000020 00 00 48 54 99 92 92 db 6a 74 c5 da 23 ed 7e b0 |..HT....jt..#.~.| +00000030 4b 3e 82 12 00 00 00 08 00 00 00 80 01 00 00 00 |K>..............| +00000040 00 00 00 00 |....| +00000044 +y%2Ew.bin size=64 +00000000 a8 87 9a f0 64 ca 12 e6 ca ac 68 b9 81 be ec c8 |....d.....h.....| +00000010 82 12 00 00 00 08 00 00 00 80 33 33 83 40 66 66 |..........33.@ff| +00000020 86 40 4d 8f 35 86 dc 39 5f 7c 7e 38 f1 9b 5e d7 |.@M.5..9_|~8..^.| +00000030 ba 6e 82 0e 00 00 00 04 00 00 00 40 9a 99 89 40 |.n.........@...@| +00000040 +y%2Ez.bin size=61 +00000000 84 ac b0 60 39 d3 a5 77 24 cc 33 07 db 27 f1 b2 |...`9..w$.3..'..| +00000010 82 10 00 00 00 06 00 00 00 60 02 61 31 02 61 32 |.........`.a1.a2| +00000020 09 39 35 e0 9b 95 cb c9 15 41 27 69 d9 d4 cc 89 |.95......A'i....| +00000030 82 0d 00 00 00 03 00 00 00 30 02 61 33 |.........0.a3| +0000003d +y.size0.bin size=72 +00000000 5e 56 3c 70 ce d8 15 fe 0a 1d ef 3b 4a 1c 99 4f |^V| +00000010 82 12 00 00 00 08 00 00 00 80 01 00 00 00 00 00 |................| +00000020 00 00 |..| +00000022 +x.size1.bin size=34 +00000000 4f 48 a7 2c 99 02 fb 38 ec 48 b5 b1 ed 95 03 a5 |OH.,...8.H......| +00000010 82 12 00 00 00 08 00 00 00 80 03 00 00 00 00 00 |................| +00000020 00 00 |..| +00000022 +y%2Ew.bin size=34 +00000000 a8 87 9a f0 64 ca 12 e6 ca ac 68 b9 81 be ec c8 |....d.....h.....| +00000010 82 12 00 00 00 08 00 00 00 80 33 33 83 40 66 66 |..........33.@ff| +00000020 86 40 |.@| +00000022 +y%2Ez.bin size=32 +00000000 84 ac b0 60 39 d3 a5 77 24 cc 33 07 db 27 f1 b2 |...`9..w$.3..'..| +00000010 82 10 00 00 00 06 00 00 00 60 02 61 31 02 61 32 |.........`.a1.a2| +00000020 +y.size0.bin size=34 +00000000 5e 56 3c 70 ce d8 15 fe 0a 1d ef 3b 4a 1c 99 4f |^V| +00000010 82 12 00 00 00 08 00 00 00 80 01 00 00 00 00 00 |................| +00000020 00 00 1a 9d 14 3f 60 b2 ab 75 b2 00 12 3a 64 37 |.....?`..u...:d7| +00000030 86 5b 82 16 00 00 00 10 00 00 00 13 00 01 00 80 |.[..............| +00000040 01 00 00 00 00 00 00 00 |........| +00000048 +x.size1.bin size=68 +00000000 4f 48 a7 2c 99 02 fb 38 ec 48 b5 b1 ed 95 03 a5 |OH.,...8.H......| +00000010 82 12 00 00 00 08 00 00 00 80 03 00 00 00 00 00 |................| +00000020 00 00 48 54 99 92 92 db 6a 74 c5 da 23 ed 7e b0 |..HT....jt..#.~.| +00000030 4b 3e 82 12 00 00 00 08 00 00 00 80 01 00 00 00 |K>..............| +00000040 00 00 00 00 |....| +00000044 +y%2Ew.bin size=64 +00000000 a8 87 9a f0 64 ca 12 e6 ca ac 68 b9 81 be ec c8 |....d.....h.....| +00000010 82 12 00 00 00 08 00 00 00 80 33 33 83 40 66 66 |..........33.@ff| +00000020 86 40 4d 8f 35 86 dc 39 5f 7c 7e 38 f1 9b 5e d7 |.@M.5..9_|~8..^.| +00000030 ba 6e 82 0e 00 00 00 04 00 00 00 40 9a 99 89 40 |.n.........@...@| +00000040 +y%2Ez.bin size=61 +00000000 84 ac b0 60 39 d3 a5 77 24 cc 33 07 db 27 f1 b2 |...`9..w$.3..'..| +00000010 82 10 00 00 00 06 00 00 00 60 02 61 31 02 61 32 |.........`.a1.a2| +00000020 09 39 35 e0 9b 95 cb c9 15 41 27 69 d9 d4 cc 89 |.95......A'i....| +00000030 82 0d 00 00 00 03 00 00 00 30 02 61 33 |.........0.a3| +0000003d +y.size0.bin size=72 +00000000 5e 56 3c 70 ce d8 15 fe 0a 1d ef 3b 4a 1c 99 4f |^V/dev/null + + echo "1 element:" + $CLICKHOUSE_CLIENT --query="INSERT INTO tbl VALUES ([[3,5,7]], ['a1', 'a2'], [4.1, 4.2])" + $CLICKHOUSE_CLIENT --query="SELECT * FROM tbl ORDER BY x" + for name in $(find "$data_dir"* -print0 | xargs -0 -n 1 basename | sort); do + file_path=$data_dir$name + file_size=$(stat -c%s "$file_path") + echo "$name size=$file_size" + hexdump -C $file_path + done + + echo "3 elements:" + $CLICKHOUSE_CLIENT --query="INSERT INTO tbl VALUES ([], [], []), ([[10]], ['a3'], [4.3])" + $CLICKHOUSE_CLIENT --query="SELECT * FROM tbl ORDER BY x" + for name in $(find "$data_dir"* -print0 | xargs -0 -n 1 basename | sort); do + file_path=$data_dir$name + file_size=$(stat -c%s "$file_path") + echo "$name size=$file_size" + hexdump -C $file_path + done + + echo +done diff --git a/tests/queries/0_stateless/02047_log_family_data_file_dumps.reference b/tests/queries/0_stateless/02047_log_family_data_file_dumps.reference new file mode 100644 index 00000000000..bdb91497eb0 --- /dev/null +++ b/tests/queries/0_stateless/02047_log_family_data_file_dumps.reference @@ -0,0 +1,160 @@ +Log: +empty: +1 element: +1 a +__marks.mrk size=32 +00000000 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +* +00000020 +sizes.json size=94 +00000000 7b 22 63 6c 69 63 6b 68 6f 75 73 65 22 3a 7b 22 |{"clickhouse":{"| +00000010 5f 5f 6d 61 72 6b 73 25 32 45 6d 72 6b 22 3a 7b |__marks%2Emrk":{| +00000020 22 73 69 7a 65 22 3a 22 33 32 22 7d 2c 22 78 25 |"size":"32"},"x%| +00000030 32 45 62 69 6e 22 3a 7b 22 73 69 7a 65 22 3a 22 |2Ebin":{"size":"| +00000040 33 30 22 7d 2c 22 79 25 32 45 62 69 6e 22 3a 7b |30"},"y%2Ebin":{| +00000050 22 73 69 7a 65 22 3a 22 32 38 22 7d 7d 7d |"size":"28"}}}| +0000005e +x.bin size=30 +00000000 39 9f 28 b3 25 cf c7 13 95 53 21 42 ef ac ef ec |9.(.%....S!B....| +00000010 82 0e 00 00 00 04 00 00 00 40 01 00 00 00 |.........@....| +0000001e +y.bin size=28 +00000000 7d 24 2d b7 e2 da 37 8a db fd 99 47 48 4b 9e c1 |}$-...7....GHK..| +00000010 82 0c 00 00 00 02 00 00 00 20 01 61 |......... .a| +0000001c +3 elements: +1 a +22 bc +333 def +__marks.mrk size=64 +00000000 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +* +00000020 03 00 00 00 00 00 00 00 1e 00 00 00 00 00 00 00 |................| +00000030 03 00 00 00 00 00 00 00 1c 00 00 00 00 00 00 00 |................| +00000040 +sizes.json size=94 +00000000 7b 22 63 6c 69 63 6b 68 6f 75 73 65 22 3a 7b 22 |{"clickhouse":{"| +00000010 5f 5f 6d 61 72 6b 73 25 32 45 6d 72 6b 22 3a 7b |__marks%2Emrk":{| +00000020 22 73 69 7a 65 22 3a 22 36 34 22 7d 2c 22 78 25 |"size":"64"},"x%| +00000030 32 45 62 69 6e 22 3a 7b 22 73 69 7a 65 22 3a 22 |2Ebin":{"size":"| +00000040 36 34 22 7d 2c 22 79 25 32 45 62 69 6e 22 3a 7b |64"},"y%2Ebin":{| +00000050 22 73 69 7a 65 22 3a 22 36 31 22 7d 7d 7d |"size":"61"}}}| +0000005e +x.bin size=64 +00000000 39 9f 28 b3 25 cf c7 13 95 53 21 42 ef ac ef ec |9.(.%....S!B....| +00000010 82 0e 00 00 00 04 00 00 00 40 01 00 00 00 f3 5b |.........@.....[| +00000020 0d 60 9c a7 ec c2 76 d7 e7 c3 a5 1e d9 22 82 12 |.`....v......"..| +00000030 00 00 00 08 00 00 00 80 16 00 00 00 4d 01 00 00 |............M...| +00000040 +y.bin size=61 +00000000 7d 24 2d b7 e2 da 37 8a db fd 99 47 48 4b 9e c1 |}$-...7....GHK..| +00000010 82 0c 00 00 00 02 00 00 00 20 01 61 4a 41 a1 bf |......... .aJA..| +00000020 6e 15 00 05 d3 41 ed 9b 02 46 62 1b 82 11 00 00 |n....A...Fb.....| +00000030 00 07 00 00 00 70 02 62 63 03 64 65 66 |.....p.bc.def| +0000003d + +TinyLog: +empty: +1 element: +1 a +sizes.json size=64 +00000000 7b 22 63 6c 69 63 6b 68 6f 75 73 65 22 3a 7b 22 |{"clickhouse":{"| +00000010 78 25 32 45 62 69 6e 22 3a 7b 22 73 69 7a 65 22 |x%2Ebin":{"size"| +00000020 3a 22 33 30 22 7d 2c 22 79 25 32 45 62 69 6e 22 |:"30"},"y%2Ebin"| +00000030 3a 7b 22 73 69 7a 65 22 3a 22 32 38 22 7d 7d 7d |:{"size":"28"}}}| +00000040 +x.bin size=30 +00000000 39 9f 28 b3 25 cf c7 13 95 53 21 42 ef ac ef ec |9.(.%....S!B....| +00000010 82 0e 00 00 00 04 00 00 00 40 01 00 00 00 |.........@....| +0000001e +y.bin size=28 +00000000 7d 24 2d b7 e2 da 37 8a db fd 99 47 48 4b 9e c1 |}$-...7....GHK..| +00000010 82 0c 00 00 00 02 00 00 00 20 01 61 |......... .a| +0000001c +3 elements: +1 a +22 bc +333 def +sizes.json size=64 +00000000 7b 22 63 6c 69 63 6b 68 6f 75 73 65 22 3a 7b 22 |{"clickhouse":{"| +00000010 78 25 32 45 62 69 6e 22 3a 7b 22 73 69 7a 65 22 |x%2Ebin":{"size"| +00000020 3a 22 36 34 22 7d 2c 22 79 25 32 45 62 69 6e 22 |:"64"},"y%2Ebin"| +00000030 3a 7b 22 73 69 7a 65 22 3a 22 36 31 22 7d 7d 7d |:{"size":"61"}}}| +00000040 +x.bin size=64 +00000000 39 9f 28 b3 25 cf c7 13 95 53 21 42 ef ac ef ec |9.(.%....S!B....| +00000010 82 0e 00 00 00 04 00 00 00 40 01 00 00 00 f3 5b |.........@.....[| +00000020 0d 60 9c a7 ec c2 76 d7 e7 c3 a5 1e d9 22 82 12 |.`....v......"..| +00000030 00 00 00 08 00 00 00 80 16 00 00 00 4d 01 00 00 |............M...| +00000040 +y.bin size=61 +00000000 7d 24 2d b7 e2 da 37 8a db fd 99 47 48 4b 9e c1 |}$-...7....GHK..| +00000010 82 0c 00 00 00 02 00 00 00 20 01 61 4a 41 a1 bf |......... .aJA..| +00000020 6e 15 00 05 d3 41 ed 9b 02 46 62 1b 82 11 00 00 |n....A...Fb.....| +00000030 00 07 00 00 00 70 02 62 63 03 64 65 66 |.....p.bc.def| +0000003d + +StripeLog: +empty: +1 element: +1 a +data.bin size=104 +00000000 0c d3 31 cc 9f f3 94 97 56 a2 ee 76 f7 4c 35 0f |..1.....V..v.L5.| +00000010 82 0c 00 00 00 02 00 00 00 20 02 01 d3 b5 6c 48 |......... ....lH| +00000020 05 89 3b 01 ad 3a 99 3a 40 10 f0 fa 82 17 00 00 |..;..:.:@.......| +00000030 00 0d 00 00 00 d0 01 78 06 55 49 6e 74 33 32 01 |.......x.UInt32.| +00000040 00 00 00 07 12 7f b8 90 bb cb c1 5b 93 d1 61 7e |...........[..a~| +00000050 27 86 3e 82 15 00 00 00 0b 00 00 00 b0 01 79 06 |'.>...........y.| +00000060 53 74 72 69 6e 67 01 61 |String.a| +00000068 +index.mrk size=60 +00000000 e0 18 ce 21 0a cc 9f ac d8 51 d4 27 00 4d 7e 75 |...!.....Q.'.M~u| +00000010 82 2c 00 00 00 34 00 00 00 da 02 01 01 78 06 55 |.,...4.......x.U| +00000020 49 6e 74 33 32 1c 00 01 00 a6 01 79 06 53 74 72 |Int32......y.Str| +00000030 69 6e 67 43 18 00 50 00 00 00 00 00 |ingC..P.....| +0000003c +sizes.json size=72 +00000000 7b 22 63 6c 69 63 6b 68 6f 75 73 65 22 3a 7b 22 |{"clickhouse":{"| +00000010 64 61 74 61 25 32 45 62 69 6e 22 3a 7b 22 73 69 |data%2Ebin":{"si| +00000020 7a 65 22 3a 22 31 30 34 22 7d 2c 22 69 6e 64 65 |ze":"104"},"inde| +00000030 78 25 32 45 6d 72 6b 22 3a 7b 22 73 69 7a 65 22 |x%2Emrk":{"size"| +00000040 3a 22 36 30 22 7d 7d 7d |:"60"}}}| +00000048 +3 elements: +1 a +22 bc +333 def +data.bin size=219 +00000000 0c d3 31 cc 9f f3 94 97 56 a2 ee 76 f7 4c 35 0f |..1.....V..v.L5.| +00000010 82 0c 00 00 00 02 00 00 00 20 02 01 d3 b5 6c 48 |......... ....lH| +00000020 05 89 3b 01 ad 3a 99 3a 40 10 f0 fa 82 17 00 00 |..;..:.:@.......| +00000030 00 0d 00 00 00 d0 01 78 06 55 49 6e 74 33 32 01 |.......x.UInt32.| +00000040 00 00 00 07 12 7f b8 90 bb cb c1 5b 93 d1 61 7e |...........[..a~| +00000050 27 86 3e 82 15 00 00 00 0b 00 00 00 b0 01 79 06 |'.>...........y.| +00000060 53 74 72 69 6e 67 01 61 55 84 52 9f 32 10 4d 9e |String.aU.R.2.M.| +00000070 eb 58 e8 2a 3a 8c e8 df 82 0c 00 00 00 02 00 00 |.X.*:...........| +00000080 00 20 02 02 5f c2 08 eb 23 e5 a3 7a e2 22 e7 fc |. .._...#..z."..| +00000090 23 57 79 fd 82 1c 00 00 00 11 00 00 00 f0 02 01 |#Wy.............| +000000a0 78 06 55 49 6e 74 33 32 16 00 00 00 4d 01 00 00 |x.UInt32....M...| +000000b0 87 a2 af 21 6c 93 79 77 88 8c 5f ae e9 41 df 5a |...!l.yw.._..A.Z| +000000c0 82 1b 00 00 00 10 00 00 00 f0 01 01 79 06 53 74 |............y.St| +000000d0 72 69 6e 67 02 62 63 03 64 65 66 |ring.bc.def| +000000db +index.mrk size=120 +00000000 e0 18 ce 21 0a cc 9f ac d8 51 d4 27 00 4d 7e 75 |...!.....Q.'.M~u| +00000010 82 2c 00 00 00 34 00 00 00 da 02 01 01 78 06 55 |.,...4.......x.U| +00000020 49 6e 74 33 32 1c 00 01 00 a6 01 79 06 53 74 72 |Int32......y.Str| +00000030 69 6e 67 43 18 00 50 00 00 00 00 00 82 27 58 46 |ingC..P......'XF| +00000040 ad 45 bc 2f 66 02 78 84 e1 42 dd 03 82 2c 00 00 |.E./f.x..B...,..| +00000050 00 34 00 00 00 da 02 02 01 78 06 55 49 6e 74 33 |.4.......x.UInt3| +00000060 32 84 00 01 00 a6 01 79 06 53 74 72 69 6e 67 b0 |2......y.String.| +00000070 18 00 50 00 00 00 00 00 |..P.....| +00000078 +sizes.json size=73 +00000000 7b 22 63 6c 69 63 6b 68 6f 75 73 65 22 3a 7b 22 |{"clickhouse":{"| +00000010 64 61 74 61 25 32 45 62 69 6e 22 3a 7b 22 73 69 |data%2Ebin":{"si| +00000020 7a 65 22 3a 22 32 31 39 22 7d 2c 22 69 6e 64 65 |ze":"219"},"inde| +00000030 78 25 32 45 6d 72 6b 22 3a 7b 22 73 69 7a 65 22 |x%2Emrk":{"size"| +00000040 3a 22 31 32 30 22 7d 7d 7d |:"120"}}}| +00000049 + diff --git a/tests/queries/0_stateless/02047_log_family_data_file_dumps.sh b/tests/queries/0_stateless/02047_log_family_data_file_dumps.sh new file mode 100755 index 00000000000..1edfd200fab --- /dev/null +++ b/tests/queries/0_stateless/02047_log_family_data_file_dumps.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# Tags: no-fasttest + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +declare -a engines=("Log" "TinyLog" "StripeLog") +for engine in "${engines[@]}" +do + echo "$engine:" + + $CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS tbl" + $CLICKHOUSE_CLIENT --query="CREATE TABLE tbl(x UInt32, y String) ENGINE=$engine" + data_dir=$($CLICKHOUSE_CLIENT --query="SELECT data_paths[1] FROM system.tables WHERE name='tbl' AND database=currentDatabase()") + + echo "empty:" + find "$data_dir"* 2>/dev/null + + echo "1 element:" + $CLICKHOUSE_CLIENT --query="INSERT INTO tbl VALUES (1, 'a')" + $CLICKHOUSE_CLIENT --query="SELECT * FROM tbl ORDER BY x" + for name in $(find "$data_dir"* -print0 | xargs -0 -n 1 basename | sort); do + file_path=$data_dir$name + file_size=$(stat -c%s "$file_path") + echo "$name size=$file_size" + hexdump -C $file_path + done + + echo "3 elements:" + $CLICKHOUSE_CLIENT --query="INSERT INTO tbl VALUES (22, 'bc'), (333, 'def')" + $CLICKHOUSE_CLIENT --query="SELECT * FROM tbl ORDER BY x" + for name in $(find "$data_dir"* -print0 | xargs -0 -n 1 basename | sort); do + file_path=$data_dir$name + file_size=$(stat -c%s "$file_path") + echo "$name size=$file_size" + hexdump -C $file_path + done + + echo +done diff --git a/tests/queries/0_stateless/02047_log_family_data_file_sizes.reference b/tests/queries/0_stateless/02047_log_family_data_file_sizes.reference new file mode 100644 index 00000000000..b802026a0dd --- /dev/null +++ b/tests/queries/0_stateless/02047_log_family_data_file_sizes.reference @@ -0,0 +1,47 @@ +Log: +empty: +1 element: +1 a +__marks.mrk +sizes.json +x.bin +y.bin +3 elements: +1 a +22 bc +333 def +__marks.mrk greater size +sizes.json +x.bin greater size +y.bin greater size + +TinyLog: +empty: +1 element: +1 a +sizes.json +x.bin +y.bin +3 elements: +1 a +22 bc +333 def +sizes.json +x.bin greater size +y.bin greater size + +StripeLog: +empty: +1 element: +1 a +data.bin +index.mrk +sizes.json +3 elements: +1 a +22 bc +333 def +data.bin greater size +index.mrk greater size +sizes.json + diff --git a/tests/queries/0_stateless/02047_log_family_data_file_sizes.sh b/tests/queries/0_stateless/02047_log_family_data_file_sizes.sh new file mode 100755 index 00000000000..e7c1cb5d71e --- /dev/null +++ b/tests/queries/0_stateless/02047_log_family_data_file_sizes.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +declare -a engines=("Log" "TinyLog" "StripeLog") +for engine in "${engines[@]}" +do + echo "$engine:" + + $CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS tbl" + $CLICKHOUSE_CLIENT --query="CREATE TABLE tbl(x UInt32, y String) ENGINE=$engine" + data_dir=$($CLICKHOUSE_CLIENT --query="SELECT data_paths[1] FROM system.tables WHERE name='tbl' AND database=currentDatabase()") + + echo "empty:" + find "$data_dir"* 2>/dev/null + + echo "1 element:" + $CLICKHOUSE_CLIENT --query="INSERT INTO tbl VALUES (1, 'a')" + $CLICKHOUSE_CLIENT --query="SELECT * FROM tbl ORDER BY x" + declare -A file_sizes + for name in $(find "$data_dir"* -print0 | xargs -0 -n 1 basename | sort); do + file_path=$data_dir$name + file_size=$(stat -c%s "$file_path") + file_sizes[$name]=$file_size + echo $name + done + + echo "3 elements:" + $CLICKHOUSE_CLIENT --query="INSERT INTO tbl VALUES (22, 'bc'), (333, 'def')" + $CLICKHOUSE_CLIENT --query="SELECT * FROM tbl ORDER BY x" + for name in $(find "$data_dir"* -print0 | xargs -0 -n 1 basename | sort); do + file_path=$data_dir$name + file_size=$(stat -c%s "$file_path") + old_file_size=${file_sizes[$name]} + if [ "$name" == "sizes.json" ]; then + cmp="" + elif (( file_size > old_file_size )); then + cmp="greater size" + else + cmp="unexpected size ($file_size, old_size=$old_file_size)" + fi + echo $name $cmp + done + + echo +done diff --git a/tests/queries/0_stateless/02050_clickhouse_client_local_exception.reference b/tests/queries/0_stateless/02050_clickhouse_client_local_exception.reference new file mode 100644 index 00000000000..d86bac9de59 --- /dev/null +++ b/tests/queries/0_stateless/02050_clickhouse_client_local_exception.reference @@ -0,0 +1 @@ +OK diff --git a/tests/queries/0_stateless/02050_clickhouse_client_local_exception.sh b/tests/queries/0_stateless/02050_clickhouse_client_local_exception.sh new file mode 100755 index 00000000000..d66cc7048c4 --- /dev/null +++ b/tests/queries/0_stateless/02050_clickhouse_client_local_exception.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +touch test_exception +$CLICKHOUSE_LOCAL --query="SELECT 1 INTO OUTFILE 'test_exception' FORMAT Native" 2>&1 | grep -q "Code: 76. DB::ErrnoException:" && echo 'OK' || echo 'FAIL' ||: diff --git a/tests/queries/0_stateless/02097_json_strings_deserialization.reference b/tests/queries/0_stateless/02097_json_strings_deserialization.reference new file mode 100644 index 00000000000..8d7ffe54606 --- /dev/null +++ b/tests/queries/0_stateless/02097_json_strings_deserialization.reference @@ -0,0 +1,4 @@ +test\n\t\0\n test\n\t\0\n +test\n\t\0\n test\n\t\0\n +test\n\t\0\n test\n\t\0\n +test\n\t\0\n test\n\t\0\n diff --git a/tests/queries/0_stateless/02097_json_strings_deserialization.sh b/tests/queries/0_stateless/02097_json_strings_deserialization.sh new file mode 100755 index 00000000000..ae9e1ea7645 --- /dev/null +++ b/tests/queries/0_stateless/02097_json_strings_deserialization.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +$CLICKHOUSE_CLIENT -q "drop table if exists test_02097" +$CLICKHOUSE_CLIENT -q "create table test_02097 (s String, f FixedString(8)) engine=Memory()" +echo -e "('test\n\t\0\n', 'test\n\t\0\n')" | $CLICKHOUSE_CLIENT -q "insert into test_02097 format Values" +$CLICKHOUSE_CLIENT -q "select * from test_02097 format JSONStringsEachRow" | $CLICKHOUSE_CLIENT -q "insert into test_02097 format JSONStringsEachRow" +$CLICKHOUSE_CLIENT -q "select * from test_02097 format JSONCompactStringsEachRow" | $CLICKHOUSE_CLIENT -q "insert into test_02097 format JSONCompactStringsEachRow" +$CLICKHOUSE_CLIENT -q "select * from test_02097" +$CLICKHOUSE_CLIENT -q "drop table test_02097" + diff --git a/tests/queries/0_stateless/02097_remove_sample_by.reference b/tests/queries/0_stateless/02097_remove_sample_by.reference new file mode 100644 index 00000000000..0747bbd5d1f --- /dev/null +++ b/tests/queries/0_stateless/02097_remove_sample_by.reference @@ -0,0 +1,3 @@ +CREATE TABLE default.t_remove_sample_by\n(\n `id` UInt64\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 8192 +CREATE TABLE default.t_remove_sample_by\n(\n `id` UInt64\n)\nENGINE = ReplicatedMergeTree(\'/clickhouse/default/t_remove_sample_by\', \'1\')\nORDER BY id\nSETTINGS index_granularity = 8192 +CREATE TABLE default.t_remove_sample_by\n(\n `id` String\n)\nENGINE = MergeTree\nORDER BY id\nSETTINGS index_granularity = 8192 diff --git a/tests/queries/0_stateless/02097_remove_sample_by.sql b/tests/queries/0_stateless/02097_remove_sample_by.sql new file mode 100644 index 00000000000..89fbfe0c4c5 --- /dev/null +++ b/tests/queries/0_stateless/02097_remove_sample_by.sql @@ -0,0 +1,44 @@ +-- Tags: zookeeper + +DROP TABLE IF EXISTS t_remove_sample_by; + +CREATE TABLE t_remove_sample_by(id UInt64) ENGINE = MergeTree ORDER BY id SAMPLE BY id; + +ALTER TABLE t_remove_sample_by REMOVE SAMPLE BY; +SHOW CREATE TABLE t_remove_sample_by; + +ALTER TABLE t_remove_sample_by REMOVE SAMPLE BY; -- { serverError 36 } +SELECT * FROM t_remove_sample_by SAMPLE 1 / 10; -- { serverError 141 } + +DROP TABLE t_remove_sample_by; + +CREATE TABLE t_remove_sample_by(id UInt64) +ENGINE = ReplicatedMergeTree('/clickhouse/{database}/t_remove_sample_by', '1') +ORDER BY id SAMPLE BY id; + +ALTER TABLE t_remove_sample_by REMOVE SAMPLE BY; +SHOW CREATE TABLE t_remove_sample_by; + +DROP TABLE t_remove_sample_by; + +CREATE TABLE t_remove_sample_by(id UInt64) ENGINE = Memory; +ALTER TABLE t_remove_sample_by REMOVE SAMPLE BY; -- { serverError 36 } + +DROP TABLE t_remove_sample_by; + +CREATE TABLE t_remove_sample_by(id String) +ENGINE = MergeTree ORDER BY id SAMPLE BY id +SETTINGS check_sample_column_is_correct = 0; + +ALTER TABLE t_remove_sample_by RESET SETTING check_sample_column_is_correct; + +DETACH TABLE t_remove_sample_by; +ATTACH TABLE t_remove_sample_by; + +INSERT INTO t_remove_sample_by VALUES (1); +SELECT * FROM t_remove_sample_by SAMPLE 1 / 10; -- { serverError 59 } + +ALTER TABLE t_remove_sample_by REMOVE SAMPLE BY; +SHOW CREATE TABLE t_remove_sample_by; + +DROP TABLE t_remove_sample_by; diff --git a/tests/queries/0_stateless/02098_with_types_use_header.reference b/tests/queries/0_stateless/02098_with_types_use_header.reference new file mode 100644 index 00000000000..c1d70452d1d --- /dev/null +++ b/tests/queries/0_stateless/02098_with_types_use_header.reference @@ -0,0 +1,16 @@ +TSVWithNamesAndTypes +OK +OK +OK +CSVWithNamesAndTypes +OK +OK +OK +JSONCompactEachRowWithNamesAndTypes +OK +OK +OK +JSONCompactStringsEachRowWithNamesAndTypes +OK +OK +OK diff --git a/tests/queries/0_stateless/02098_with_types_use_header.sh b/tests/queries/0_stateless/02098_with_types_use_header.sh new file mode 100755 index 00000000000..846696d18c0 --- /dev/null +++ b/tests/queries/0_stateless/02098_with_types_use_header.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + + +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test_02098" +$CLICKHOUSE_CLIENT -q "CREATE TABLE test_02098 (x UInt32, y String, z Date) engine=Memory()" + +echo "TSVWithNamesAndTypes" +echo -e "x\ty\tz\nString\tDate\tUInt32\ntext\t2020-01-01\t1" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT TSVWithNamesAndTypes" 2>&1 | grep -F -q "INCORRECT_DATA" && echo 'OK' || echo 'FAIL' +echo -e "y\tz\tx\nString\tDate\tUInt32\ntext\t2020-01-01\t1" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT TSVWithNamesAndTypes" && echo 'OK' || echo 'FAIL' +echo -e "x\tz\ty\nUInt32\tString\tDate\n1\ttext\t2020-01-01" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT TSVWithNamesAndTypes" 2>&1 | grep -F -q "INCORRECT_DATA" && echo 'OK' || echo 'FAIL' + + +echo "CSVWithNamesAndTypes" +echo -e "'x','y','z'\n'String','Date','UInt32'\n'text','2020-01-01',1" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT CSVWithNamesAndTypes" 2>&1 | grep -F -q "INCORRECT_DATA" && echo 'OK' || echo 'FAIL' +echo -e "'y','z','x'\n'String','Date','UInt32'\n'text','2020-01-01',1" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT CSVWithNamesAndTypes" && echo 'OK' || echo 'FAIL' +echo -e "'x','z','y'\n'UInt32','String',Date'\n1,'text','2020-01-01'" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT CSVWithNamesAndTypes" 2>&1 | grep -F -q "INCORRECT_DATA" && echo 'OK' || echo 'FAIL' + + +echo "JSONCompactEachRowWithNamesAndTypes" +echo -e '["x","y","z"]\n["String","Date","UInt32"]\n["text","2020-01-01",1]' | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT JSONCompactEachRowWithNamesAndTypes" 2>&1 | grep -F -q "INCORRECT_DATA" && echo 'OK' || echo 'FAIL' +echo -e '["y","z","x"]\n["String","Date","UInt32"]\n["text","2020-01-01",1]' | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT JSONCompactEachRowWithNamesAndTypes" && echo 'OK' || echo 'FAIL' +echo -e '["x","z","y"]\n["UInt32", "String", "Date"]\n[1, "text","2020-01-01"]' | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT JSONCompactEachRowWithNamesAndTypes" 2>&1 | grep -F -q "INCORRECT_DATA" && echo 'OK' || echo 'FAIL' + +echo "JSONCompactStringsEachRowWithNamesAndTypes" +echo -e '["x","y","z"]\n["String","Date","UInt32"]\n["text","2020-01-01","1"]' | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT JSONCompactStringsEachRowWithNamesAndTypes" 2>&1 | grep -F -q "INCORRECT_DATA" && echo 'OK' || echo 'FAIL' +echo -e '["y","z","x"]\n["String","Date","UInt32"]\n["text","2020-01-01","1"]' | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT JSONCompactStringsEachRowWithNamesAndTypes" && echo 'OK' || echo 'FAIL' +echo -e '["x","z","y"]\n["UInt32", "String", "Date"]\n["1", "text","2020-01-01"]' | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02098 FORMAT JSONCompactStringsEachRowWithNamesAndTypes" 2>&1 | grep -F -q "INCORRECT_DATA" && echo 'OK' || echo 'FAIL' + +$CLICKHOUSE_CLIENT -q "DROP TABLE test_02098" diff --git a/tests/queries/0_stateless/02099_tsv_raw_format.reference b/tests/queries/0_stateless/02099_tsv_raw_format.reference new file mode 100644 index 00000000000..de46cf8dff7 --- /dev/null +++ b/tests/queries/0_stateless/02099_tsv_raw_format.reference @@ -0,0 +1,113 @@ +TSVRaw +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +TSVRawWithNames +number string date +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +TSVRawWithNamesAndTypes +number string date +UInt64 String Date +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +TabSeparatedRaw +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +TabSeparatedRawWithNames +number string date +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +TabSeparatedRawWithNamesAndTypes +number string date +UInt64 String Date +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 0 1970-01-01 +1 1 1970-01-02 +2 2 1970-01-03 +0 +\N +2 +\N +0 +\N +2 +\N +0 +\N +2 +\N +0 +\N +2 +\N +0 +\N +2 +\N +0 +\N +2 +\N +0 +\N +2 +\N +0 +\N +2 +\N +0 +\N +2 +\N +0 +\N +2 +\N +0 +\N +2 +\N +nSome text +b1cad4eb4be08a40387c9de70d02fcc2 - +b1cad4eb4be08a40387c9de70d02fcc2 - diff --git a/tests/queries/0_stateless/02099_tsv_raw_format.sh b/tests/queries/0_stateless/02099_tsv_raw_format.sh new file mode 100755 index 00000000000..16b695e4037 --- /dev/null +++ b/tests/queries/0_stateless/02099_tsv_raw_format.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test_02099" +$CLICKHOUSE_CLIENT -q "CREATE TABLE test_02099 (number UInt64, string String, date Date) ENGINE=Memory()" + +FORMATS=('TSVRaw' 'TSVRawWithNames' 'TSVRawWithNamesAndTypes' 'TabSeparatedRaw' 'TabSeparatedRawWithNames' 'TabSeparatedRawWithNamesAndTypes') + +for format in "${FORMATS[@]}" +do + echo $format + $CLICKHOUSE_CLIENT -q "INSERT INTO test_02099 SELECT number, toString(number), toDate(number) FROM numbers(3)" + $CLICKHOUSE_CLIENT -q "SELECT * FROM test_02099 FORMAT $format" + + $CLICKHOUSE_CLIENT -q "SELECT * FROM test_02099 FORMAT $format" | $CLICKHOUSE_CLIENT -q "INSERT INTO test_02099 FORMAT $format" + $CLICKHOUSE_CLIENT -q "SELECT * FROM test_02099" + + $CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02099" +done + +$CLICKHOUSE_CLIENT -q "DROP TABLE test_02099" + +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test_nullable_02099" +$CLICKHOUSE_CLIENT -q "CREATE TABLE test_nullable_02099 ENGINE=Memory() AS SELECT number % 2 ? NULL : number from numbers(4)"; + +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_nullable_02099 FORMAT TSVRaw" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_nullable_02099 FORMAT TSVRaw" | $CLICKHOUSE_CLIENT -q "INSERT INTO test_nullable_02099 FORMAT TSVRaw" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_nullable_02099" + + +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_nullable_02099 FORMAT TSV" | $CLICKHOUSE_CLIENT -q "INSERT INTO test_nullable_02099 FORMAT TSVRaw" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_nullable_02099 FORMAT TSVRaw" | $CLICKHOUSE_CLIENT -q "INSERT INTO test_nullable_02099 FORMAT TSV" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_nullable_02099" + +$CLICKHOUSE_CLIENT -q "DROP TABLE test_nullable_02099" + + +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test_nullable_string_02099" +$CLICKHOUSE_CLIENT -q "CREATE TABLE test_nullable_string_02099 (s Nullable(String)) ENGINE=Memory()"; + +echo 'nSome text' | $CLICKHOUSE_CLIENT -q "INSERT INTO test_nullable_string_02099 FORMAT TSVRaw" + +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_nullable_string_02099" +$CLICKHOUSE_CLIENT -q "DROP TABLE test_nullable_string_02099" + + +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test_parallel_parsing_02099" +$CLICKHOUSE_CLIENT -q "CREATE TABLE test_parallel_parsing_02099 (x UInt64, a Array(UInt64), s String) ENGINE=Memory()"; +$CLICKHOUSE_CLIENT -q "SELECT number AS x, range(number % 50) AS a, toString(a) AS s FROM numbers(1000000) FORMAT TSVRaw" | $CLICKHOUSE_CLIENT --input_format_parallel_parsing=0 -q "INSERT INTO test_parallel_parsing_02099 FORMAT TSVRaw" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_parallel_parsing_02099 ORDER BY x" | md5sum + +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_parallel_parsing_02099" + +$CLICKHOUSE_CLIENT -q "SELECT number AS x, range(number % 50) AS a, toString(a) AS s FROM numbers(1000000) FORMAT TSVRaw" | $CLICKHOUSE_CLIENT --input_format_parallel_parsing=1 -q "INSERT INTO test_parallel_parsing_02099 FORMAT TSVRaw" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_parallel_parsing_02099 ORDER BY x" | md5sum + +$CLICKHOUSE_CLIENT -q "DROP TABLE test_parallel_parsing_02099" + diff --git a/tests/queries/0_stateless/02100_alter_scalar_circular_deadlock.reference b/tests/queries/0_stateless/02100_alter_scalar_circular_deadlock.reference new file mode 100644 index 00000000000..98fb6a68656 --- /dev/null +++ b/tests/queries/0_stateless/02100_alter_scalar_circular_deadlock.reference @@ -0,0 +1,4 @@ +1 +1 +1 +1 diff --git a/tests/queries/0_stateless/02100_alter_scalar_circular_deadlock.sql b/tests/queries/0_stateless/02100_alter_scalar_circular_deadlock.sql new file mode 100644 index 00000000000..32b757f54a3 --- /dev/null +++ b/tests/queries/0_stateless/02100_alter_scalar_circular_deadlock.sql @@ -0,0 +1,34 @@ +DROP TABLE IF EXISTS foo; + +CREATE TABLE foo (ts DateTime, x UInt64) +ENGINE = MergeTree PARTITION BY toYYYYMMDD(ts) +ORDER BY (ts); + +INSERT INTO foo (ts, x) SELECT toDateTime('2020-01-01 00:05:00'), number from system.numbers_mt LIMIT 10; + +SET mutations_sync = 1; + +ALTER TABLE foo UPDATE x = 1 WHERE x = (SELECT x from foo WHERE x = 4); + +SELECT sum(x) == 42 FROM foo; + +ALTER TABLE foo UPDATE x = 1 WHERE x IN (SELECT x FROM foo WHERE x != 0); + +SELECT sum(x) == 9 FROM foo; + +DROP TABLE IF EXISTS bar; + +CREATE TABLE bar (ts DateTime, x UInt64) +ENGINE = Memory; + +INSERT INTO bar (ts, x) SELECT toDateTime('2020-01-01 00:05:00'), number from system.numbers_mt LIMIT 10; + +SET mutations_sync = 1; + +ALTER TABLE bar UPDATE x = 1 WHERE x = (SELECT x from bar WHERE x = 4); + +SELECT sum(x) == 42 FROM bar; + +ALTER TABLE bar UPDATE x = 1 WHERE x IN (SELECT x FROM bar WHERE x != 0); + +SELECT sum(x) == 9 FROM bar; diff --git a/tests/queries/0_stateless/02100_limit_push_down_bug.reference b/tests/queries/0_stateless/02100_limit_push_down_bug.reference new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/queries/0_stateless/02100_limit_push_down_bug.sql b/tests/queries/0_stateless/02100_limit_push_down_bug.sql new file mode 100644 index 00000000000..2ba9d2b8818 --- /dev/null +++ b/tests/queries/0_stateless/02100_limit_push_down_bug.sql @@ -0,0 +1,21 @@ +drop table if exists tbl_repr; + +CREATE TABLE tbl_repr( +ts DateTime, +x String) +ENGINE=MergeTree ORDER BY ts; + + +SELECT * +FROM +( + SELECT + x, + length(x) + FROM tbl_repr + WHERE ts > now() + LIMIT 1 +) +WHERE x != ''; + +drop table if exists tbl_repr; diff --git a/tests/queries/0_stateless/02100_low_cardinality_nullable_null_default.reference b/tests/queries/0_stateless/02100_low_cardinality_nullable_null_default.reference new file mode 100644 index 00000000000..12b4d6ad854 --- /dev/null +++ b/tests/queries/0_stateless/02100_low_cardinality_nullable_null_default.reference @@ -0,0 +1,14 @@ +CSV +\N +TSV +\N +TSVRaw +\N +TSKV +\N +JSONCompactEachRow +\N +JSONEachRow +\N +Values +\N diff --git a/tests/queries/0_stateless/02100_low_cardinality_nullable_null_default.sh b/tests/queries/0_stateless/02100_low_cardinality_nullable_null_default.sh new file mode 100755 index 00000000000..2fd1f130b7a --- /dev/null +++ b/tests/queries/0_stateless/02100_low_cardinality_nullable_null_default.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test_02100" +$CLICKHOUSE_CLIENT -q "CREATE TABLE test_02100 (x LowCardinality(Nullable(String)) DEFAULT 'default') ENGINE=Memory()" + +FORMATS=('CSV' 'TSV' 'TSVRaw' 'TSKV' 'JSONCompactEachRow' 'JSONEachRow' 'Values') + +for format in "${FORMATS[@]}" +do + echo $format + $CLICKHOUSE_CLIENT -q "SELECT NULL as x FORMAT $format" | $CLICKHOUSE_CLIENT -q "INSERT INTO test_02100 FORMAT $format" + + $CLICKHOUSE_CLIENT -q "SELECT * FROM test_02100" + + $CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02100" +done + +$CLICKHOUSE_CLIENT -q "DROP TABLE test_02100" + diff --git a/tests/queries/0_stateless/02100_now64_types_bug.reference b/tests/queries/0_stateless/02100_now64_types_bug.reference new file mode 100644 index 00000000000..ae136939b64 --- /dev/null +++ b/tests/queries/0_stateless/02100_now64_types_bug.reference @@ -0,0 +1,3 @@ +2 +1 +0 diff --git a/tests/queries/0_stateless/02100_now64_types_bug.sql b/tests/queries/0_stateless/02100_now64_types_bug.sql new file mode 100644 index 00000000000..ef91b19bb08 --- /dev/null +++ b/tests/queries/0_stateless/02100_now64_types_bug.sql @@ -0,0 +1,8 @@ +SELECT x +FROM +( + SELECT if((number % NULL) = -2147483648, NULL, if(toInt64(toInt64(now64(if((number % NULL) = -2147483648, NULL, if(toInt64(now64(toInt64(9223372036854775807, now64(plus(NULL, NULL))), plus(NULL, NULL))) = (number % NULL), nan, toFloat64(number))), toInt64(9223372036854775807, toInt64(9223372036854775807, now64(plus(NULL, NULL))), now64(plus(NULL, NULL))), plus(NULL, NULL))), now64(toInt64(9223372036854775807, toInt64(0, now64(plus(NULL, NULL))), now64(plus(NULL, NULL))), plus(NULL, NULL))) = (number % NULL), nan, toFloat64(number))) AS x + FROM system.numbers + LIMIT 3 +) +ORDER BY x DESC NULLS LAST diff --git a/tests/queries/0_stateless/02101_empty_as_default_and_omitted_fields.reference b/tests/queries/0_stateless/02101_empty_as_default_and_omitted_fields.reference new file mode 100644 index 00000000000..61444c7a238 --- /dev/null +++ b/tests/queries/0_stateless/02101_empty_as_default_and_omitted_fields.reference @@ -0,0 +1,16 @@ +TSV +1 42 +2 0 +3 42 +4 0 +CSV +1 42 +2 0 +3 42 +4 0 +JSONEachRow +1 42 +2 0 +JSONCompactEachRow +1 42 +2 0 diff --git a/tests/queries/0_stateless/02101_empty_as_default_and_omitted_fields.sh b/tests/queries/0_stateless/02101_empty_as_default_and_omitted_fields.sh new file mode 100755 index 00000000000..4f03c72cac3 --- /dev/null +++ b/tests/queries/0_stateless/02101_empty_as_default_and_omitted_fields.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test_02101" +$CLICKHOUSE_CLIENT -q "CREATE TABLE test_02101 (x UInt64, y UInt64 DEFAULT 42) ENGINE=Memory()" + +echo 'TSV' +echo -e 'x\ty\n1\t' | $CLICKHOUSE_CLIENT --input_format_tsv_empty_as_default=1 --input_format_defaults_for_omitted_fields=1 -q "INSERT INTO test_02101 FORMAT TSVWithNames" +echo -e 'x\ty\n2\t' | $CLICKHOUSE_CLIENT --input_format_tsv_empty_as_default=1 --input_format_defaults_for_omitted_fields=0 -q "INSERT INTO test_02101 FORMAT TSVWithNames" +echo -e 'x\tz\n3\t123' | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=1 --input_format_skip_unknown_fields=1 -q "INSERT INTO test_02101 FORMAT TSVWithNames" +echo -e 'x\tz\n4\t123' | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=0 --input_format_skip_unknown_fields=1 -q "INSERT INTO test_02101 FORMAT TSVWithNames" + +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02101 ORDER BY x" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02101" + +echo 'CSV' +echo -e '"x","y"\n1,' | $CLICKHOUSE_CLIENT --input_format_csv_empty_as_default=1 --input_format_defaults_for_omitted_fields=1 -q "INSERT INTO test_02101 FORMAT CSVWithNames" +echo -e '"x","y"\n2,' | $CLICKHOUSE_CLIENT --input_format_csv_empty_as_default=1 --input_format_defaults_for_omitted_fields=0 -q "INSERT INTO test_02101 FORMAT CSVWithNames" +echo -e '"x","z"\n3,123' | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=1 --input_format_skip_unknown_fields=1 -q "INSERT INTO test_02101 FORMAT CSVWithNames" +echo -e '"x","z"\n4,123' | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=0 --input_format_skip_unknown_fields=1 -q "INSERT INTO test_02101 FORMAT CSVWithNames" + +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02101 ORDER BY x" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02101" + +echo 'JSONEachRow' +echo -e '{"x" : 1, "z" : 123}' | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=1 --input_format_skip_unknown_fields=1 -q "INSERT INTO test_02101 FORMAT JSONEachRow" +echo -e '{"x" : 2, "z" : 123}' | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=0 --input_format_skip_unknown_fields=1 -q "INSERT INTO test_02101 FORMAT JSONEachRow" + +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02101 ORDER BY x" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02101" + +echo 'JSONCompactEachRow' +echo -e '["x", "z"], [1, 123]' | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=1 --input_format_skip_unknown_fields=1 -q "INSERT INTO test_02101 FORMAT JSONCompactEachRowWithNames" +echo -e '["x", "z"], [2, 123]' | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=0 --input_format_skip_unknown_fields=1 -q "INSERT INTO test_02101 FORMAT JSONCompactEachRowWithNames" + +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02101 ORDER BY x" +$CLICKHOUSE_CLIENT -q "DROP TABLE test_02101" + diff --git a/tests/queries/0_stateless/02102_row_binary_with_names_and_types.reference b/tests/queries/0_stateless/02102_row_binary_with_names_and_types.reference new file mode 100644 index 00000000000..9011f20cd6a --- /dev/null +++ b/tests/queries/0_stateless/02102_row_binary_with_names_and_types.reference @@ -0,0 +1,14 @@ +1 text 2020-01-01 +1 text 2020-01-01 +1 text 2020-01-01 +1 text 2020-01-01 +1 text 2020-01-01 +1 text 2020-01-01 +1 default 1970-01-01 +1 default 1970-01-01 +1 1970-01-01 +1 1970-01-01 +OK +1 default 1970-01-01 +OK +OK diff --git a/tests/queries/0_stateless/02102_row_binary_with_names_and_types.sh b/tests/queries/0_stateless/02102_row_binary_with_names_and_types.sh new file mode 100755 index 00000000000..e7307ad3ad5 --- /dev/null +++ b/tests/queries/0_stateless/02102_row_binary_with_names_and_types.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + + +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test_02102" +$CLICKHOUSE_CLIENT -q "CREATE TABLE test_02102 (x UInt32, y String DEFAULT 'default', z Date) engine=Memory()" + + + +$CLICKHOUSE_CLIENT -q "SELECT toUInt32(1) AS x, 'text' AS y, toDate('2020-01-01') AS z FORMAT RowBinaryWithNames" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNames" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02102" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02102" + +$CLICKHOUSE_CLIENT -q "SELECT toUInt32(1) AS x, 'text' AS y, toDate('2020-01-01') AS z FORMAT RowBinaryWithNamesAndTypes" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNamesAndTypes" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02102" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02102" + + +$CLICKHOUSE_CLIENT -q "SELECT toUInt32(1) AS x, 'text' AS y, toDate('2020-01-01') AS z FORMAT RowBinaryWithNames" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=0 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNames" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02102" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02102" + +$CLICKHOUSE_CLIENT -q "SELECT toUInt32(1) AS x, 'text' AS y, toDate('2020-01-01') AS z FORMAT RowBinaryWithNamesAndTypes" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=0 --input_format_with_types_use_header=0 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNamesAndTypes" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02102" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02102" + + +$CLICKHOUSE_CLIENT -q "SELECT 'text' AS y, toDate('2020-01-01') AS z, toUInt32(1) AS x FORMAT RowBinaryWithNames" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNames" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02102" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02102" + +$CLICKHOUSE_CLIENT -q "SELECT 'text' AS y, toDate('2020-01-01') AS z, toUInt32(1) AS x FORMAT RowBinaryWithNamesAndTypes" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNamesAndTypes" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02102" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02102" + + +$CLICKHOUSE_CLIENT -q "SELECT toUInt32(1) AS x FORMAT RowBinaryWithNames" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNames" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02102" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02102" + +$CLICKHOUSE_CLIENT -q "SELECT toUInt32(1) AS x FORMAT RowBinaryWithNamesAndTypes" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNamesAndTypes" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02102" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02102" + + +$CLICKHOUSE_CLIENT -q "SELECT toUInt32(1) AS x FORMAT RowBinaryWithNames" | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=0 --input_format_with_names_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNames" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02102" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02102" + +$CLICKHOUSE_CLIENT -q "SELECT toUInt32(1) AS x FORMAT RowBinaryWithNamesAndTypes" | $CLICKHOUSE_CLIENT --input_format_defaults_for_omitted_fields=0 --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNamesAndTypes" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02102" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02102" + + +$CLICKHOUSE_CLIENT -q "SELECT toUInt32(1) AS x, [[1, 2, 3], [4, 5], []] as a FORMAT RowBinaryWithNames" | $CLICKHOUSE_CLIENT --input_format_skip_unknown_fields=1 --input_format_with_names_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNames" 2>&1 | grep -F -q "CANNOT_SKIP_UNKNOWN_FIELD" && echo 'OK' || echo 'FAIL' + + +$CLICKHOUSE_CLIENT -q "SELECT toUInt32(1) AS x, [[1, 2, 3], [4, 5], []] as a FORMAT RowBinaryWithNamesAndTypes" | $CLICKHOUSE_CLIENT --input_format_skip_unknown_fields=1 --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNamesAndTypes" +$CLICKHOUSE_CLIENT -q "SELECT * FROM test_02102" +$CLICKHOUSE_CLIENT -q "TRUNCATE TABLE test_02102" + + +$CLICKHOUSE_CLIENT -q "SELECT 'text' AS x, toDate('2020-01-01') AS y, toUInt32(1) AS z FORMAT RowBinaryWithNamesAndTypes" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNamesAndTypes" 2>&1 | grep -F -q "INCORRECT_DATA" && echo 'OK' || echo 'FAIL' + +$CLICKHOUSE_CLIENT -q "SELECT toUInt32(1) AS x, 'text' as z, toDate('2020-01-01') AS y FORMAT RowBinaryWithNamesAndTypes" | $CLICKHOUSE_CLIENT --input_format_with_names_use_header=1 --input_format_with_types_use_header=1 -q "INSERT INTO test_02102 FORMAT RowBinaryWithNamesAndTypes" 2>&1 | grep -F -q "INCORRECT_DATA" && echo 'OK' || echo 'FAIL' + +$CLICKHOUSE_CLIENT -q "DROP TABLE test_02102" + diff --git a/tests/queries/0_stateless/02103_sql_user_defined_functions_composition.reference b/tests/queries/0_stateless/02103_sql_user_defined_functions_composition.reference new file mode 100644 index 00000000000..51993f072d5 --- /dev/null +++ b/tests/queries/0_stateless/02103_sql_user_defined_functions_composition.reference @@ -0,0 +1,2 @@ +2 +2 diff --git a/tests/queries/0_stateless/02103_sql_user_defined_functions_composition.sql b/tests/queries/0_stateless/02103_sql_user_defined_functions_composition.sql new file mode 100644 index 00000000000..3d34413b9d3 --- /dev/null +++ b/tests/queries/0_stateless/02103_sql_user_defined_functions_composition.sql @@ -0,0 +1,12 @@ +-- Tags: no-parallel + +CREATE FUNCTION 02103_test_function AS x -> x + 1; +CREATE FUNCTION 02103_test_function_with_nested_function_empty_args AS () -> 02103_test_function(1); +CREATE FUNCTION 02103_test_function_with_nested_function_arg AS (x) -> 02103_test_function(x); + +SELECT 02103_test_function_with_nested_function_empty_args(); +SELECT 02103_test_function_with_nested_function_arg(1); + +DROP FUNCTION 02103_test_function_with_nested_function_empty_args; +DROP FUNCTION 02103_test_function_with_nested_function_arg; +DROP FUNCTION 02103_test_function; diff --git a/tests/queries/0_stateless/02103_with_names_and_types_parallel_parsing.reference b/tests/queries/0_stateless/02103_with_names_and_types_parallel_parsing.reference new file mode 100644 index 00000000000..962b233e5e7 --- /dev/null +++ b/tests/queries/0_stateless/02103_with_names_and_types_parallel_parsing.reference @@ -0,0 +1,80 @@ +0 [0,1,2,3,4,5,6,7,8,9] 0 +1 [0,1,2,3,4,5,6,7,8,9,10] 1 +2 [0,1,2,3,4,5,6,7,8,9,10,11] 2 +3 [0,1,2,3,4,5,6,7,8,9,10,11,12] 3 +4 [0,1,2,3,4,5,6,7,8,9,10,11,12,13] 4 +5 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] 5 +6 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 6 +7 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 7 +8 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] 8 +9 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 9 +0 [0,1,2,3,4,5,6,7,8,9] 0 +1 [0,1,2,3,4,5,6,7,8,9,10] 1 +2 [0,1,2,3,4,5,6,7,8,9,10,11] 2 +3 [0,1,2,3,4,5,6,7,8,9,10,11,12] 3 +4 [0,1,2,3,4,5,6,7,8,9,10,11,12,13] 4 +5 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] 5 +6 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 6 +7 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 7 +8 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] 8 +9 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 9 +0 [0,1,2,3,4,5,6,7,8,9] 0 +1 [0,1,2,3,4,5,6,7,8,9,10] 1 +2 [0,1,2,3,4,5,6,7,8,9,10,11] 2 +3 [0,1,2,3,4,5,6,7,8,9,10,11,12] 3 +4 [0,1,2,3,4,5,6,7,8,9,10,11,12,13] 4 +5 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] 5 +6 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 6 +7 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 7 +8 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] 8 +9 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 9 +0 [0,1,2,3,4,5,6,7,8,9] 0 +1 [0,1,2,3,4,5,6,7,8,9,10] 1 +2 [0,1,2,3,4,5,6,7,8,9,10,11] 2 +3 [0,1,2,3,4,5,6,7,8,9,10,11,12] 3 +4 [0,1,2,3,4,5,6,7,8,9,10,11,12,13] 4 +5 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] 5 +6 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 6 +7 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 7 +8 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] 8 +9 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 9 +0 [0,1,2,3,4,5,6,7,8,9] 0 +1 [0,1,2,3,4,5,6,7,8,9,10] 1 +2 [0,1,2,3,4,5,6,7,8,9,10,11] 2 +3 [0,1,2,3,4,5,6,7,8,9,10,11,12] 3 +4 [0,1,2,3,4,5,6,7,8,9,10,11,12,13] 4 +5 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] 5 +6 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 6 +7 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 7 +8 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] 8 +9 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 9 +0 [0,1,2,3,4,5,6,7,8,9] 0 +1 [0,1,2,3,4,5,6,7,8,9,10] 1 +2 [0,1,2,3,4,5,6,7,8,9,10,11] 2 +3 [0,1,2,3,4,5,6,7,8,9,10,11,12] 3 +4 [0,1,2,3,4,5,6,7,8,9,10,11,12,13] 4 +5 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] 5 +6 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 6 +7 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 7 +8 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] 8 +9 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 9 +0 [0,1,2,3,4,5,6,7,8,9] 0 +1 [0,1,2,3,4,5,6,7,8,9,10] 1 +2 [0,1,2,3,4,5,6,7,8,9,10,11] 2 +3 [0,1,2,3,4,5,6,7,8,9,10,11,12] 3 +4 [0,1,2,3,4,5,6,7,8,9,10,11,12,13] 4 +5 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] 5 +6 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 6 +7 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 7 +8 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] 8 +9 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 9 +0 [0,1,2,3,4,5,6,7,8,9] 0 +1 [0,1,2,3,4,5,6,7,8,9,10] 1 +2 [0,1,2,3,4,5,6,7,8,9,10,11] 2 +3 [0,1,2,3,4,5,6,7,8,9,10,11,12] 3 +4 [0,1,2,3,4,5,6,7,8,9,10,11,12,13] 4 +5 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] 5 +6 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 6 +7 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 7 +8 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] 8 +9 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] 9 diff --git a/tests/queries/0_stateless/02103_with_names_and_types_parallel_parsing.sh b/tests/queries/0_stateless/02103_with_names_and_types_parallel_parsing.sh new file mode 100755 index 00000000000..487282099e2 --- /dev/null +++ b/tests/queries/0_stateless/02103_with_names_and_types_parallel_parsing.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# Tags: no-parallel + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +USER_FILES_PATH=$(clickhouse-client --query "select _path,_file from file('nonexist.txt', 'CSV', 'val1 char')" 2>&1 | grep Exception | awk '{gsub("/nonexist.txt","",$9); print $9}') + +DATA_FILE=$USER_FILES_PATH/test_02103.data + +FORMATS=('TSVWithNames' 'TSVWithNamesAndTypes' 'TSVRawWithNames' 'TSVRawWithNamesAndTypes' 'CSVWithNames' 'CSVWithNamesAndTypes' 'JSONCompactEachRowWithNames' 'JSONCompactEachRowWithNamesAndTypes') + +for format in "${FORMATS[@]}" +do + $CLICKHOUSE_CLIENT -q "SELECT number, range(number + 10) AS array, toString(number) AS string FROM numbers(10) FORMAT $format" > $DATA_FILE + $CLICKHOUSE_CLIENT -q "SELECT * FROM file('test_02103.data', '$format', 'number UInt64, array Array(UInt64), string String') SETTINGS input_format_parallel_parsing=1, min_chunk_bytes_for_parallel_parsing=40" +done + +rm $DATA_FILE + diff --git a/tests/queries/0_stateless/03000_clickhouse_local_columns_description.reference b/tests/queries/0_stateless/02104_clickhouse_local_columns_description.reference similarity index 100% rename from tests/queries/0_stateless/03000_clickhouse_local_columns_description.reference rename to tests/queries/0_stateless/02104_clickhouse_local_columns_description.reference diff --git a/tests/queries/0_stateless/03000_clickhouse_local_columns_description.sh b/tests/queries/0_stateless/02104_clickhouse_local_columns_description.sh similarity index 100% rename from tests/queries/0_stateless/03000_clickhouse_local_columns_description.sh rename to tests/queries/0_stateless/02104_clickhouse_local_columns_description.sh diff --git a/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.config.xml b/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.config.xml new file mode 100644 index 00000000000..0baa5b32ef8 --- /dev/null +++ b/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.config.xml @@ -0,0 +1,22 @@ + + + + + + + + + ::/0 + + default + default + + + + + + + + 02110_clickhouse_local_custom_tld.tld.dat + + diff --git a/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.reference b/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.reference new file mode 100644 index 00000000000..bf62392aeee --- /dev/null +++ b/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.reference @@ -0,0 +1 @@ +biz.ss kernel.biz.ss diff --git a/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.sh b/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.sh new file mode 100755 index 00000000000..02a454957d4 --- /dev/null +++ b/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +function clickhouse_local() +{ + local opts=( + --config "$CURDIR/$(basename "${BASH_SOURCE[0]}" .sh).config.xml" + --top_level_domains_path "$CURDIR" + ) + $CLICKHOUSE_LOCAL "${opts[@]}" "$@" +} + +# -- biz.ss is not in the default TLD list, hence: +clickhouse_local -q " + select + cutToFirstSignificantSubdomain('foo.kernel.biz.ss'), + cutToFirstSignificantSubdomainCustom('foo.kernel.biz.ss', 'public_suffix_list') +" |& grep -v -e 'Processing configuration file' diff --git a/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.tld.dat b/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.tld.dat new file mode 100644 index 00000000000..510e6dd9ec0 --- /dev/null +++ b/tests/queries/0_stateless/02110_clickhouse_local_custom_tld.tld.dat @@ -0,0 +1 @@ +biz.ss diff --git a/tests/queries/0_stateless/02111_function_mapExtractKeyLike.reference b/tests/queries/0_stateless/02111_function_mapExtractKeyLike.reference new file mode 100644 index 00000000000..45edbc24c75 --- /dev/null +++ b/tests/queries/0_stateless/02111_function_mapExtractKeyLike.reference @@ -0,0 +1,23 @@ +The data of table: +1 {'P1-K1':'1-V1','P2-K2':'1-V2'} +2 {'P1-K1':'2-V1','P2-K2':'2-V2'} +3 {'P1-K1':'3-V1','P2-K2':'3-V2'} +4 {'P1-K1':'4-V1','P2-K2':'4-V2'} +5 {'5-K1':'5-V1','5-K2':'5-V2'} +6 {'P3-K1':'6-V1','P4-K2':'6-V2'} + +The results of query: SELECT id, mapExtractKeyLike(map, \'P1%\') FROM map_extractKeyLike_test ORDER BY id; +1 {'P1-K1':'1-V1'} +2 {'P1-K1':'2-V1'} +3 {'P1-K1':'3-V1'} +4 {'P1-K1':'4-V1'} +5 {} +6 {} + +The results of query: SELECT id, mapExtractKeyLike(map, \'5-K1\') FROM map_extractKeyLike_test ORDER BY id; +1 {} +2 {} +3 {} +4 {} +5 {'5-K1':'5-V1'} +6 {} diff --git a/tests/queries/0_stateless/02111_function_mapExtractKeyLike.sql b/tests/queries/0_stateless/02111_function_mapExtractKeyLike.sql new file mode 100644 index 00000000000..31f53642b74 --- /dev/null +++ b/tests/queries/0_stateless/02111_function_mapExtractKeyLike.sql @@ -0,0 +1,22 @@ +DROP TABLE IF EXISTS map_extractKeyLike_test; + +CREATE TABLE map_extractKeyLike_test (id UInt32, map Map(String, String)) Engine=MergeTree() ORDER BY id settings index_granularity=2; + +INSERT INTO map_extractKeyLike_test VALUES (1, {'P1-K1':'1-V1','P2-K2':'1-V2'}),(2,{'P1-K1':'2-V1','P2-K2':'2-V2'}); +INSERT INTO map_extractKeyLike_test VALUES (3, {'P1-K1':'3-V1','P2-K2':'3-V2'}),(4,{'P1-K1':'4-V1','P2-K2':'4-V2'}); +INSERT INTO map_extractKeyLike_test VALUES (5, {'5-K1':'5-V1','5-K2':'5-V2'}),(6, {'P3-K1':'6-V1','P4-K2':'6-V2'}); + +SELECT 'The data of table:'; +SELECT * FROM map_extractKeyLike_test ORDER BY id; + +SELECT ''; + +SELECT 'The results of query: SELECT id, mapExtractKeyLike(map, \'P1%\') FROM map_extractKeyLike_test ORDER BY id;'; +SELECT id, mapExtractKeyLike(map, 'P1%') FROM map_extractKeyLike_test ORDER BY id; + +SELECT ''; + +SELECT 'The results of query: SELECT id, mapExtractKeyLike(map, \'5-K1\') FROM map_extractKeyLike_test ORDER BY id;'; +SELECT id, mapExtractKeyLike(map, '5-K1') FROM map_extractKeyLike_test ORDER BY id; + +DROP TABLE map_extractKeyLike_test; diff --git a/tests/queries/0_stateless/02111_modify_table_comment.reference b/tests/queries/0_stateless/02111_modify_table_comment.reference new file mode 100644 index 00000000000..bc58e6576e3 --- /dev/null +++ b/tests/queries/0_stateless/02111_modify_table_comment.reference @@ -0,0 +1,4 @@ +CREATE TABLE `02111_modify_table_comment`.t\n(\n `n` Int8\n)\nENGINE = MergeTree\nORDER BY n\nSETTINGS index_granularity = 8192\nCOMMENT \'this is a MergeTree table\' +CREATE TABLE `02111_modify_table_comment`.t\n(\n `n` Int8\n)\nENGINE = MergeTree\nORDER BY n\nSETTINGS index_granularity = 8192\nCOMMENT \'MergeTree Table\' +CREATE TABLE `02111_modify_table_comment`.t_merge\n(\n `n` Int8\n)\nENGINE = Merge(\'02111_modify_table_comment\', \'t\')\nCOMMENT \'this is a Merge table\' +CREATE TABLE `02111_modify_table_comment`.t_merge\n(\n `n` Int8\n)\nENGINE = Merge(\'02111_modify_table_comment\', \'t\')\nCOMMENT \'Merge Table\' diff --git a/tests/queries/0_stateless/02111_modify_table_comment.sql b/tests/queries/0_stateless/02111_modify_table_comment.sql new file mode 100644 index 00000000000..f9f864c7f35 --- /dev/null +++ b/tests/queries/0_stateless/02111_modify_table_comment.sql @@ -0,0 +1,34 @@ +-- Tags: no-parallel + +DROP DATABASE IF EXISTS 02111_modify_table_comment; +CREATE DATABASE 02111_modify_table_comment; + +USE 02111_modify_table_comment; + +CREATE TABLE t +( + `n` Int8 +) +ENGINE = MergeTree +ORDER BY n +COMMENT 'this is a MergeTree table'; + +SHOW CREATE t; + +ALTER TABLE t + MODIFY COMMENT 'MergeTree Table'; + +SHOW CREATE t; + +CREATE TABLE t_merge AS t +ENGINE = Merge('02111_modify_table_comment', 't') +COMMENT 'this is a Merge table'; + +SHOW CREATE t_merge; + +ALTER TABLE t_merge + MODIFY COMMENT 'Merge Table'; + +SHOW CREATE t_merge; + +DROP DATABASE 02111_modify_table_comment; diff --git a/tests/queries/0_stateless/02111_with_fill_no_rows.reference b/tests/queries/0_stateless/02111_with_fill_no_rows.reference new file mode 100644 index 00000000000..c0cc69a2d63 --- /dev/null +++ b/tests/queries/0_stateless/02111_with_fill_no_rows.reference @@ -0,0 +1,4 @@ +2019 0 +2020 0 +2021 0 +2022 0 diff --git a/tests/queries/0_stateless/02111_with_fill_no_rows.sql b/tests/queries/0_stateless/02111_with_fill_no_rows.sql new file mode 100644 index 00000000000..e671dd5f0f2 --- /dev/null +++ b/tests/queries/0_stateless/02111_with_fill_no_rows.sql @@ -0,0 +1,19 @@ +SELECT toYear(d) AS y, count() +FROM ( SELECT today() AS d WHERE 0) +GROUP BY y +ORDER BY y ASC WITH FILL FROM 2019 TO 2023; + +SELECT toYear(d) AS y, count() +FROM ( SELECT today() AS d WHERE 0) +GROUP BY y +ORDER BY y ASC WITH FILL FROM 2019; + +SELECT toYear(d) AS y, count() +FROM ( SELECT today() AS d WHERE 0) +GROUP BY y +ORDER BY y ASC WITH FILL TO 2023; + +SELECT toYear(d) AS y, count() +FROM ( SELECT today() AS d WHERE 0) +GROUP BY y +ORDER BY y ASC WITH FILL; diff --git a/tests/queries/0_stateless/02112_parse_date_yyyymmdd.reference b/tests/queries/0_stateless/02112_parse_date_yyyymmdd.reference new file mode 100644 index 00000000000..dc49af313b7 --- /dev/null +++ b/tests/queries/0_stateless/02112_parse_date_yyyymmdd.reference @@ -0,0 +1 @@ +2021-02-03 2021-03-04 2021-04-05 diff --git a/tests/queries/0_stateless/02112_parse_date_yyyymmdd.sh b/tests/queries/0_stateless/02112_parse_date_yyyymmdd.sh new file mode 100755 index 00000000000..0c18697eb06 --- /dev/null +++ b/tests/queries/0_stateless/02112_parse_date_yyyymmdd.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +echo '20210203,2021-03-04,20210405' | $CLICKHOUSE_LOCAL --input-format CSV --structure 'a Date, b Date, c Date' --query 'SELECT * FROM table' diff --git a/tests/queries/0_stateless/02112_skip_index_set_and_or.reference b/tests/queries/0_stateless/02112_skip_index_set_and_or.reference new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/queries/0_stateless/02112_skip_index_set_and_or.sql b/tests/queries/0_stateless/02112_skip_index_set_and_or.sql new file mode 100644 index 00000000000..7b52e5de9c9 --- /dev/null +++ b/tests/queries/0_stateless/02112_skip_index_set_and_or.sql @@ -0,0 +1,6 @@ +drop table if exists set_index; + +create table set_index (a Int32, b Int32, INDEX b_set b type set(0) granularity 1) engine MergeTree order by tuple(); +insert into set_index values (1, 2); + +select b from set_index where a = 1 and a = 1 and b = 1 settings force_data_skipping_indices = 'b_set', optimize_move_to_prewhere=0; diff --git a/tests/queries/1_stateful/00054_merge_tree_partitions.sql b/tests/queries/1_stateful/00054_merge_tree_partitions.sql index 91e67ac857a..73020952977 100644 --- a/tests/queries/1_stateful/00054_merge_tree_partitions.sql +++ b/tests/queries/1_stateful/00054_merge_tree_partitions.sql @@ -1,6 +1,3 @@ --- Tags: no-replicated-database --- Tag no-replicated-database: Unsupported type of ALTER query - DROP TABLE IF EXISTS test.partitions; CREATE TABLE test.partitions (EventDate Date, CounterID UInt32) ENGINE = MergeTree(EventDate, CounterID, 8192); INSERT INTO test.partitions SELECT EventDate + UserID % 365 AS EventDate, CounterID FROM test.hits WHERE CounterID = 1704509; diff --git a/tests/queries/1_stateful/00152_insert_different_granularity.sql b/tests/queries/1_stateful/00152_insert_different_granularity.sql index 5c802642a5c..da99173ed96 100644 --- a/tests/queries/1_stateful/00152_insert_different_granularity.sql +++ b/tests/queries/1_stateful/00152_insert_different_granularity.sql @@ -1,5 +1,5 @@ -- Tags: no-tsan, no-replicated-database --- Tag no-replicated-database: Unsupported type of ALTER query +-- Tag no-replicated-database: Fails due to additional replicas or shards DROP TABLE IF EXISTS fixed_granularity_table; diff --git a/tests/queries/1_stateful/00159_parallel_formatting_json_and_friends.reference b/tests/queries/1_stateful/00159_parallel_formatting_json_and_friends.reference index 6d663c33057..7ad5359a30e 100644 --- a/tests/queries/1_stateful/00159_parallel_formatting_json_and_friends.reference +++ b/tests/queries/1_stateful/00159_parallel_formatting_json_and_friends.reference @@ -1,12 +1,28 @@ JSONEachRow, false -7251839681e559f5a92db107571bb357 - +e0a3c9978a92a277f2fff4664f3c1749 - JSONEachRow, true -7251839681e559f5a92db107571bb357 - +e0a3c9978a92a277f2fff4664f3c1749 - JSONCompactEachRow, false -ba1081a754a06ef6563840b2d8d4d327 - +0c1efbbc25a5bd90a2ecea559d283667 - JSONCompactEachRow, true -ba1081a754a06ef6563840b2d8d4d327 - +0c1efbbc25a5bd90a2ecea559d283667 - +JSONCompactStringsEachRow, false +0c1efbbc25a5bd90a2ecea559d283667 - +JSONCompactStringsEachRow, true +0c1efbbc25a5bd90a2ecea559d283667 - +JSONCompactEachRowWithNames, false +b9e4f8ecadbb650245d1762f4187ee0a - +JSONCompactEachRowWithNames, true +b9e4f8ecadbb650245d1762f4187ee0a - +JSONCompactStringsEachRowWithNames, false +b9e4f8ecadbb650245d1762f4187ee0a - +JSONCompactStringsEachRowWithNames, true +b9e4f8ecadbb650245d1762f4187ee0a - +JSONCompactEachRowWithNamesAndTypes, false +8b41f7375999b53d4c9607398456fe5b - +JSONCompactEachRowWithNamesAndTypes, true +8b41f7375999b53d4c9607398456fe5b - JSONCompactStringsEachRowWithNamesAndTypes, false -31ded3cd9971b124450fb5a44a8bce63 - +8b41f7375999b53d4c9607398456fe5b - JSONCompactStringsEachRowWithNamesAndTypes, true -31ded3cd9971b124450fb5a44a8bce63 - +8b41f7375999b53d4c9607398456fe5b - diff --git a/tests/queries/1_stateful/00159_parallel_formatting_json_and_friends.sh b/tests/queries/1_stateful/00159_parallel_formatting_json_and_friends.sh index 5d54328e45d..f6c87eabfde 100755 --- a/tests/queries/1_stateful/00159_parallel_formatting_json_and_friends.sh +++ b/tests/queries/1_stateful/00159_parallel_formatting_json_and_friends.sh @@ -6,15 +6,15 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . "$CURDIR"/../shell_config.sh -FORMATS=('JSONEachRow' 'JSONCompactEachRow' 'JSONCompactStringsEachRowWithNamesAndTypes') +FORMATS=('JSONEachRow' 'JSONCompactEachRow' 'JSONCompactStringsEachRow' 'JSONCompactEachRowWithNames' 'JSONCompactStringsEachRowWithNames' 'JSONCompactEachRowWithNamesAndTypes' 'JSONCompactStringsEachRowWithNamesAndTypes') for format in "${FORMATS[@]}" do echo "$format, false"; $CLICKHOUSE_CLIENT --output_format_parallel_formatting=false -q \ - "SELECT ClientEventTime::DateTime('Europe/Moscow') as a, MobilePhoneModel as b, ClientIP6 as c FROM test.hits ORDER BY a, b, c Format $format" | md5sum + "SELECT ClientEventTime::DateTime('Europe/Moscow') as a, MobilePhoneModel as b, ClientIP6 as c FROM test.hits ORDER BY a, b, c LIMIT 3000000 Format $format" | md5sum echo "$format, true"; $CLICKHOUSE_CLIENT --output_format_parallel_formatting=true -q \ - "SELECT ClientEventTime::DateTime('Europe/Moscow') as a, MobilePhoneModel as b, ClientIP6 as c FROM test.hits ORDER BY a, b, c Format $format" | md5sum + "SELECT ClientEventTime::DateTime('Europe/Moscow') as a, MobilePhoneModel as b, ClientIP6 as c FROM test.hits ORDER BY a, b, c LIMIT 3000000 Format $format" | md5sum done diff --git a/tests/queries/1_stateful/00167_parallel_parsing_with_names_and_types.reference b/tests/queries/1_stateful/00167_parallel_parsing_with_names_and_types.reference new file mode 100644 index 00000000000..0c0367694b2 --- /dev/null +++ b/tests/queries/1_stateful/00167_parallel_parsing_with_names_and_types.reference @@ -0,0 +1,20 @@ +TSVWithNamesAndTypes, false +7c1feeaae418e502d66fcc8e31946f2e - +TSVWithNamesAndTypes, true +7c1feeaae418e502d66fcc8e31946f2e - +CSVWithNamesAndTypes, false +7c1feeaae418e502d66fcc8e31946f2e - +CSVWithNamesAndTypes, true +7c1feeaae418e502d66fcc8e31946f2e - +JSONStringsEachRow, false +7c1feeaae418e502d66fcc8e31946f2e - +JSONStringsEachRow, true +7c1feeaae418e502d66fcc8e31946f2e - +JSONCompactEachRowWithNamesAndTypes, false +7c1feeaae418e502d66fcc8e31946f2e - +JSONCompactEachRowWithNamesAndTypes, true +7c1feeaae418e502d66fcc8e31946f2e - +JSONCompactStringsEachRowWithNamesAndTypes, false +7c1feeaae418e502d66fcc8e31946f2e - +JSONCompactStringsEachRowWithNamesAndTypes, true +7c1feeaae418e502d66fcc8e31946f2e - diff --git a/tests/queries/1_stateful/00167_parallel_parsing_with_names_and_types.sh b/tests/queries/1_stateful/00167_parallel_parsing_with_names_and_types.sh new file mode 100755 index 00000000000..9fdca20d097 --- /dev/null +++ b/tests/queries/1_stateful/00167_parallel_parsing_with_names_and_types.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +FORMATS=('TSVWithNamesAndTypes' 'CSVWithNamesAndTypes' 'JSONStringsEachRow' 'JSONCompactEachRowWithNamesAndTypes' 'JSONCompactStringsEachRowWithNamesAndTypes') +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS parsing_with_names" + +for format in "${FORMATS[@]}" +do + # Columns are permuted + $CLICKHOUSE_CLIENT -q "CREATE TABLE parsing_with_names(c FixedString(16), a DateTime('Europe/Moscow'), b String) ENGINE=Memory()" + + echo "$format, false"; + $CLICKHOUSE_CLIENT --output_format_parallel_formatting=false -q \ + "SELECT URLRegions as d, toTimeZone(ClientEventTime, 'Europe/Moscow') as a, MobilePhoneModel as b, ParamPrice as e, ClientIP6 as c FROM test.hits LIMIT 5000 Format $format" | \ + $CLICKHOUSE_CLIENT --input_format_skip_unknown_fields=1 --input_format_parallel_parsing=false -q "INSERT INTO parsing_with_names FORMAT $format SETTINGS input_format_null_as_default=0" + + $CLICKHOUSE_CLIENT -q "SELECT * FROM parsing_with_names;" | md5sum + $CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS parsing_with_names" + + + $CLICKHOUSE_CLIENT -q "CREATE TABLE parsing_with_names(c FixedString(16), a DateTime('Europe/Moscow'), b String) ENGINE=Memory()" + echo "$format, true"; + $CLICKHOUSE_CLIENT --output_format_parallel_formatting=false -q \ + "SELECT URLRegions as d, toTimeZone(ClientEventTime, 'Europe/Moscow') as a, MobilePhoneModel as b, ParamPrice as e, ClientIP6 as c FROM test.hits LIMIT 5000 Format $format" | \ + $CLICKHOUSE_CLIENT --input_format_skip_unknown_fields=1 --input_format_parallel_parsing=true -q "INSERT INTO parsing_with_names FORMAT $format SETTINGS input_format_null_as_default=0" + + $CLICKHOUSE_CLIENT -q "SELECT * FROM parsing_with_names;" | md5sum + $CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS parsing_with_names" +done diff --git a/tests/queries/shell_config.sh b/tests/queries/shell_config.sh index ae279c93527..1f802ddab7b 100644 --- a/tests/queries/shell_config.sh +++ b/tests/queries/shell_config.sh @@ -11,6 +11,7 @@ export CLICKHOUSE_TEST_PATH="${BASH_SOURCE[1]}" CLICKHOUSE_TEST_NAME="$(basename "$CLICKHOUSE_TEST_PATH" .sh)" export CLICKHOUSE_TEST_NAME export CLICKHOUSE_TEST_ZOOKEEPER_PREFIX="${CLICKHOUSE_TEST_NAME}_${CLICKHOUSE_DATABASE}" +export CLICKHOUSE_TEST_UNIQUE_NAME="${CLICKHOUSE_TEST_NAME}_${CLICKHOUSE_DATABASE}" [ -v CLICKHOUSE_CONFIG_CLIENT ] && CLICKHOUSE_CLIENT_OPT0+=" --config-file=${CLICKHOUSE_CONFIG_CLIENT} " [ -v CLICKHOUSE_HOST ] && CLICKHOUSE_CLIENT_OPT0+=" --host=${CLICKHOUSE_HOST} " diff --git a/utils/check-marks/main.cpp b/utils/check-marks/main.cpp index ad341790032..36b81509046 100644 --- a/utils/check-marks/main.cpp +++ b/utils/check-marks/main.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include @@ -19,7 +20,7 @@ static void checkByCompressedReadBuffer(const std::string & mrk_path, const std::string & bin_path) { DB::ReadBufferFromFile mrk_in(mrk_path); - DB::CompressedReadBufferFromFile bin_in(bin_path, {}, 0); + DB::CompressedReadBufferFromFile bin_in(DB::createReadBufferFromFileBase(bin_path, /* settings= */ {})); DB::WriteBufferFromFileDescriptor out(STDOUT_FILENO); bool mrk2_format = boost::algorithm::ends_with(mrk_path, ".mrk2"); diff --git a/utils/check-style/check-style b/utils/check-style/check-style index 7137d04a568..514f01ce4b9 100755 --- a/utils/check-style/check-style +++ b/utils/check-style/check-style @@ -70,7 +70,7 @@ find $ROOT_PATH/{src,base,programs,utils} -name '*.xml' | xargs xmllint --noout --nonet # FIXME: for now only clickhouse-test -pylint --rcfile=$ROOT_PATH/.pylintrc --persistent=no --score=n $ROOT_PATH/tests/clickhouse-test +pylint --rcfile=$ROOT_PATH/.pylintrc --persistent=no --score=n $ROOT_PATH/tests/clickhouse-test $ROOT_PATH/tests/ci/*.py find $ROOT_PATH -not -path $ROOT_PATH'/contrib*' \( -name '*.yaml' -or -name '*.yml' \) -type f | grep -vP $EXCLUDE_DIRS | diff --git a/website/benchmark/benchmark.js b/website/benchmark/benchmark.js index 8fb2693aa97..bd5ec3c083e 100644 --- a/website/benchmark/benchmark.js +++ b/website/benchmark/benchmark.js @@ -58,7 +58,7 @@ function generate_selectors(elem) { var available = available_systems_for_current_data_size.indexOf(systems[i]) != -1; var button_class = 'btn-outline-dark'; if (system_kinds[i] == 'cloud' || system_kinds[i] == 'vps') { - button_class = 'btn-outline-primary'; + button_class = 'btn-light'; } else if (system_kinds[i] == 'desktop' || system_kinds[i] == 'laptop') { button_class = 'btn-outline-secondary'; }; @@ -424,11 +424,11 @@ function generate_diagram() { } - table_row += '
div{align-items:stretch;display:flex}.case-study-cards:before{background:#d6dbdf;bottom:0;content:"";display:block;left:20px;position:absolute;top:40px;width:100vw}@media screen and (min-width:980px){.case-study-cards{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:80px;padding-bottom:120px}.case-study-cards:before{left:-40px;top:120px}}.case-study-card{align-items:stretch;flex-direction:row;flex-shrink:0;left:0;transition:box-shadow .2s,left .4s,width .4s,z-index 0s;transition-delay:0s,.6s,.6s,0s;width:100%;z-index:2}@media screen and (max-width:979.98px){.case-study-card .row{min-height:0!important}}@media screen and (min-width:980px){.case-study-card:active,.case-study-card:hover{box-shadow:0 12px 32px rgba(108,117,125,.2)}.case-study-card:not(.is-open){cursor:pointer}.case-study-card.is-open{transform:none!important;transition-delay:0s,0s,0s,0s;width:calc(200% + 40px);z-index:10}.case-study-card.is-closing{z-index:10}.case-study-card.open-left.is-open{left:calc(-100% - 40px)}.case-study-card:before{background:no-repeat url(../images/backgrounds/bg-card-pattern-red.png);background-position:100%;background-size:contain;content:"";display:block;height:calc(100% - 80px);max-height:224px;max-width:234px;position:absolute;right:0;top:40px;transform:translateX(30%);transition:transform .4s;transition-delay:.6s;width:100%;z-index:1}}@media screen and (min-width:980px)and (min-width:1240px){.case-study-card:before{transform:translateX(10%)}}@media screen and (min-width:980px){.case-study-card.is-open:before{transform:translateX(60%);transition-delay:0s}}@media screen and (min-width:980px){.case-study-card-wrap{align-items:stretch;display:flex;flex-shrink:0;min-height:304px;position:relative;transition:width .4s;transition-delay:.6s;width:calc(200% + 42px);z-index:2}}@media screen and (min-width:980px){.case-study-card.is-open .case-study-card-wrap{transition-delay:0s;width:100%}}@media screen and (min-width:980px){.case-study-card-body{display:flex;flex-direction:column;padding-right:80px!important}.case-study-card-body>.row{align-self:stretch}}@media screen and (min-width:980px){.case-study-card-toggle{background:#fff;box-shadow:0 8px 20px rgba(108,117,125,.2);border-radius:100%;cursor:pointer;height:56px;position:relative;width:56px}.case-study-card-toggle:after,.case-study-card-toggle:before{background:#257af4;content:"";display:block;height:4px;left:calc(50% - 15px);position:absolute;top:calc(50% - 2px);transition:opacity .2s,transform .2s;width:30px}.case-study-card-toggle:after{transform:rotate(90deg)}}@media screen and (min-width:980px){.case-study-card.is-open .case-study-card-toggle:before{opacity:0;transform:rotate(-90deg)}}@media screen and (min-width:980px){.case-study-card.is-open .case-study-card-toggle:after{transform:rotate(0)}}@media screen and (min-width:980px){.case-study-card .col-lg-3,.case-study-card .col-lg-auto{opacity:0;transform:translateX(24px);transition:opacity .4s,transform .4s}}@media screen and (min-width:980px){.case-study-card .col-lg-3{transition-delay:0s}}@media screen and (min-width:980px){.case-study-card .col-lg-auto{transition-delay:.2s}}@media screen and (min-width:980px)and (min-width:980px){.case-study-card .col-lg-auto{max-width:605px;width:calc(100% - 319px)}}@media screen and (min-width:980px){.case-study-card.is-open .col-lg-3,.case-study-card.is-open .col-lg-auto{opacity:1;transform:none}}@media screen and (min-width:980px){.case-study-card.is-open .col-lg-3{transition-delay:.4s}}@media screen and (min-width:980px){.case-study-card.is-open .col-lg-auto{transition-delay:.2s}}.footer-copy{white-space:nowrap}form .form-control{border:1px solid #6c757d;border-radius:6px;height:auto;line-height:20px;min-height:44px;padding:12px 16px;width:100%}form .form-control,form .form-control:focus{box-shadow:0 8px 20px rgba(108,117,125,.2);color:#212529}form .form-control:focus{border-color:#212529}form .form-control::-moz-placeholder{color:#6c757d}form .form-control:-ms-input-placeholder{color:#6c757d}form .form-control::placeholder{color:#6c757d}form select.form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}form select.form-control:not([data-chosen]){color:#6c757d}form .btn-secondary:active,form .btn-secondary:hover{color:#212529;background:#fc0;border-color:#fc0}.hero{overflow:visible;position:relative}.hero,.hero-bg{background-repeat:no-repeat;background-position:50%;background-size:cover}.hero-bg{display:block;height:100%;left:50%;position:absolute;top:0;transform:translateX(-50%);z-index:1}.hero>.container{position:relative;z-index:2}.hero.has-offset{margin-bottom:-160px;padding-bottom:160px}.base-hero{height:22.5vw;max-height:324px;min-height:280px}.index-hero{background-image:url(/images/backgrounds/bg-hero-home.svg);height:68vw;max-height:980px}.index-hero,.other-hero{max-width:2448px;width:170vw}.other-hero{background-image:url(/images/backgrounds/bg-hero.svg)}.bg-footer-cta{background-image:url(/images/backgrounds/bg-footer-cta.svg);width:2448px}.quickstart-bg{background-image:url(/images/backgrounds/bg-quick-start.svg);height:40vw;top:220px;width:170vw}hr{background:#f1f6f9;border:0;display:block;height:4px;margin:0;width:100%}hr.is-small{height:2px}hr.is-large{height:8px}hr.is-medium{background:#d6dbdf}hr.is-dark{background:#495057}hr.is-yellow{background:linear-gradient(90deg,#ff8c00,#ff8c00 8px,#fc0 16px,rgba(255,204,0,0));-webkit-clip-path:polygon(8px 100%,0 100%,0 0,8px 0,8px 100%,16px 100%,16px 0,100% 0,100% 100%);clip-path:polygon(8px 100%,0 100%,0 0,8px 0,8px 100%,16px 100%,16px 0,100% 0,100% 100%);height:8px}.icon{display:block;height:48px;margin-bottom:24px;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center}@media screen and (min-width:576px){.icon{height:64px}}@media screen and (min-width:980px){.icon{height:80px}}img{max-width:100%}.kicker{color:#6c757d;font-family:Hind Siliguri,sans-serif;font-size:.875rem;font-weight:600;letter-spacing:1px;margin:0}@media screen and (max-width:978.98px){.lead{font-size:1.125rem}}.navbar-clickhouse{border-bottom:4px solid #f1f6f9;height:142px}.navbar-clickhouse>.container{flex-wrap:wrap}.navbar-super{flex-shrink:0;width:100%}.navbar-super ul{list-style:none}.navbar-super li:not(:last-child){margin-bottom:0;margin-right:24px}.navbar-super a{align-items:center;color:#212529;display:flex;font-size:.875rem}.navbar-super a:active,.navbar-super a:hover{color:#257af4;text-decoration:none}.navbar-super img{flex-shrink:0;margin-right:4px}.navbar-brand-clickhouse{background:no-repeat url(../images/logo-clickhouse.svg);background-size:contain;flex-shrink:0;height:28px;margin-right:48px;padding:0;width:180px}.navbar-nav{align-items:center;height:46px}.navbar .nav-item:not(:last-child){margin-bottom:0;margin-right:24px}.navbar .nav-link{color:#212529}.navbar .nav-link:active,.navbar .nav-link:hover{color:#257af4}.navbar .navbar-nav{flex-direction:row}@media screen and (max-width:978.98px){.navbar>.container{padding-left:20px;padding-right:20px}.navbar .navbar-toggler{height:24px;padding:0;width:24px}.navbar .navbar-toggler:focus{outline:none}.navbar .navbar-toggler-icon{background:no-repeat url(../images/icons/icon-menu.svg);background-position:50%;background-size:contain;height:24px;width:24px}.navbar .navbar-collapse{background:#fff;border-bottom:4px solid #f1f6f9;height:56px;left:0;padding:0 20px 16px;position:absolute;right:0;top:100%}.navbar .nav-link{font-size:.875rem;white-space:nowrap}}@media screen and (max-width:615.98px){.navbar .navbar-collapse{height:auto}.navbar .navbar-nav{flex-direction:column;height:auto}.navbar .nav-item:not(:last-child){margin-bottom:16px;margin-right:0}}@media screen and (max-width:399.98px){.navbar{height:80px}}.page,.photo-frame{overflow:hidden;width:100%}.photo-frame{background:hsla(0,0%,100%,.6);border-radius:100%;box-shadow:0 8px 20px rgba(108,117,125,.2);display:block;margin-bottom:24px;max-width:160px;position:relative}.photo-frame:before{content:"";display:block;padding-bottom:100%;width:100%}.photo-frame img{display:block;height:100%;left:0;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center;position:absolute;top:0;width:100%}.pullquote{position:relative;width:70%}.pullquote:before{background:no-repeat url(../images/backgrounds/bg-quotes.svg);background-position:50%;background-size:100%;content:"";mix-blend-mode:multiply;right:56px;width:calc(100% - 16px);z-index:2}.pullquote-bg,.pullquote:before{bottom:0;display:block;position:absolute;top:0}.pullquote-bg{right:0;width:calc(50vw + 28.57143%);z-index:1}.pullquote-body{padding:64px 40px 64px 0;position:relative;z-index:3}.pullquote-quote{font-family:Hind Siliguri,sans-serif;font-size:32px;font-weight:700}.pullquote-citation{font-size:1.125rem}.section{overflow:visible;position:relative}.section,.section-bg{background-repeat:no-repeat;background-position:50%;background-size:cover}.section-bg{display:block;height:100%;left:50%;position:absolute;top:0;transform:translateX(-50%);z-index:1}.section>.container{position:relative;z-index:2}.social-icons{align-items:center;display:flex}.social-icons>a{aspect-ratio:24/24;background:#6c757d;display:block;height:24px;width:24px;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background .2s}.social-icons>a:active,.social-icons>a:hover{background:#212529}.social-icons>a+a{margin-left:32px}.social-icons-facebook{-webkit-mask-image:url(/images/icons/icon-facebook-gray.svg);mask-image:url(/images/icons/icon-facebook-gray.svg)}.social-icons-twitter{-webkit-mask-image:url(/images/icons/icon-twitter-gray.svg);mask-image:url(/images/icons/icon-twitter-gray.svg);width:31px}.social-icons-linkedin{-webkit-mask-image:url(/images/icons/icon-linkedin-gray.svg);mask-image:url(/images/icons/icon-linkedin-gray.svg)}.social-icons-linkedin-alt{-webkit-mask-image:url(/images/icons/icon-linkedin-alt-gray.svg);mask-image:url(/images/icons/icon-linkedin-alt-gray.svg)}.social-icons.size-small>a{height:20px;width:20px}.social-icons.size-small>a:active,.social-icons.size-small>a:hover{background:#212529}.social-icons.size-small>a+a{margin-left:16px}.tabs{position:relative}.tabs:before{background:#fff;border-radius:7px 7px 0 0;content:"";display:block;height:8px;left:1px;position:absolute;right:1px;top:68px;z-index:10}@media screen and (min-width:1240px){.tabs:before{top:76px}}.tabs-body{background:#fff;border-radius:8px;border:1px solid #6c757d;box-shadow:0 8px 20px rgba(108,117,125,.2);padding:24px}@media screen and (min-width:980px){.tabs-body{padding:32px}}@media screen and (min-width:1240px){.tabs-body{padding:40px}}.tabs .nav-tabs{border-bottom:0;flex-wrap:nowrap;height:76px;margin:-20px -20px -9px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 20px,#000 calc(100% - 20px),transparent);mask-image:linear-gradient(90deg,transparent,#000 20px,#000 calc(100% - 20px),transparent);overflow:scroll;overflow-x:scroll;overflow-y:visible;padding:20px 20px 0;position:relative}@media screen and (min-width:940px){.tabs .nav-tabs{overflow:visible}}@media screen and (min-width:1240px){.tabs .nav-tabs{height:84px}}.tabs .nav-link{align-items:center;border-bottom:0;color:#6c757d;display:flex;font-size:.875rem;flex-shrink:0;height:56px;justify-content:center;padding:0 12px 8px;text-align:center;white-space:nowrap}@media screen and (min-width:1240px){.tabs .nav-link{height:64px;padding:0 16px 8px}}.tabs .nav-link.active{background:#fff;box-shadow:0 -4px 8px rgba(108,117,125,.1);font-weight:700;padding:0 16px 8px}@media screen and (min-width:980px){.tabs .nav-link.active{padding:0 24px 8px}}@media screen and (min-width:1240px){.tabs .nav-link.active{padding:0 32px 8px}}.tab-pane pre{background:#212529;border-radius:16px;color:#fff;padding:24px 16px}@media screen and (min-width:1240px){.tab-pane pre{padding:32px 24px}}.trailing-link{align-items:center;color:#212529;display:flex;font-size:.875rem;font-weight:700}.trailing-link:after{background:no-repeat url(../images/icons/icon-arrow.svg);background-position:100%;background-size:contain;content:"";display:block;height:12px;transition:transform .2s;width:20px}.trailing-link:active,.trailing-link:hover{color:#212529;text-decoration:none}.trailing-link:active:after,.trailing-link:hover:after{transform:translateX(8px)}.trailing-link.span-full:after{margin-left:auto}ul{color:#495057;list-style-type:square;padding-left:1.25em}ul li:not(:last-child){margin-bottom:16px}ul li::marker{color:#ff3939}ul.has-separators{list-style:none;padding:0}ul.has-separators li:not(:last-child){border-bottom:4px solid #f1f6f9;margin-bottom:24px;padding-bottom:24px}.bg-gradient-secondary{background-image:linear-gradient(58deg,#ff6443 3%,#fe561d 24%,#e32f0d 93%)}.bg-gradient-light-orange{background-image:linear-gradient(90deg,rgba(255,203,128,0),#ffcb80)}.bg-offset-right{bottom:0;left:-24px;position:absolute;top:0;width:calc(100vw + 24px);z-index:-1}@media screen and (min-width:1240px){.bg-offset-right{left:-96px;width:calc(100vw + 96px)}}.bg-inset-right{bottom:0;left:40px;position:absolute;top:0;width:calc(100vw - 40px);z-index:-1}@media screen and (min-width:980px){.bg-inset-right{left:96px;width:calc(100vw - 96px)}}.has-border-left{border-left:8px solid #f1f6f9;padding-left:16px}.font-xl{font-size:1.25rem}.font-lg{font-size:1.125rem}.font-sm{font-size:.875rem}.font-xs{font-size:.625rem}.font-weight-semibold{font-weight:600}.display-5{color:#212529;font-size:20px;font-weight:500}.display-6{color:#212529;font-size:14px;font-weight:700}.text-decoration-underline{text-decoration:underline}.text-upper{text-transform:uppercase} \ No newline at end of file +@media screen and (max-width:978.98px){.btn{padding:8px 16px}}@media screen and (max-width:978.98px){.btn-lg{padding:12px 24px}}.btn-primary,.btn-primary:active,.btn-primary:hover{color:#212529}.btn-outline-primary{background:#fffaf0;border-color:#fc0;color:#212529}.btn-outline-primary:active,.btn-outline-primary:hover{background:#fc0;border-color:#fc0;color:#212529}.btn-secondary{border-color:#212529;color:#fff}.btn-outline-secondary,.btn-secondary:active,.btn-secondary:hover{background:#fff;border-color:#212529;color:#212529}.btn-outline-secondary:active,.btn-outline-secondary:hover{background:#212529;border-color:#212529;color:#fff}.btn-tertiary{border-color:#257af4;color:#fff}.btn-tertiary:active,.btn-tertiary:hover{background:#257af4;border-color:#257af4;color:#fff}.btn-outline-tertiary{background:#e3f1fe;color:#257af4}.btn-outline-tertiary:active,.btn-outline-tertiary:hover{background:#257af4;color:#fff}.btns{align-items:center;display:flex;justify-content:center}.btns .btn+.btn{margin-left:24px}.btns .btn-lg+.btn-lg{margin-left:40px}.card{box-shadow:0 8px 20px rgba(108,117,125,.2);overflow:hidden;transition:box-shadow .2s,transform .2s;width:100%}.card,.card-body{position:relative}.card-body{z-index:10}.card.is-large .card-body{padding:40px}.card.bg-primary-light{border-color:#fc0}.card.has-dark-border{border-color:#6c757d}.card.has-pattern:after,.card.has-pattern:before{background-repeat:no-repeat;background-size:auto 100%;bottom:0;content:"";display:block;position:absolute;top:0;width:72px}.card.has-pattern:before{background-image:url(../images/backgrounds/bg-card-pattern-blue-1.png);background-position:0 0;left:0}.card.has-pattern:after{background-image:url(../images/backgrounds/bg-card-pattern-blue-2.png);background-position:100% 0;right:0}.card.has-hover:active,.card.has-hover:hover,a.card:active,a.card:hover{box-shadow:0 12px 32px rgba(108,117,125,.2);transform:translateY(-8px)}.card.has-highlight:after,.card.has-hover:after,a.card:after{content:"";display:block;height:8px;margin-top:auto;transition:background .2s;width:100%}.card.has-highlight:after,.card.has-hover:active:after,.card.has-hover:hover:after,a.card:active:after,a.card:hover:after{background:#e3f1fe}.case-study-cards{-moz-column-gap:40px;column-gap:40px;display:grid;grid-template-columns:1fr;row-gap:40px;padding-bottom:40px;position:relative}.case-study-cards>div{align-items:stretch;display:flex}.case-study-cards:before{background:#d6dbdf;bottom:0;content:"";display:block;left:20px;position:absolute;top:40px;width:100vw}@media screen and (min-width:980px){.case-study-cards{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:80px;padding-bottom:120px}.case-study-cards:before{left:-40px;top:120px}}.case-study-card{align-items:stretch;flex-direction:row;flex-shrink:0;left:0;transition:box-shadow .2s,left .4s,width .4s,z-index 0s;transition-delay:0s,.6s,.6s,0s;width:100%;z-index:2}@media screen and (max-width:979.98px){.case-study-card .row{min-height:0!important}}@media screen and (min-width:980px){.case-study-card:active,.case-study-card:hover{box-shadow:0 12px 32px rgba(108,117,125,.2)}.case-study-card:not(.is-open){cursor:pointer}.case-study-card.is-open{transform:none!important;transition-delay:0s,0s,0s,0s;width:calc(200% + 40px);z-index:10}.case-study-card.is-closing{z-index:10}.case-study-card.open-left.is-open{left:calc(-100% - 40px)}.case-study-card:before{background:no-repeat url(../images/backgrounds/bg-card-pattern-red.png);background-position:100%;background-size:contain;content:"";display:block;height:calc(100% - 80px);max-height:224px;max-width:234px;position:absolute;right:0;top:40px;transform:translateX(30%);transition:transform .4s;transition-delay:.6s;width:100%;z-index:1}}@media screen and (min-width:980px)and (min-width:1240px){.case-study-card:before{transform:translateX(10%)}}@media screen and (min-width:980px){.case-study-card.is-open:before{transform:translateX(60%);transition-delay:0s}}@media screen and (min-width:980px){.case-study-card-wrap{align-items:stretch;display:flex;flex-shrink:0;min-height:304px;position:relative;transition:width .4s;transition-delay:.6s;width:calc(200% + 42px);z-index:2}}@media screen and (min-width:980px){.case-study-card.is-open .case-study-card-wrap{transition-delay:0s;width:100%}}@media screen and (min-width:980px){.case-study-card-body{display:flex;flex-direction:column;padding-right:80px!important}.case-study-card-body>.row{align-self:stretch}}@media screen and (min-width:980px){.case-study-card-toggle{background:#fff;box-shadow:0 8px 20px rgba(108,117,125,.2);border-radius:100%;cursor:pointer;height:56px;position:relative;width:56px}.case-study-card-toggle:after,.case-study-card-toggle:before{background:#257af4;content:"";display:block;height:4px;left:calc(50% - 15px);position:absolute;top:calc(50% - 2px);transition:opacity .2s,transform .2s;width:30px}.case-study-card-toggle:after{transform:rotate(90deg)}}@media screen and (min-width:980px){.case-study-card.is-open .case-study-card-toggle:before{opacity:0;transform:rotate(-90deg)}}@media screen and (min-width:980px){.case-study-card.is-open .case-study-card-toggle:after{transform:rotate(0)}}@media screen and (min-width:980px){.case-study-card .col-lg-3,.case-study-card .col-lg-auto{opacity:0;transform:translateX(24px);transition:opacity .4s,transform .4s}}@media screen and (min-width:980px){.case-study-card .col-lg-3{transition-delay:0s}}@media screen and (min-width:980px){.case-study-card .col-lg-auto{transition-delay:.2s}}@media screen and (min-width:980px)and (min-width:980px){.case-study-card .col-lg-auto{max-width:605px;width:calc(100% - 319px)}}@media screen and (min-width:980px){.case-study-card.is-open .col-lg-3,.case-study-card.is-open .col-lg-auto{opacity:1;transform:none}}@media screen and (min-width:980px){.case-study-card.is-open .col-lg-3{transition-delay:.4s}}@media screen and (min-width:980px){.case-study-card.is-open .col-lg-auto{transition-delay:.2s}}.footer-copy{white-space:nowrap}form .form-control{border:1px solid #6c757d;border-radius:6px;height:auto;line-height:20px;min-height:44px;padding:12px 16px;width:100%}form .form-control,form .form-control:focus{box-shadow:0 8px 20px rgba(108,117,125,.2);color:#212529}form .form-control:focus{border-color:#212529}form .form-control::-moz-placeholder{color:#6c757d}form .form-control:-ms-input-placeholder{color:#6c757d}form .form-control::placeholder{color:#6c757d}form select.form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}form select.form-control:not([data-chosen]){color:#6c757d}form .btn-secondary:active,form .btn-secondary:hover{color:#212529;background:#fc0;border-color:#fc0}.hero{overflow:visible;position:relative}.hero,.hero-bg{background-repeat:no-repeat;background-position:50%;background-size:cover}.hero-bg{display:block;height:100%;left:50%;position:absolute;top:0;transform:translateX(-50%);z-index:1}.hero>.container{position:relative;z-index:2}.hero.has-offset{margin-bottom:-160px;padding-bottom:160px}.base-hero{height:22.5vw;max-height:324px;min-height:280px}.index-hero{background-image:url(/images/backgrounds/bg-hero-home.svg);height:68vw;max-height:980px}.index-hero,.other-hero{max-width:2448px;width:170vw}.other-hero{background-image:url(/images/backgrounds/bg-hero.svg)}.bg-footer-cta{background-image:url(/images/backgrounds/bg-footer-cta.svg);width:2448px}.quickstart-bg{background-image:url(/images/backgrounds/bg-quick-start.svg);height:40vw;top:220px;width:170vw}hr{background:#f1f6f9;border:0;display:block;height:4px;margin:0;width:100%}hr.is-small{height:2px}hr.is-large{height:8px}hr.is-medium{background:#d6dbdf}hr.is-dark{background:#495057}hr.is-yellow{background:linear-gradient(90deg,#ff8c00,#ff8c00 8px,#fc0 16px,rgba(255,204,0,0));-webkit-clip-path:polygon(8px 100%,0 100%,0 0,8px 0,8px 100%,16px 100%,16px 0,100% 0,100% 100%);clip-path:polygon(8px 100%,0 100%,0 0,8px 0,8px 100%,16px 100%,16px 0,100% 0,100% 100%);height:8px}.icon{display:block;height:48px;margin-bottom:24px;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center}@media screen and (min-width:576px){.icon{height:64px}}@media screen and (min-width:980px){.icon{height:80px}}img{max-width:100%}.kicker{color:#6c757d;font-family:Hind Siliguri,sans-serif;font-size:.875rem;font-weight:600;letter-spacing:1px;margin:0}@media screen and (max-width:978.98px){.lead{font-size:1.125rem}}.logo{display:block;height:36px;max-width:220px;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center;width:100%}.navbar-clickhouse{border-bottom:4px solid #f1f6f9;height:142px}.navbar-clickhouse>.container{flex-wrap:wrap}.navbar-super{flex-shrink:0;width:100%}.navbar-super ul{list-style:none}.navbar-super li:not(:last-child){margin-bottom:0;margin-right:24px}.navbar-super a{align-items:center;color:#212529;display:flex;font-size:.875rem}.navbar-super a:active,.navbar-super a:hover{color:#257af4;text-decoration:none}.navbar-super img{flex-shrink:0;margin-right:4px}.navbar-brand-clickhouse{background:no-repeat url(../images/logo-clickhouse.svg);background-size:contain;flex-shrink:0;height:28px;margin-right:48px;padding:0;width:180px}.navbar-nav{align-items:center;height:46px}.navbar .nav-item:not(:last-child){margin-bottom:0;margin-right:24px}.navbar .nav-link{color:#212529}.navbar .nav-link:active,.navbar .nav-link:hover{color:#257af4}.navbar .navbar-nav{flex-direction:row}@media screen and (max-width:978.98px){.navbar>.container{padding-left:20px;padding-right:20px}.navbar .navbar-toggler{height:24px;padding:0;width:24px}.navbar .navbar-toggler:focus{outline:none}.navbar .navbar-toggler-icon{background:no-repeat url(../images/icons/icon-menu.svg);background-position:50%;background-size:contain;height:24px;width:24px}.navbar .navbar-collapse{background:#fff;border-bottom:4px solid #f1f6f9;height:56px;left:0;padding:0 20px 16px;position:absolute;right:0;top:100%}.navbar .nav-link{font-size:.875rem;white-space:nowrap}}@media screen and (max-width:615.98px){.navbar .navbar-collapse{height:auto}.navbar .navbar-nav{flex-direction:column;height:auto}.navbar .nav-item:not(:last-child){margin-bottom:16px;margin-right:0}}@media screen and (max-width:399.98px){.navbar{height:80px}}.page,.photo-frame{overflow:hidden;width:100%}.photo-frame{background:hsla(0,0%,100%,.6);border-radius:100%;box-shadow:0 8px 20px rgba(108,117,125,.2);display:block;margin-bottom:24px;max-width:160px;position:relative}.photo-frame:before{content:"";display:block;padding-bottom:100%;width:100%}.photo-frame img{display:block;height:100%;left:0;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center;position:absolute;top:0;width:100%}.pullquote{position:relative;width:70%}.pullquote:before{background:no-repeat url(../images/backgrounds/bg-quotes.svg);background-position:50%;background-size:100%;content:"";mix-blend-mode:multiply;right:56px;width:calc(100% - 16px);z-index:2}.pullquote-bg,.pullquote:before{bottom:0;display:block;position:absolute;top:0}.pullquote-bg{right:0;width:calc(50vw + 28.57143%);z-index:1}.pullquote-body{padding:64px 40px 64px 0;position:relative;z-index:3}.pullquote-quote{font-family:Hind Siliguri,sans-serif;font-size:32px;font-weight:700}.pullquote-citation{font-size:1.125rem}.section{overflow:visible;position:relative}.section,.section-bg{background-repeat:no-repeat;background-position:50%;background-size:cover}.section-bg{display:block;height:100%;left:50%;position:absolute;top:0;transform:translateX(-50%);z-index:1}.section>.container{position:relative;z-index:2}.social-icons{align-items:center;display:flex}.social-icons>a{aspect-ratio:24/24;background:#6c757d;display:block;height:24px;width:24px;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background .2s}.social-icons>a:active,.social-icons>a:hover{background:#212529}.social-icons>a+a{margin-left:32px}.social-icons-facebook{-webkit-mask-image:url(/images/icons/icon-facebook-gray.svg);mask-image:url(/images/icons/icon-facebook-gray.svg)}.social-icons-twitter{-webkit-mask-image:url(/images/icons/icon-twitter-gray.svg);mask-image:url(/images/icons/icon-twitter-gray.svg);width:31px}.social-icons-linkedin{-webkit-mask-image:url(/images/icons/icon-linkedin-gray.svg);mask-image:url(/images/icons/icon-linkedin-gray.svg)}.social-icons-linkedin-alt{-webkit-mask-image:url(/images/icons/icon-linkedin-alt-gray.svg);mask-image:url(/images/icons/icon-linkedin-alt-gray.svg)}.social-icons.size-small>a{height:20px;width:20px}.social-icons.size-small>a:active,.social-icons.size-small>a:hover{background:#212529}.social-icons.size-small>a+a{margin-left:16px}.tabs{position:relative}.tabs:before{background:#fff;border-radius:7px 7px 0 0;content:"";display:block;height:8px;left:1px;position:absolute;right:1px;top:68px;z-index:10}@media screen and (min-width:1240px){.tabs:before{top:76px}}.tabs-body{background:#fff;border-radius:8px;border:1px solid #6c757d;box-shadow:0 8px 20px rgba(108,117,125,.2);padding:24px}@media screen and (min-width:980px){.tabs-body{padding:32px}}@media screen and (min-width:1240px){.tabs-body{padding:40px}}.tabs .nav-tabs{border-bottom:0;flex-wrap:nowrap;height:76px;margin:-20px -20px -9px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 20px,#000 calc(100% - 20px),transparent);mask-image:linear-gradient(90deg,transparent,#000 20px,#000 calc(100% - 20px),transparent);overflow:scroll;overflow-x:scroll;overflow-y:visible;padding:20px 20px 0;position:relative}@media screen and (min-width:940px){.tabs .nav-tabs{overflow:visible}}@media screen and (min-width:1240px){.tabs .nav-tabs{height:84px}}.tabs .nav-link{align-items:center;border-bottom:0;color:#6c757d;display:flex;font-size:.875rem;flex-shrink:0;height:56px;justify-content:center;padding:0 12px 8px;text-align:center;white-space:nowrap}@media screen and (min-width:1240px){.tabs .nav-link{height:64px;padding:0 16px 8px}}.tabs .nav-link.active{background:#fff;box-shadow:0 -4px 8px rgba(108,117,125,.1);font-weight:700;padding:0 16px 8px}@media screen and (min-width:980px){.tabs .nav-link.active{padding:0 24px 8px}}@media screen and (min-width:1240px){.tabs .nav-link.active{padding:0 32px 8px}}.tab-pane pre{background:#212529;border-radius:16px;color:#fff;padding:24px 16px}@media screen and (min-width:1240px){.tab-pane pre{padding:32px 24px}}.trailing-link{align-items:center;color:#212529;display:flex;font-size:.875rem;font-weight:700}.trailing-link:after{background:no-repeat url(../images/icons/icon-arrow.svg);background-position:100%;background-size:contain;content:"";display:block;height:12px;transition:transform .2s;width:20px}.trailing-link:active,.trailing-link:hover{color:#212529;text-decoration:none}.trailing-link:active:after,.trailing-link:hover:after{transform:translateX(8px)}.trailing-link.span-full:after{margin-left:auto}ul{color:#495057;list-style-type:square;padding-left:1.25em}ul li:not(:last-child){margin-bottom:16px}ul li::marker{color:#ff3939}ul.has-separators{list-style:none;padding:0}ul.has-separators li:not(:last-child){border-bottom:4px solid #f1f6f9;margin-bottom:24px;padding-bottom:24px}.bg-gradient-secondary{background-image:linear-gradient(58deg,#ff6443 3%,#fe561d 24%,#e32f0d 93%)}.bg-gradient-light-orange{background-image:linear-gradient(90deg,rgba(255,203,128,0),#ffcb80)}.bg-offset-right{bottom:0;left:-24px;position:absolute;top:0;width:calc(100vw + 24px);z-index:-1}@media screen and (min-width:1240px){.bg-offset-right{left:-96px;width:calc(100vw + 96px)}}.bg-inset-right{bottom:0;left:40px;position:absolute;top:0;width:calc(100vw - 40px);z-index:-1}@media screen and (min-width:980px){.bg-inset-right{left:96px;width:calc(100vw - 96px)}}.has-border-left{border-left:8px solid #f1f6f9;padding-left:16px}.font-xl{font-size:1.25rem}.font-lg{font-size:1.125rem}.font-sm{font-size:.875rem}.font-xs{font-size:.625rem}.font-weight-semibold{font-weight:600}.display-5{color:#212529;font-size:20px;font-weight:500}.display-6{color:#212529;font-size:14px;font-weight:700}.text-decoration-underline{text-decoration:underline}.text-upper{text-transform:uppercase} \ No newline at end of file diff --git a/website/images/logos/logo-almaz-capital.svg b/website/images/logos/logo-almaz-capital.svg new file mode 100644 index 00000000000..ed2357083ed --- /dev/null +++ b/website/images/logos/logo-almaz-capital.svg @@ -0,0 +1 @@ +AC Logo \ No newline at end of file diff --git a/website/images/logos/logo-altimeter-capital.png b/website/images/logos/logo-altimeter-capital.png new file mode 100644 index 00000000000..7c0d3b25b8d Binary files /dev/null and b/website/images/logos/logo-altimeter-capital.png differ diff --git a/website/images/logos/logo-coatue.png b/website/images/logos/logo-coatue.png new file mode 100644 index 00000000000..c9331141f5a Binary files /dev/null and b/website/images/logos/logo-coatue.png differ diff --git a/website/images/logos/logo-firstmark.svg b/website/images/logos/logo-firstmark.svg new file mode 100644 index 00000000000..e529766bae4 --- /dev/null +++ b/website/images/logos/logo-firstmark.svg @@ -0,0 +1,579 @@ + + + logo-firstmark + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/images/logos/logo-leadedge-capital.png b/website/images/logos/logo-leadedge-capital.png new file mode 100644 index 00000000000..2c7671bfd67 Binary files /dev/null and b/website/images/logos/logo-leadedge-capital.png differ diff --git a/website/images/logos/logo-lightspeed.png b/website/images/logos/logo-lightspeed.png new file mode 100644 index 00000000000..6c8a6e5689c Binary files /dev/null and b/website/images/logos/logo-lightspeed.png differ diff --git a/website/images/logos/logo-redpoint.png b/website/images/logos/logo-redpoint.png new file mode 100644 index 00000000000..baf5a9a7392 Binary files /dev/null and b/website/images/logos/logo-redpoint.png differ diff --git a/website/images/logos/logo-yandex.png b/website/images/logos/logo-yandex.png index f84f4c1b58d..92349036b3f 100644 Binary files a/website/images/logos/logo-yandex.png and b/website/images/logos/logo-yandex.png differ diff --git a/website/images/photos/caryn-marooney.jpg b/website/images/photos/caryn-marooney.jpg new file mode 100644 index 00000000000..446e890ebe1 Binary files /dev/null and b/website/images/photos/caryn-marooney.jpg differ diff --git a/website/images/photos/kevin-wang.jpg b/website/images/photos/kevin-wang.jpg new file mode 100644 index 00000000000..90eff0a3402 Binary files /dev/null and b/website/images/photos/kevin-wang.jpg differ diff --git a/website/src/scss/components/_logo.scss b/website/src/scss/components/_logo.scss new file mode 100644 index 00000000000..bbc91f87284 --- /dev/null +++ b/website/src/scss/components/_logo.scss @@ -0,0 +1,8 @@ +.logo { + display: block; + height: 36px; + max-width: 220px; + object-fit: contain; + object-position: center; + width: 100%; +} diff --git a/website/templates/company/investors.html b/website/templates/company/investors.html index 0dd38085c83..fbe15ccd8e9 100644 --- a/website/templates/company/investors.html +++ b/website/templates/company/investors.html @@ -2,9 +2,22 @@ {{ _('ClickHouse Investors') }} -
-
+
+
+ + + +

+ {{ _('Mike Volpi') }} +

+

+ {{ _('Board Member') }} +

+ + +
+
@@ -14,20 +27,38 @@

{{ _('Board Member') }}

- -
-
+ - - +
+
+ + +

- {{ _('Mike Volpi') }} + {{ _('Caryn Marooney') }}

-

- {{ _('Board Member') }} -

- + + +
+
+ + + + +

+ {{ _('Kevin Wang') }} +

+
+ +
+ + + + + + +
diff --git a/website/templates/company/overview.html b/website/templates/company/overview.html index e5759227c86..2d95a57ddd8 100644 --- a/website/templates/company/overview.html +++ b/website/templates/company/overview.html @@ -1,14 +1,16 @@
- +

- Creators of the online analytical processing (OLAP) database management system ClickHouse have announced their decision to officially incorporate as a company. The creator of ClickHouse, Alexey Milovidov (CTO), will be joined by co-founders and seasoned enterprise software executives, Yury Izrailevsky (President, Product and Engineering) and Aaron Katz (CEO), along with nearly $50M in Series A funding led by Index Ventures and Benchmark. + ClickHouse is an open-source column-oriented DBMS (columnar database management system) for online analytical processing (OLAP) that allows users to generate analytical reports using SQL queries in real-time.

- -

- ClickHouse is an open-source, column-oriented OLAP database management system that allows users to generate analytical reports using SQL queries in real-time. Its technology works 100-1,000x faster than traditional database management systems, and processes hundreds of millions to over a billion rows and tens of gigabytes of data per server per second. With a widespread user base around the globe, the technology has received praise for its reliability, ease of use, and fault tolerance. +

+ Its technology works 100-1000x faster than traditional database management systems and processes hundreds of millions to over a billion rows and tens of gigabytes of data per server per second. With a widespread user base around the globe, the technology has received praise for its reliability, ease of use, and fault tolerance.

- +

+ In September of 2021 in San Fransisco, CA, ClickHouse incorporated to house the open source technology with an initial $50 million investment from Index Ventures and Benchmark Capital. On October 28, 2021 the company received Series B funding totaling $250 million at an evaluation of $2 billion from Coatue Management, Altimeter Capital, and other investors. The company continues to build the open source project and engineering the cloud technology. +

+
diff --git a/website/templates/company/press.html b/website/templates/company/press.html index 8265b68b063..ddb2cf584ac 100644 --- a/website/templates/company/press.html +++ b/website/templates/company/press.html @@ -11,6 +11,47 @@
+
+

+ {{ _('10/28/21') }} +

+

+ {{ _('ClickHouse Raises $250M Series B To Scale Groundbreaking OLAP Database Management System Globally') }} +

+

+ {{ _('The investment was led by Coatue and Altimeter, with participation from Index Ventures, Benchmark, Lightspeed, Redpoint, Almaz, Yandex N.V., FirstMark and Lead Edge.') }} +

+ {{ _('Read More') }} +
+ +
+ +

+ {{ _('10/28/21') }} +

+

+ {{ _('Bloomberg Exclusive') }} +

+

+ {{ _('ClickHouse Valued at $2 Billion in Round After Yandex Spinout.') }} +

+ {{ _('Read More') }} +
+ +
+ +

+ {{ _('10/28/21') }} +

+

+ {{ _('Lightspeed Perspective') }} +

+

+ {{ _('Why Lightspeed invested in ClickHouse: a database built for speed.') }} +

+ {{ _('Read More') }} +
+

diff --git a/website/templates/global/nav.html b/website/templates/global/nav.html index 7e120c99126..d775c88e4a5 100644 --- a/website/templates/global/nav.html +++ b/website/templates/global/nav.html @@ -42,7 +42,7 @@ Documentation