Nano Hash - криптовалюты, майнинг, программирование

Запрос mdx занимает больше времени, чем sql

я преобразовал анализ sql в анализ mdx и обнаружил, что mdx намного дороже с точки зрения времени выполнения, чем sql. ниже sql, который я пытаюсь преобразовать в mdx

select  inc.incident_id,inc.incident_start_time, inc.incident_end_time,inc_type.incident_type,inc.incident_desc,st_x(inc.the_geom) as incident_lon, st_y(inc.the_geom) as incident_lat,inc_type.class_name as incident_class, inc_type.incident_image  ,fir.modus_operandi, fir.fir_status, fir.fir_serial_no as fir_id  from analyst_mdx.incident as inc  join analyst_mdx.incident_types as inc_type on inc.incident_type = inc_type.incident_type_id left outer join analyst_mdx.fir_details as fir on inc.fir_no = fir.fir_no  join analyst_mdx.district on (st_contains(district.the_geom, inc.the_geom) and district.district_id=1)  where inc.incident_type in ('10','8','14','11','5','9','19','21','6','7','16','3','4','12','20','13','1','2','23','17','18')  and ((inc.incident_start_time between '2012-01-29T00:00:00'  and '2014-12-29T23:59:59')) order by incident_start_time, incident_end_time

и это факт таблицы взаимосвязаны

введите здесь описание изображениятеперь позвольте мне показать вам mdx, который я сделал

with member [Measures].[incident_type] as '[incident].CurrentMember.Properties("incident_type")'  
  member [Measures].[incident_desc] as '[incident].CurrentMember.Properties("incident_desc")'
  member [Measures].[incident_class] as '[incident].CurrentMember.Properties("incident_class")'
  member [Measures].[incident_image] as '[incident].CurrentMember.Properties("incident_image")'
  member [Measures].[modus_operandi] as '[incident].CurrentMember.Properties("modus_operandi")'
  member [Measures].[fir_status] as '[incident].CurrentMember.Properties("fir_status")'
  member [Measures].[fir_id] as '[incident].CurrentMember.Properties("fir_id")'
  member [Measures].[date_start_time] as '[incident].CurrentMember.Properties("date_start_time")'
  member [Measures].[the_geom] as '[incident].CurrentMember.Properties("the_geom")'
  member [Measures].[date_end_time] as '[incident].CurrentMember.Properties("date_end_time")'
  member [time].[newtime] as 'Aggregate({([time].[all  periods].[2012].[4].[15] : [time].[all  periods].[2012].[4].[30]),([time].[all  periods].[2012].[5]:[time].[all  periods].[2012].[12]) ,([time].[all  periods].[2013]),([time].[all  periods].[2014].[1] : [time].[all  periods].[2014].[6]),([time].[all  periods].[2014].[7].[1] : [time].[all  periods].[2014].[7].[15])})'
select {[Measures].[incident_type], [Measures].[incident_desc], [Measures].[incident_class],[Measures].[incident_image], [Measures].[modus_operandi], [Measures].[fir_status],[Measures].[fir_id], [Measures].[the_geom], [Measures].[date_start_time],[Measures].[date_end_time], [Measures].[incident_count]} ON COLUMNS,
NON EMPTY Filter([incident].[incident_id].Members, ST_Contains([district].[all district].[1].Properties("the_geom"),[incident].CurrentMember.Properties("the_geom"))) ON ROWS
from [pin_mapping]
where ([time].[newtime])

максимальная запись для таблицы 65 тысяч, sql выполняется не более 3 секунд, а mdx занимает более 10 минут. все мои концепции olap терпят неудачу с этим. может кто-нибудь объяснить мне, где я ошибаюсь?

this is the cube that i am using...

<Schema name="analyst_haryana">
  <Cube name="pin_mapping" cache="true" enabled="true">
    <Table name="pin_mapping_fact_table" schema="analyst_mdx"></Table>
    <Dimension type="StandardDimension" foreignKey="incident_id" name="incident">
      <Hierarchy hasAll="true" allMemberName="all incident" primaryKey="incident_id">
        <Table name="incident" schema="analyst_mdx"> </Table>
        <Level name="incident_id" column="incident_id" type="Numeric" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">
          <Property name="the_geom" column="the_geom" type="Geometry"></Property>
          <Property name="incident_type" column="incident_desc" type="String"></Property>
          <Property name="incident_desc" column="incident_desc" type="String"></Property>
          <Property name="fir_status" column="fir_status" type="String"></Property>
          <Property name="incident_image" column="incident_image" type="String"></Property>
          <Property name="modus_operandi" column="incident_desc" type="String"></Property>
          <Property name="incident_class" column="incident_desc" type="String"></Property>
          <Property name="date_start_time" column="date_start_time" type="String"></Property>
          <Property name="date_end_time" column="date_end_time" type="String"></Property>
        </Level>
      </Hierarchy>
    </Dimension>
    <Dimension type="TimeDimension" foreignKey="time_id" name="time">
      <Hierarchy hasAll="true" allMemberName="all  periods" primaryKey="time_id">
        <Table name="aux_dates" schema="analyst_mdx"></Table>
        <Level name="year" column="the_year" type="Numeric" uniqueMembers="true" levelType="TimeYears" hideMemberIf="Never"></Level>
		<Level name="quarter" column="the_quarter" type="String" uniqueMembers="false" levelType="TimeQuarters" hideMemberIf="IfParentsName"></Level>
        <Level name="month" column="the_month" type="Numeric" uniqueMembers="false" levelType="TimeMonths" hideMemberIf="IfParentsName"></Level>
        <Level name="day" column="the_day" type="Numeric" uniqueMembers="false" levelType="TimeDays" hideMemberIf="IfParentsName"></Level>
      </Hierarchy>
    </Dimension>
    <Dimension type="StandardDimension" foreignKey="district_id" name="district">
      <Hierarchy hasAll="true" allMemberName="all district" primaryKey="district_id">
        <Table name="district" schema="analyst_mdx"></Table>
        <Level name="district_id" column="district_id" type="Numeric" uniqueMembers="true" levelType="Regular" hideMemberIf="IfParentsName">
          <Property name="the_geom" column="the_geom" type="Geometry"></Property>
        </Level>
      </Hierarchy>
    </Dimension>
    <Dimension type="StandardDimension" foreignKey="incident_type_id" name="incident_type">
      <Hierarchy hasAll="true" allMemberName="all incident _types" primaryKey="incident_type_id">
        <Table name="incident_types" schema="analyst_mdx"></Table>
        <Level name="incident_type_id" column="incident_type_id" type="Numeric" uniqueMembers="true" levelType="Regular" hideMemberIf="Never"></Level>
      </Hierarchy>
    </Dimension>
    <Dimension type="StandardDimension" foreignKey="fir_serial_no" name="fir_details">
      <Hierarchy hasAll="true" allMemberName="all status" primaryKey="fir_serial_no">
        <Table name="fir_details" schema="analyst_mdx"></Table>
        <Level name="fir_status" column="fir_status" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never"></Level>
      </Hierarchy>
    </Dimension>
    <Measure name="incident_count" column="incident_count" datatype="Numeric" aggregator="count" visible="true"></Measure>
  </Cube>
</Schema>


  • - Пожалуйста, постарайтесь упростить ваши вопросы. Я не говорю, что на них слишком сложно ответить, но просто просматриваю их слишком много деталей. 08.12.2014

Ответы:


1

Ну, не совсем уверен, так как у меня нет планов казни, но тут ничего не выйдет..

  1. У вас есть хорошо настроенный SQL-запрос, который выполняет набор вычислений, в чем хорош SQL Server. А поскольку размер таблицы относительно невелик, она должна быть быстрой. С другой стороны, в запросе MDX вы фактически выполняете вычисление ячейки за ячейкой (из-за использования функции CURRENTMEMBER. Механизм анализа отстой! Таким образом, он должен быть медленным.

  2. Вы используете функцию NON EMPTY, которая в основном перебирает каждую строку и отфильтровывает ПУСТЫЕ. Это увеличивает нагрузку на двигатель. Запустите запрос, удалив предложение NON EMPTY, и посмотрите, сокращает ли это время выполнения (хотя я заметил, что иногда Предложение NON EMPTY на самом деле улучшает время рендеринга)

Здесь следует пересмотреть дизайн куба. Все вычисляемые члены должны быть по возможности помещены в качестве атрибутов задействованных измерений.

08.12.2014
  • @sourav.. на самом деле мой случай таков: мне нужны все свойства уровня инцидента_id инцидента измерения, и я хочу отфильтровать результат для определенного района и диапазона времени для куба, упомянутого выше ... есть ли другой способ добиться того же, не выполняя вычисление ячейки за ячейкой, т.е. без использования CURRENTMEMBER..??? 10.12.2014

  • 2

    Включите журнал запросов mondrian slow sql (сделанный в log4j.xml) и посмотрите, какой запрос является проблемой.

    Посмотрите, является ли это одним запросом или просто mondrian выполняет 1000 запросов.

    Если последний просмотрит ваши параметры procRowCount в схеме, а также параметры uniqueMembers. Возможно, опубликуйте схему и результаты вышеуказанных изменений, чтобы мы могли понять больше. Существует также (устаревшая) опция highcardinality.

    08.12.2014
  • я использую geomondrian... не могли бы вы рассказать мне, как включить журнал медленных запросов mondrian.. 09.12.2014
  • Это просто запись в log4j.xml. Скопируйте и вставьте его с сервера Pentaho BI для примера. 09.12.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..